24、python階層クラスタリングケース(scipy方法)


目次
1、階層クラスタリングアルゴリズム
2、方法
3、分析手順
4、ケース
1、階層クラスタリングアルゴリズム
階層クラスタリングアルゴリズムはツリークラスタリングアルゴリズムとも呼ばれ、データ間の距離に基づいて階層アーキテクチャ方式を通じてデータを繰り返し集約し、与えられたデータセットを分解する階層を作成します.
2、方法
01クラスタリング方法
linkage=scipy.cluster.hierarchy.linkage(data,method='single')
dataトレーニングサンプル
methodクラス距離の計算式:
1、single l両クラス間の最短距離の点の距離
2、complete 2つのクラス間の最長距離の点の距離
3、centroid 2つのすべての点の中点の距離
02階層クラスタリング図面
 scipy.cluster.hierarchy.dendrogram(linkage)linkage階層クラスタリングの結果
03階層クラスタリングの分類方法
 scipy.cluster.hierarchy.fcluster(linkage,n,criterion='maxclust')linkage階層クラスタリングの結果nクラスタリングする個数criterion分割方法maxclust,最大分割法
3、分析手順
01各2点距離の2乗計算式、すなわち2点距離の2乗を計算する.
02彼らの間の最近の距離を見つけて合併する
2点の平均値を新しい値として分類
03新しく生成されたこのクラスと各古いクラスとの類似度を再計算する
04胡2と3の手順を繰り返す
4、ケース

import pandas as pd
import matplotlib.pyplot as plt


data=pd.read_csv('D:\\DATA\\pycase\\7.1\\data.csv')

#        data.columns

fColumns=[ '          ', '          ', '      ', '      ', '     ',
       '        ']


#         ,        

import scipy.cluster.hierarchy as hcluster

linkage=hcluster.linkage(
        data[fColumns],
        method='centroid')

#          

hcluster.dendrogram(linkage)

#             ,    12   

hcluster.dendrogram(
        linkage,
        truncate_mode='lastp',
        p=12,
        leaf_font_size=12.
        )

#       

pTarget=hcluster.fcluster(
        linkage,3,
        criterion='maxclust')

#           

pd.crosstab(pTarget,pTarget)

#   PCA       

from sklearn.decomposition import PCA

pca_2=PCA(n_components=2)

data_pca=pca_2.fit_transform(data[fColumns])

#       
data_pca_2=pd.DataFrame(data_pca)

#   

plt.scatter(
        data_pca_2[0],
        data_pca_2[1],
        c=pTarget)

#               

# 3        

dMean=pd.DataFrame(columns=fColumns+['  '])
data_gb=data[fColumns].groupby(pTarget)

i=0;
for g in data_gb.groups:
    rMean=data_gb.get_group(g).mean()
    rMean['  ']=g
    dMean=dMean.append(rMean,ignore_index=True)
    subData=data_gb.get_group(g)
    for column in fColumns:
        i=i+1
        p=plt.subplot(3,5,i)
        p.set_title(column)
        p.set_ylabel(str(g)+"  ")
        plt.hist(subData[column],bins=20)
    

#       data.columns

pTarget=pTarget-1 #      0    


r=data[['          ', '          ', '      ', '      ']]

r.index=data.    

r['    ']=pTarget

plt.rcParams['font.sans-serif']=['SimHei'] #          
plt.rcParams['axes.unicode_minus']=False #        
#        ,  u'  '

style=['ro-','go-','bo-']

fColumns2=[ '          ', '          ', '      ', '      ']

xlabels=fColumns2

# # %matplotlib qt   

k=3

for i in range(k): #    、      
    
    plt.figure()
    
    tmp=r[r[u'    ']==i].iloc[:,:4] #      
    
    for j in range(len(tmp)):
        
        plt.plot(range(1,5),tmp.iloc[j],style[i])
        
    plt.xticks(range(1,5),xlabels,rotation=20) #    
    plt.subplots_adjust(bottom=0.15) #     
    
    plt.savefig(u'%s%s,png'%('D:\\DATA\\pycase\\7.1\\scipy',i)) #