【问题标题】:How to find the cluster in email如何在电子邮件中找到集群
【发布时间】:2019-02-20 00:56:23
【问题描述】:

我正在做一个机器学习项目,我拥有包含电子邮件中出现的单词频率的数据集。我需要找到每封邮件所属的集群。我所做的是将数据加载到 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 封电子邮件,我需要根据给定的单词对它们进行聚类,因此我也无法拆分为训练测试集。这是解决问题的正确方法吗?请建议哪种算法最适合以及我应该做什么。提前致谢

【问题讨论】:

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


    【解决方案1】:

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

    但是,您需要仔细考虑数据预处理,尤其是在处理文本数据时,k-meane 不是一个好的选择:1. 某些文本可能根本不属于任何聚类(可能是非典型的)2 . 一些文本可能属于多个集群(例如,唐纳德特朗普对跪下的 NFL 球员大肆抨击 = 政治体育)。这两种情况都没有被 k-means 很好地处理。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-05-28
        • 2020-08-16
        • 2019-02-09
        • 1970-01-01
        • 1970-01-01
        • 2012-04-17
        • 2012-04-19
        • 1970-01-01
        • 2019-10-13
        相关资源
        最近更新 更多