python - 如何在电子邮件中查找集群

标签 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 封电子邮件,并且需要根据给定的单词对它们进行聚类,因此我也无法拆分为训练测试集。这是解决问题的正确方法吗?请建议哪种算法效果最好以及我应该做什么。提前致谢

最佳答案

您通常不会在聚类中执行任何类型的拆分/交叉验证。很简单,因为算法无论如何都没有标签,所以它不会那么容易过拟合,并且你不能轻易地进行超参数优化。

但是,您需要仔细考虑数据预处理,特别是在处理文本数据时,k-meane 不是一个好的选择: 1. 某些文本可能根本不属于任何簇(可能是非典型的) 2 .某些文本可能属于多个集群(例如,唐纳德·特朗普咆哮反对跪下的 NFL 球员 = 政治体育)。 k-means 无法很好地处理这两种情况。

关于python - 如何在电子邮件中查找集群,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52345054/

相关文章:

python - Pandas duration groupby - 以定义的值开始组范围

python - Keras 模型到 Theano 函数

python - 从列表创建 numpy 数组给出了错误的形状

scikit-learn - 亲和传播 (sklearn) - 奇怪的行为

python - Scikit 学习,将高斯拟合到直方图

python - 如何在整个 Pandas 列上应用 json_normalize

python - 使用 scikit 对文本进行分类

machine-learning - LightGBM (lgb.cv) 的 CV 模型是什么?具体如何使用它?

python - 从另一个列表中删除一个列表中对应于 nan 的项目

scikit-learn - Sklearn SimpleImputer 在管道中不起作用?