首页 > 代码库 > 足球游戏论坛数据分析--简单粗暴的K均值聚类

足球游戏论坛数据分析--简单粗暴的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 ‘‘
View Code

运行结果

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开始步入稳定状态,提升不大.

最后,附上个特征向量经降维后作的分类散点图

 技术分享

足球游戏论坛数据分析--简单粗暴的K均值聚类