足球游戏论坛数据分析--简单粗暴的K均值聚类
在<<足球游戏论坛数据分析--简单粗暴的贝叶斯>>中尝试了贴标签后,一直觉得结果无法接受, 慢慢回想, 其实选择的算法是错误的,原因有
- 论坛帖子分类并非就是PC/PS/XBOX这么简单
- 即使是作者自己贴的标签,也存在挂羊头的可能性
既然没法简单的给帖子分类,那么就尝试一下聚类算法看看有没有发现:
#事先已经把分好词的所有文本存成一个文件,没有事先分类 f = codecs.open('forum_all.txt', 'r', 'utf-8') words_full = f.readlines() f.close() true_k = 5 #事先预设分成5类 vectorizer = TfidfVectorizer(max_df=0.5, max_features=1000, min_df=2) transformer = TfidfTransformer() td = vectorizer.fit_transform(words_full) tfidf = transformer.fit_transform(td) word = np.array(vectorizer.get_feature_names()) km = KMeans(n_clusters=true_ke, init='k-means++', max_iter=200, n_init=1) km.fit(td) print(u"Silhouette Coefficient(轮廓系数): %0.3f" % metrics.silhouette_score(td, km.labels_, sample_size=5000)) order_centroids = km.cluster_centers_.argsort()[:, ::-1] terms = vectorizer.get_feature_names() for i in range(true_ke): #输出每个分类头10个特征词 for ind in order_centroids[i, :10]: print ' %s' % terms[ind], print ''
运行结果
Silhouette Coefficient(轮廓系数): 0.137 Cluster 0: 1634 posts 显卡 识别 独立 安装 如何 方法 教程 最后 破解版 reloaded Cluster 1: 4388 posts 2014 evolution soccer 推荐 pro 论坛 首发 dlc3 下载 破解版 Cluster 2: 1677 posts 汇总 资源 dlc6 22 10 更新 pes2014 分享 谢谢 支持 Cluster 3: 7872 posts wecn 发布 正式 pes2016 patch v2 简体中文 汉化 v1 补丁 Cluster 4: 11287 posts pes2014 疑难解答 补丁 更新 球员 10 球场 分享 pes2016 谢谢
从这个分类结果来看,我抓取的论坛板块主要讨论的是:
- 能/爽玩游戏的电脑配置, 即PC版游戏
- "你懂的"游戏用户还是不少,正版化依然任重而道远
- 过半数的讨论(分类3和4)是游戏的各路补丁,老司机都知道,在版权问题这个点上,FIFA无敌
- 颇为意外的是, 2014/2016竟然是热门版本, 2015毫无存在感
- 我现在有点怀疑我的爬虫花了大量时间在扒PC板块的帖子 -_-b
PS, 分类数5其实只是个随便定下的值. 之所以最终选5, 只是在测试了从3到12的分类后, 发现轮廓系数在5开始步入稳定状态,提升不大.
最后,附上个特征向量经降维后作的分类散点图