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

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

一、抓到数据

机器学习聚类分析——k-means文本聚类分析_第1张图片

抓出来140条评论~~

放代码~~ 

import requests

from bs4 import BeautifulSoup

start_page = 1

end_page = 7

data = []

while start_page <= end_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进行聚类计算。

放代码

机器学习聚类分析——k-means文本聚类分析_第2张图片

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())

那么我们聚合几类呢?

机器学习聚类分析——k-means文本聚类分析_第3张图片

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()) #得到最佳参数

算出应该分几类

机器学习聚类分析——k-means文本聚类分析_第4张图片

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

机器学习聚类分析——k-means文本聚类分析_第5张图片

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

最后看分类结果:

机器学习聚类分析——k-means文本聚类分析_第6张图片
机器学习聚类分析——k-means文本聚类分析_第7张图片

似乎,还不错噢~ 

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

机器学习聚类分析——k-means文本聚类分析_第8张图片

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


机器学习聚类分析——k-means文本聚类分析_第9张图片

你可能感兴趣的:(机器学习聚类分析——k-means文本聚类分析)