多元统计分析——层次聚类方法

多元统计分析——层次聚类方法,第1张

一、代码实现与示例 1. 代码实现 from scipy.cluster.hierarchy import dendrogram, linkage,fcluster z=linkage(y, method=’single’, metric=’euclidean’) # 聚类结果 y: 数据矩阵 , method: 衡量簇与簇之间的远近程度的方法,主要有 ‘single:’ :最小距 离; ‘complete’ :最大距离; ‘average’ :平均距离 Metric 距离度量 : ’l1’ ’l2’ ’mantattan’ ’cosine’ ’precomputed’ 等 fcluster(z, t=k, criterion=‘maxclust’)# 定义小类聚集准则 Z 代表 Z linkage 得到的矩阵 , 记录了层次聚类的层次信息 t 为类的个数 , criterion='maxclust‘or ‘maxclust_monocrit’ t 为阈值 , criterion= ‘inconsistent’, ‘distance’ or ‘monocrit’ dendrogram(Z) # 制作谱系图 2. 代码示例
from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
from matplotlib import pyplot as plt
X = [[1,2],[3,2],[4,4],[1,2],[1,3]]
Z = linkage(X, 'ward')
f = fcluster(Z,4,'distance')
fig = plt.figure(figsize=(5, 3))
dn = dendrogram(Z)
plt.show()
二、实验作业 案例一:世界银行样本数据集 创建世界银行的一个主要目标是对抗和消除贫困。在这个不断发展的世界中, 世界银行持续的发展并精细地调整它的政策,已经帮助这个机构逐渐实现了消除贫困的目标。消除贫困的成果以下指标的改进衡量,这些指标包括健康、教育、卫生、基础设施以及其他需要用于改进穷人生活的服务。与此同时,发展成果必须保证以一种环保的、全社会的、经济可持续的方式达成。 1. 准备工作 为 了 进 行 层 次 聚 类 , 我 们 需 要 使 用 从 世 界 银 行 收 集 的 数 据 集 WBClust2013.csv 2. 数据预处理 利用 DataFrame.head(5) 方法查看数据的前几行,发现各变量取值的量纲不一致,需要利用归一化数据的数据分析手段。 3. 模型训练 样本间距离 :尝试使用的距离度量可以是欧式距离、最大距离、曼哈顿距离、堪培拉距离、二进制距离或闵可夫斯基距离。 类间距离: 使用离差平方和 (WARD) 或者类平均法等方法。 4. 绘制模型 5. 对比实验 选择不同的样本间举例或类间距离并观察聚类后的谱系图的变化情况 案例二:世界银行样本数据集 1999 2010 年, 33000 平方英里( 85500 平方公里),即 2.8% 的亚马逊雨林被烧毁。这一结果是被 NASA 领导的研究项目发现的。该研究的主要目的是衡量森林树冠下暗火的蔓延程度。该研究发现火灾烧毁的森林比用于农耕而砍伐的森林面积大很多。然而,森林烧毁情况和火灾之间没有建立起联系。如何建立火灾和森林烧毁情况之间的联系,需要基于 NASA Aqua 卫星上的大气红外探测仪(AIRS )设备的湿度数据。火灾频率与夜间的低湿度相吻合, 低湿度使得地表的低强度火灾能够持续燃烧。 2.1 准备工作 为了进行层次聚类,我们应该使用采集于亚马逊雨林( 1999 2010 年)的数据集。NASAUnderstory.csv 2. 数据预处理 利用 DataFrame.head(5) 方法查看数据的前几行,发现各变量取值的量纲不一致,需要利用归一化数据的数据分析手段。 3. 模型训练 样本间距离 :尝试使用的距离度量可以是欧式距离、最大距离、曼哈顿距离、堪培拉距离、二进制距离或闵可夫斯基距离。 类间距离: 使用离差平方和 (WARD) 或者类平均法等方法。 4. 绘制模型

 

5. 对比实验 选择不同的样本间举例或类间距离并观察聚类后的谱系图的变化情况 方法一
from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import StandardScaler
#
data = pd.read_csv(r"WBClust2013.csv",index_col = 'Country')
print(data.head(5))

 #极差标准化变换
mm = MinMaxScaler()
mm_data = mm.fit_transform(data)#归一化后的数据

 #标准化变换
ss = StandardScaler()
std_data = ss.fit_transform(data)#归一化后的数据
# origin_data = ss.inverse_transform(std_data)#原始数据

 #层次信息
z0=linkage(mm_data, method='average', metric='euclidean') #平均距离
z1=linkage(std_data, method='average', metric='euclidean') #平均距离

 #类个数
f=fcluster(z0, t=4, criterion='maxclust')#'inconsistent’, ‘distance’
f=fcluster(z1, t=4, criterion='maxclust')#'inconsistent’, ‘distance’

fig = plt.figure(figsize=(5, 3))
plt.title('极差标准化')
dn = dendrogram(z0)
plt.show()
plt.title('标准化')
dn = dendrogram(z1)
plt.show()



#第二题
data = pd.read_csv(r"NASAUnderstory.csv",index_col = 'Overstory Species')
print(data.head(5))
#极差标准化变换
mm = MinMaxScaler()
mm_data = mm.fit_transform(data)#归一化后的数据

#标准化变换
ss = StandardScaler()
std_data = ss.fit_transform(data)#归一化后的数据

#层次信息
z0=linkage(mm_data, method='average', metric='euclidean') #平均距离
z1=linkage(std_data, method='average', metric='euclidean') #平均距离

#类个数
f=fcluster(z0, t=4, criterion='maxclust')
f=fcluster(z1, t=4, criterion='maxclust')

fig = plt.figure(figsize=(5, 3))
plt.title('极差标准化')
dn = dendrogram(z0)
plt.show()
plt.title('标准化')
dn = dendrogram(z1)
plt.show()

方法二

from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler

data=pd.read_csv(r"./WBClust2013.csv",header=0,index_col=0)
print('--------------作业1--------------')
# 数据预处理
ss = StandardScaler()
data = ss.fit_transform(data)#归一化后的数据

# 模型训练
metrics=['Euclidean']
# 'mantattan','cosine','chebyshev'
# 选择不用的距离度量:
# 欧氏距离 曼哈顿距离 余弦相似性 切比雪夫距离
Z = linkage(np.array(data), method='ward',metric='euclidean')
f = fcluster(Z,4,'distance')
fig = plt.figure(figsize=(14, 8))
dn = dendrogram(Z)
plt.title(f"method=ward,metric=euclidean")
plt.show()
    
# 选择不同的类间距离,距离度量标准为欧式距离
methods=['single','complete','average','ward']
for th in methods:
    Z = linkage(np.array(data), method=th,metric='euclidean')
    f = fcluster(Z,4,'distance')
    fig = plt.figure(figsize=(14, 8))
    dn = dendrogram(Z)
    plt.title(f"method={th},metric=euclidean")
    plt.show()


print('--------------作业2--------------')
data1=pd.read_csv(r"./NASAUnderstory.csv",header=0,index_col=1)

data1=data1.drop('Labels', axis=1)
data1 = ss.fit_transform(data1)
methods=['single','complete','average','ward']
for th in methods:
    Z = linkage(np.array(data1), method=th,metric='euclidean')
    f = fcluster(Z,4,'distance')
    fig = plt.figure(figsize=(14, 8))
    dn = dendrogram(Z)
    plt.title(f"method={th},metric=euclidean")
    plt.show()

'''
from scipy.cluster.hierarchy import dendrogram, linkage,fcluster
from matplotlib import pyplot as plt
X = [[1,2],[3,2],[4,4],[1,2],[1,3]]
Z = linkage(X, 'ward')
f = fcluster(Z,4,'distance')
fig = plt.figure(figsize=(5, 3))
dn = dendrogram(Z)
plt.show()
'''

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/717660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)

保存