python⽂本聚类可视化_使⽤K-means及TF-IDF算法对中⽂⽂
本聚类并可视化
使⽤K-means及TF-IDF算法对中⽂⽂本聚类并可视化
2018-05-31
7,826
对于⽆监督学习来说,聚类算法对于数据挖掘、NLP处理等⽅向都有着⾮常重要的地位。常见的聚类算法⽐如K-means、
BIRCH(Balanced Iterative Reducing and Clustering Using Hierarchies)、GMM(Gaussian mixture model)、GAAC(Group-average Agglomerative Clustering)等,但是⽤得最普遍的还是K-means算法,其时间复杂度低且实现的效果较好受到⼴泛的应⽤。
本⽂代码的相关环境为:
* python3以上
* sklearn 机器学习常⽤包
* jieba 中⽂分词
* matplotlib 可视化
准备语料
语料格式为每⾏表⽰⼀个⽂档(语句、⽂章等需要聚类的⽂本),⾏数表⽰需要聚类的所有⽂本。
类似这样的:
导⼊相关包
1
2
python中文文档3
4
5
6
7
fromsklearn.importCountVectorizer,TfidfTransformer
fromsklearn.manifoldimportTSNE
fromsklearn.clusterimportKMeans
fromdata_utilsimport *
importjieba
importmatplotlib.pyplotasplt
加载语料
1
7
8
9
10
11
12
13
14
15
16
# bigram分词
segment_bigram=lambdatext:" ".join([word+text[idx+1]foridx,wordinenumerate(text)ifidx<len(text)-1])
# 结巴中⽂分词
segment_jieba=lambdatext:" ".join(jieba.cut(text))
'''
1、加载语料
'''
corpus=[]
withopen("","r",encoding="utf-8")asf:
forlineinf:
# 去掉标点符号
corpus.append(segment_jieba(remove_punc(line.strip())))
'''
代码中定义了两种分词⽅式,⼀种是单纯的使⽤bi-gram分词,⼀种是使⽤jieba进⾏中⽂分词,两份分词⽅式根据效果⾃⼰选择使⽤哪种。加载语料的时候把标点符号去掉,这对于⽂本聚类⼏乎没有作⽤。还可以去掉⾃⼰定义的⼀些类似“你”、“我”、“他”等⼤量⼝语化中均会出现的停⽌词,这类词语往往对聚类也起不到作⽤。
计算TF-IDF权重
1
2
3
9
10
11
12
13
14
15
16
17
18
19
20
21
'''
2、计算tf-idf设为权重
'''
vectorizer=CountVectorizer()
transformer=TfidfTransformer()
tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))
'''
3、获取词袋模型中的所有词语特征
如果特征数量⾮常多的情况下可以按照权重降维
'''
_feature_names()
print("word feature length: {}".format(len(word)))
'''
4、导出权重,到这边就实现了将⽂字向量化的过程,矩阵中的每⼀⾏就是⼀个⽂档的向量表⽰'''
tfidf_array()
将⽂本向量化的⽅式其实有很多,最简单的就是one-hot⽅式,在之前的⽂章中也讲过这种⽅式的实现原理,如果不⽤TF-IDF设置权重,那么,后⾯进⾏⽂本向量化之后的矩阵值只有0、1两种,词与词之间的权重没有进⾏区分,所以⽤这种⽅式设置权重。
⽂本聚类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'''
5、对向量进⾏聚类
'''
# 指定分成7个类
kmeans=KMeans(n_clusters=7)
kmeans.fit(tfidf_weight)
# 打印出各个族的中⼼点
print(kmeans.cluster_centers_)
forindex,labelinenumerate(kmeans.labels_,1):
print("index: {}, label: {}".format(index,label))
# 样本距其最近的聚类中⼼的平⽅距离之和,⽤来评判分类的准确度,值越⼩越好
# k-means的超参数n_clusters可以通过该值来评估
print("inertia: {}".format(kmeans.inertia_))
可视化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
'''
6、可视化
'''
# 使⽤T-SNE算法,对权重进⾏降维,准确度⽐PCA算法⾼,但是耗时长tsne=TSNE(n_components=2)
decomposition_data=tsne.fit_transform(tfidf_weight)
x=[]
y=[]
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论