在<<足球游戏论坛数据分析--简单粗暴的贝叶斯>>中尝试了贴标签后,一直觉得结果无法接受, 慢慢回想, 其实选择的算法是错误的,原因有
- 论坛帖子分类并非就是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开始步入稳定状态,提升不大.
最后,附上个特征向量经降维后作的分类散点图