添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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


一、抓到数据




抓出来140条评论~~


放代码~~


import requests

from bs4 import BeautifulSoup

start_page = 1

end_page = 7

data = []

while start_page <= end_page:

html = BeautifulSoup(requests.get(url=' music.douban.com/subjec '.format(start_page)).text)

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

start_page +=1


下面开始我们的聚类分析


  1. 文本通过jieba分词,
  2. 传递给CountVectorizer,统计出词频。
  3. 再传递给TfidfTransformer,统计出tf-idf值,
  4. 对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 <= n_clusters_end:

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_大数据)文章,公众号首发,欢迎您的关注


weixin.qq.com/r/2kT748v (二维码自动识别)


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


wxp://f2f0_H3tTygX38gN2-ddCME2fmavjmPtoG9u (二维码自动识别)

发布于 2018-08-13 18:00

文章被以下专栏收录