四、(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

输出图如下,不同颜色代表不同的类别,最后结果被分成了四类。

四、(1) 层次聚类

搞定收工。

“☺☺☺ 若本篇文章对你有一丝丝帮助,请帮顶、评论点赞,谢谢。☺☺☺”

↓↓↓↓