四、(1) 层次聚类
四、(1) 层次聚类
层次聚类方法的基本思想是:通过某种相似性测度计算节点之间的相似性,并按相似度由高到低排序,逐步重新连接个节点。该方法的优点是可随时停止划分,主要步骤如下:
(1)移除网络中的所有边,得到有n个孤立节点的初始状态;
(2 )计算网络中每对节点的相似度;
(3)根据相似度从强到弱连接相应节点对,形成树状图;
( 4)根据实际需求横切树状图,获得社区结构
完整代码如下:
# -*- coding: utf-8 -*-
"""
Created on Fri May 17 12:55:42 2019
@author: sun
"""
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
'''
1、加载语料
'''
text = open('聚类4类.txt', encoding='UTF-8').read()
#将文本数据转化为列表
list1=text.split("\n")
#print(list1)
#提取关键词出现min到max次的关键词
count_vec=CountVectorizer(min_df=20, max_df=30)
#把关键词转化成词篇矩阵
xx1 = count_vec.fit_transform(list1).toarray()
#读取具体关键词
word=count_vec.get_feature_names()
#xx1 = xx1.T
#聚类标题为高词频的关键词
titles = word
#将词篇矩阵转化dataframe
#DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表
df = pd.DataFrame(xx1)
#print(df)
#距离为corr。距离corr(x,y) 相关系数,用来刻画二维随机变量两个分量间相互关联程度
dist = df.corr()
import matplotlib.pyplot as plt
import matplotlib as mpl
from scipy.cluster.hierarchy import ward, dendrogram
linkage_matrix = ward(dist) #使用Ward聚类预先计算的距离定义链接矩阵
fig, ax = plt.subplots(figsize=(10, 6)) # set size
ax = dendrogram(linkage_matrix, orientation="right", labels=titles);
plt.tick_params(
axis= 'x', # 使用 x 坐标轴
which='both', # 同时使用主刻度标签(major ticks)和次刻度标签(minor ticks)
bottom='off', # 取消底部边缘(bottom edge)标签
top='off', # 取消顶部边缘(top edge)标签
labelbottom='off')
plt.tight_layout() # 展示紧凑的绘图布局
# 注释语句用来保存图片
plt.savefig('层次聚类.png', dpi=200) # 保存图片为 ward_clusters
输出图如下,不同颜色代表不同的类别,最后结果被分成了四类。
搞定收工。
“☺☺☺ 若本篇文章对你有一丝丝帮助,请帮顶、评论点赞,谢谢。☺☺☺”
↓↓↓↓