如何在电子邮件中找到群集

时间:2018-09-15 13:17:23

标签: python machine-learning scikit-learn cluster-analysis data-mining

我正在做一个机器学习项目,我有一个数据集,其中包含电子邮件中出现的单词的频率。我需要找到每个邮件所属的群集。我所做的是将数据加载到pandas数据框中,然后训练了KMeans算法。 数据集如下所示:

[
    {
        "adwords": 2,
        "google": 4,
        "ads": 2,
        "facebook": 1,
        "shyam": 2
    },
    {
        "facebook": 4,
        "post": 2,
        "is": 1,
        "comment": 2,
        "likes": 1,
        "google": 1
    },...]

然后我的python代码如下:

import numpy as np
import pandas as pd

data = pd.read_json('data.json', orient='records')
data = data.fillna(0)

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5, init='k-means++')
kmeans.fit_predict(data)

现在,由于我只有30封电子邮件,并且需要根据给定的单词对它们进行聚类,所以我也不能拆分为训练集。这是解决问题的正确方法。请提出哪种算法最好,我应该做什么。预先感谢

2 个答案:

答案 0 :(得分:1)

您通常在集群中执行任何类型的拆分/交叉验证。仅仅是因为该算法无论如何都没有标签,所以它不会轻易过拟合,也无法轻松地进行超参数优化。

但是,您需要仔细考虑数据预处理,尤其是在处理文本数据时,k均值不是一个好选择:1.一些文本可能根本不属于任何群集(可能是非典型的)2一些文字可能属于多个类别(例如,唐纳德·特朗普(Donald Trump)反对下跪的NFL球员=政治(em>)和(em)体育。 k均值不能很好地处理这两种情况。

答案 1 :(得分:1)

@ rabin-poudyal,请注意,“数据拆分/交叉验证与标记或未标记的数据集无关” 。相反,交叉验证已应用于研究和实践中的聚类。请参阅这些文件以供参考,1234等。另请参阅有关SE

的讨论

如前所述,k-means仅适用于连续数据。由于您要处理文本数据,因此建议使用任何其他可以处理分类数据的聚类算法,例如k-medoids

相关问题