机器学习聚类分析——k-means文本聚类分析

最近比较喜欢听《认真的老去》这首歌,那就抓这个豆瓣评论做数据集吧,,做个评论的聚类分析。

一、抓到数据

抓出来140条评论~~

放代码~~

import requests

from bs4 import BeautifulSoup

start_page = 1

end_page = 7

data = []

while start_page

html = BeautifulSoup(requests.get(url='https://music.douban.com/subject/26979930/comments/hot?p='.format(start_page)).text)

data += [content.text for content in html.find_all('span',{'class':'short'})]

start_page +=1

下面开始我们的聚类分析

文本通过jieba分词,

传递给CountVectorizer,统计出词频。

再传递给TfidfTransformer,统计出tf-idf值,

对tf-idf进行聚类计算。

放代码

from sklearn.feature_extraction.text import CountVectorizer,TfidfTransformer

from sklearn.cluster import KMeans

import jieba

vectorizer = CountVectorizer()

X = vectorizer.fit_transform([" ".join([b for b in jieba.cut(a)]) for a in data])

tfid = TfidfTransformer()

X = tfid.fit_transform(X.toarray())

那么我们聚合几类呢?

from sklearn import metrics

def easy_get_parameter_k_means(data):

test_score = []

n_clusters_end = 50

n_clusters_start = 2

while n_clusters_start

km = KMeans(n_clusters=n_clusters_start)

km.fit(data)

clusters = km.labels_.tolist()

score = metrics.silhouette_score(X=X,labels=clusters)

num = sorted([(np.sum([1 for a in clusters if a==i]),i) for i in set(clusters)])[-1]

test_score.append([n_clusters_start,score,num[0],num[1]])

n_clusters_start += 1

return pd.DataFrame(test_score,columns=['共分了几类','分数','最大类包含的个数','聚类的名称']).sort_values(by ='分数',ascending =False)

easy_get_parameter_k_means(X.toarray()) #得到最佳参数

算出应该分几类

这里用到了“轮廓系数”算法,用户计算聚类的分数。聚类的好不好。

综合考虑, 分成11个簇 是最佳的聚类效果,带入参数。

最后看分类结果:

似乎,还不错噢~

原创(AI_大数据)文章,公众号首发,欢迎您的关注

打赏作者(下图),未来写出更好的文章及教程

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1A03N00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券