刺す:
カテゴリカルおよび数値のバイナリデータで機能する類似性の測度を使用して、クラスタリング手法を特定しようとしています。
ガワー距離は、データに連続変数とカテゴリ変数の両方が含まれている場合に役立つ距離メトリックです。
このタイプの問題のために設計されたR kmodesクラスタリングとkprototypeにはテクニックがありますが、私はPythonを使用していて、このタイプの問題にうまく機能するsklearnクラスタリングのテクニックが必要です。
約4〜5か月前に検索したところ、PythonでGower Distanceの実装を見つけることができませんでした。だから私は自分の実装を思いついた。
import pandas as pd
import numpy as np
from sklearn.neighbors import DistanceMetric
def gower_distance(X):
"""
This function expects a pandas dataframe as input
The data frame is to contain the features along the columns. Based on these features a
distance matrix will be returned which will contain the pairwise gower distance between the rows
All variables of object type will be treated as nominal variables and the others will be treated as
numeric variables.
Distance metrics used for:
Nominal variables: Dice distance (https://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient)
Numeric variables: Manhattan distance normalized by the range of the variable (https://en.wikipedia.org/wiki/Taxicab_geometry)
"""
individual_variable_distances = []
for i in range(X.shape[1]):
feature = X.iloc[:,[i]]
if feature.dtypes[0] == np.object:
feature_dist = DistanceMetric.get_metric('dice').pairwise(pd.get_dummies(feature))
else:
feature_dist = DistanceMetric.get_metric('manhattan').pairwise(feature) / np.ptp(feature.values)
individual_variable_distances.append(feature_dist)
return np.array(individual_variable_distances).mean(0)
同じコードへのリンク:https : //github.com/matchado/Misc/blob/master/gower_dist.py
クラスタリング手法に関しては、あなたが言及した手法は使用していません。しかし、私は過去に成功したガワー距離とともにRで階層的クラスタリングを使用しました。
scikit learnで利用可能なクラスタリング手法を検討すると、凝集クラスタリングはその目的に適合しているようです。http://scikit-learn.org/stable/modules/clustering.html#hierarchical-clustering
個人のセグメントのプロファイルを作成したい。つまり、この個人グループは、これらの機能のセットをより重視します。
データの各行にクラスターラベルを割り当てたら、各クラスターについて、特徴の分布(連続変数の要約統計とカテゴリー変数の頻度分布)を調べます。これは、機能の数が管理可能であれば(おそらく20未満ですか?)、視覚的に分析する方が簡単です。
ただし、100以上の機能があるため、より体系的なアプローチをお勧めします。列にクラスターラベル、行に機能の要約統計量を含む行列を作成します(連続変数の中央値と、カテゴリー変数のクラスターで最も頻繁な値の発生率を使用することをお勧めします)
それはこのように見えるかもしれません。
╔═══════════════════════╦═══════════╦═══════════╦════╦═══════════╗
║ Feature ║ Cluster 1 ║ Cluster 2 ║ … ║ Cluster N ║
╠═══════════════════════╬═══════════╬═══════════╬════╬═══════════╣
║ Numeric feature 1 ║ 15 ║ 37 ║ .. ║ 1 ║
║ Numeric feature 2 ║ 34 ║ 56 ║ … ║ 56 ║
║ Categorical feature 1 ║ 47% ║ 87% ║ … ║ 25% ║
║ … ║ … ║ … ║ … ║ … ║
║ Categorical feature N ║ 25% ║ 91% ║ … ║ 11% ║
║ Numeric feature N ║ 0.2 ║ 0.7 ║ … ║ 0.5 ║
╚═══════════════════════╩═══════════╩═══════════╩════╩═══════════╝