我正在做一个机器学习项目,我有一个数据集,其中包含电子邮件中出现的单词的频率。我需要找到每个邮件所属的群集。我所做的是将数据加载到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封电子邮件,并且需要根据给定的单词对它们进行聚类,所以我也不能拆分为训练集。这是解决问题的正确方法。请提出哪种算法最好,我应该做什么。预先感谢
答案 0 :(得分:1)
您通常不在集群中执行任何类型的拆分/交叉验证。仅仅是因为该算法无论如何都没有标签,所以它不会轻易过拟合,也无法轻松地进行超参数优化。
但是,您需要仔细考虑数据预处理,尤其是在处理文本数据时,k均值不是一个好选择:1.一些文本可能根本不属于任何群集(可能是非典型的)2一些文字可能属于多个类别(例如,唐纳德·特朗普(Donald Trump)反对下跪的NFL球员=政治(em>)和(em)体育。 k均值不能很好地处理这两种情况。
答案 1 :(得分:1)