第八天学习进度--Kmeans的应用之文本聚类

文本的聚类,就是为了解决大批量文本的自动分类的问题。

之前遇到过这样一个问题,就是有一堆文章的数据,想要得到这些文章对应的类别。但是这堆文章的数据里面并没有分类的信息,要是按照传统方式,需要人工对每篇文章都进行分类处理,但是这样的分类处理的速度太慢了,而且对于人工来说,工作量也是极其庞大的。是典型的吃力不讨好的一个活,那么有没有什么方法能够对这些数据进行简单的自动聚类呢,也就是无监督对这些文本进行分类。这个时候就要用到Kmeans算法了。

Kmeans就是指K均值聚类算法,本质上为一种无监督的分类算法,是将预将数据分为K组,则随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个对象分配给距离它最近的聚类中心的一种算法。而每个分配给离他最近的聚类中心的对象就都为一个种类。将文章转化为tf-idf或者对应的词向量之后,就能通过Kmeans来对这些文章做无监督的自动聚类了。

Kmeans一般的过程为:

  1. 在样本中随机选取k个样本点充当各个簇的中心点

  2. 计算所有样本点与各个簇中心之间的距离 ,然后把样本点划入最近的簇中

  3. 根据簇中已有的样本点,重新计算簇中心 

  1. 重复23过程

在python中使用文本聚类是一个简单的过程,sklearn中为我们提供了Kmeans的模块

只需导入对应的Kmeans模块即可使用相应的功能

from sklearn.cluster import KMeans

接下来需要构建词向量或者tf-idf,这里我们选择词向量

sklearn同时为我们提供了对应词向量构建的模块CountVectorizer

导入对应的CountVectorizer即可使用

from sklearn.feature_extraction.text import CountVectorizer

接下来调用封装好的相应函数功能即可

    count_vec=CountVectorizer(stop_words=stopwords) #stopwords是停用词列表
    km_matrix= count_vec.fit_transform(wordlist)    #wordlist是以空格为分隔的字符串列表,如['不 开心','很 开心']
    num_clusters = 10 #聚为10类,可根据需要修改,聚类的数量需小于最大分类后的数量
    km = KMeans(n_clusters=num_clusters)
    km.fit(km_matrix)
    clusters = km.labels_.tolist()

对应的clusters就是对应wordlist的分类后的类别列表了(以0-num_clusters为范围) 

 

posted on 2020-07-15 20:45  Halone  阅读(505)  评论(0编辑  收藏  举报