조롱박 상관계수를 사용하는 분층 집합 중의 가장 좋은 거리와 방법을 고려하다.

12170 단어 Python클러스터

개시하다


층을 나누어 분류할 때 어느 거리와 방법을 사용하는 것이 좋은지 헷갈릴 수 있다.특히 정답을 준비하지 않은 집단 중에서는
이번에는 거리와 방법에 따라 파라핀 상관수를 계산해 집합의 타당성을 조사했다.이 값은 1에 가까울수록 좋다.(상세 정보여기.

데이터 준비


이번에는 아이리스의 데이터 집합을 사용했다.
# irisのデータセットを得る。
from sklearn import datasets
dataset = datasets.load_iris()
dataset_data = dataset.data
dataset_target = dataset.target
target_names = dataset.target_names
dataset_labels = target_names[dataset_target]

# データの標準化を行う。
from sklearn.preprocessing import scale
data = scale(dataset_data)

파라핀 상관수를 계산하다


우선 분류에서 사용할 수 있는 거리와 방법을 보여 줍니다.데이터 형식에 맞는 몇 가지 물건을 준비하다.
METORICS = ['euclidean', 'minkowski', 'cityblock', 'seuclidean',
            'sqeuclidean', 'cosine', 'correlation', 'hamming',
            'jaccard', 'chebyshev', 'canberra', 'braycurtis',
            'mahalanobis']

METHODS = ['single', 'complete', 'average', 'weighted', 
           'centroid', 'median', 'ward']

# minkowski距離に使うノルム。デフォルトだと2で、ユークリッド距離となるので、とりあえず3。
P_NORM = 3
고핀 상관계수를 계산할 때scipycophenet를 사용했다.(상세 정보여기.
# 距離と方法を変えてコーフェン相関係数(CPCC)を計算する。
import itertools
from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import linkage, cophenet

result = []  
for metric, method in itertools.product(METORICS, METHODS):
    distance_matrix = pdist(X=data, metric=metric, p=P_NORM)
    linkage_matrix = linkage(y=distance_matrix, method=method)
    cpcc, _ = cophenet(linkage_matrix, distance_matrix)
    result.append([metric, method, cpcc])
데이터를 처리하기 위해 pandasDataframe에 계산 결과를 입력합니다.철검과 관련된 최대 거리와 방법을 얻었다.
import pandas as pd
cpcc_df = pd.DataFrame(result, columns=['metric', 'method', 'CPCC'])

# コーフェン相関係数が最大である距離と方法を得る
best_metoric = cpcc_df.loc[cpcc_df['CPCC'].idxmax(), 'metric']
best_method = cpcc_df.loc[cpcc_df['CPCC'].idxmax(), 'method']

print ("距離:{0}, 方法:{1} でコーフェン相関係数が最大。".format(best_metoric,best_method))
실행 결과는 다음과 같습니다.
距離:correlation, 方法:average でコーフェン相関係数が最大。
이것만으로는 잘 몰라서 seabornheatmap를 사용해 전체적으로 봤습니다.
# DataFrameを整形。
cpcc_df = cpcc_df.set_index(keys=['metric', 'method']).unstack()
cpcc_df.columns = cpcc_df.columns.droplevel()


# heatmapで表示。
import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize=(8.5, 8))
ax = sns.heatmap(data=cpcc_df, annot=True)
fig.show()
heatmap를 보면 방법보다 거리가 하키 상관수에 영향을 미치기 쉽다.이런 경향은 모인 데이터에 따라 달라질 수 있다.

단델크의 작도


계산 결과에서 얻은 가장 좋은 거리와 방법으로 단드도를 그리면 완성된다.
# コーフェン相関係数が最大である距離と方法でデンドログラムを描く。
from scipy.cluster.hierarchy import linkage, dendrogram

best_linkage = linkage(y=data, metric=best_metoric, method=best_method)

fig, ax = plt.subplots(figsize=(5,13))
ax = dendrogram(Z=best_linkage,
                orientation='right',
                labels=dataset_labels)
fig.show()

최후


이번에 계산된 페놀과 관련된 수량은 이것만으로 완벽한 집합이 아니라 하나의 지표일 뿐이다.나는 여러 가지 지표를 사용한 집단을 목표로 공부하고 싶다.끝까지 함께 해주셔서 감사합니다.

좋은 웹페이지 즐겨찾기