我正在做一个机器学习项目,我有包含电子邮件中出现的单词频率的数据集。我需要找到每封邮件所属的集群。我所做的是将数据加载到 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/