【机器学习】K-means文本聚类,简单入门版,python

K-means是一种常用的聚类算法,入门版展示如下,代码传送门:

# -*- coding: utf-8 -*-

import jieba 
from sklearn.feature_extraction.text import  TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.externals import joblib

def jieba_tokenize(text):
    return jieba.lcut(text) 


tfidf_vectorizer = TfidfVectorizer(tokenizer=jieba_tokenize,lowercase=False)

'''
tokenizer: 指定分词函数
lowercase: 在分词之前将所有的文本转换成小写,因为涉及到中文文本处理,
所以最好是False
'''

text_list = ["今天天气真好啊啊啊啊", 
"小明上了清华大学", 
"我今天拿到了Google的Offer", 
"清华大学在自然语言处理方面真厉害"]

#需要进行聚类的文本集

tfidf_matrix = tfidf_vectorizer.fit_transform(text_list)

num_clusters = 3
km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40, 
                    init='k-means++')

'''
n_clusters: 指定K的值
max_iter: 对于单次初始值计算的最大迭代次数
n_init: 重新选择初始值的次数
init: 制定初始值选择的算法
n_jobs: 进程个数,为-1的时候是指默认跑满CPU
注意,这个对于单个初始值的计算始终只会使用单进程计算,
并行计算只是针对与不同初始值的计算。比如n_init=10,n_jobs=40, 
服务器上面有20个CPU可以开40个进程,最终只会开10个进程
'''

#返回各自文本的所被分配到的类索引
result = km_cluster.fit_predict(tfidf_matrix)

print ("Predicting result: ", result)

'''
每一次fit都是对数据进行拟合操作,
所以我们可以直接选择将拟合结果持久化,
然后预测的时候直接加载,进而节省时间。
'''

结果图:

结果解释:

因为输入的是4个元素:

text_list = ["今天天气真好啊啊啊啊", 
"小明上了清华大学", 
"我今天拿到了Google的Offer", 
"清华大学在自然语言处理方面真厉害"]

所以处理后也是出来4个结果与输入分别对应,那么聚类结果是第2句和第4句是一类,其余两句自成一派。

备注:本文代码系非原创的,因需要做文本聚类,几乎将博客里的关于这部分的代码都尝试了一遍,这份代码是没有报错的,感恩大神。

posted @ 2020-03-02 11:39  HelenLee01  阅读(211)  评论(0编辑  收藏  举报