Scikit-Learn Agglomerative Clustering Connectivity Matrix

マイケル・デビッドソン

sklearnの凝集クラスタリングコマンドを使用して制約付きクラスタリングを実行しようとしています。アルゴリズムを制約するために、「接続性マトリックス」を要求します。これは次のように説明されます。

接続性の制約は、接続性マトリックス(接続する必要のあるデータセットのインデックスを持つ行と列の共通部分にのみ要素を持つscipyスパース行列)を介して課されます。このマトリックスは、事前情報から構築できます。たとえば、あるページから別のページを指すリンクを持つページをマージするだけでWebページをクラスター化することができます。

アルゴリズムが同じクラスター内にとどまることを強制する観測ペアのリストがあります。これをスパースscipy行列(cooまたはのいずれcsr)に変換できますが、結果のクラスターは制約を強制できません。

いくつかのデータ:

import numpy as np
import scipy as sp
import pandas as pd
import scipy.sparse as ss
from sklearn.cluster import AgglomerativeClustering


# unique ids 
ids = np.arange(10)

# Pairs that should belong to the same cluster
mustLink = pd.DataFrame([[1, 2], [1, 3], [4, 6]], columns=['A', 'B'])

# Features for training the model
data = pd.DataFrame([
[.0873,-1.619,-1.343],
[0.697456, 0.410943, 0.804333],
[-1.295829, -0.709441, -0.376771],
[-0.404985, -0.107366, 0.875791],
[-0.404985, -0.107366,  0.875791],
[-0.515996, 0.731980, -1.569586],
[1.024580,  0.409148, 0.149408],
[-0.074604, 1.269414, 0.115744],
[-0.006706, 2.097276, 0.681819],
[-0.432196, 1.249149,-1.159271]])

ペアを「接続性マトリックス」に変換します。

# Blank coo matrix to csr
sm = ss.coo_matrix((len(ids), len(ids)), np.int32).tocsr()
# Insert 1 for connected pairs and diagonals
for i in np.arange(len(mustLink)): # add links to both sides of the matrix
    sm[mustLink.loc[i, 'A'], mustLink.loc[i, 'B']] = 1
    sm[mustLink.loc[i, 'B'], mustLink.loc[i, 'A']] = 1
for i in np.arange(sm.tocsr()[1].shape[1]): # add diagonals
    sm[i,i] = 1
sm = sm.tocoo() # convert back to coo format

凝集クラスタリングモデルをトレーニングして適合させます。

m = AgglomerativeClustering(n_clusters=6, connectivity=sm)
out = m.fit_predict(X=data)

私が受け取る警告:

UserWarning:接続マトリックスの接続されたコンポーネントの数は7> 1です。ツリーを早期に停止しないように完了します。接続性、n_components = _fix_connectivity(X、接続性)

不吉な警告に加えて、私が望んでいたペアは同じクラスターに属しますが、そうではありません。

これは、sklearnアルゴリズムがmustlink制約を処理するように設計されておらず、代わりにdistance行列(ここに描かれている区別しか使用できないためですか?

イヘノン

接続マトリックスをに渡すときsklearn.cluster.AgglomerativeClusteringは、マトリックス内のすべてのポイントを接続する必要があります。凝集クラスタリングは、すべてのポイントが繰り返しグループ化される階層を作成するため、孤立したクラスターは存在できません。接続マトリックスは、ユークリッド空間の近くにあるが、別のメトリックから遠く離れている可能性のあるポイントの接続を「オフ」にするのに役立ちます(ユーザーガイドのゼリーロールの例を参照してください)。

これを考える別の方法は、ポイントが互いに素ではないグラフを形成する必要があるということです。できることは、ノード間のエッジをオフにすることだけです。

この警告:

UserWarning:接続マトリックスの接続されたコンポーネントの数は7> 1です。ツリーを早期に停止しないように完了します。接続性、n_components = _fix_connectivity(X、接続性)

は、許可されている1つよりも多い7つの互いに素なクラスターがあることを示しています。そのようなsklearnはそれを「完了」します(本質的に、ばらばらのクラスターを持たないようにそれを埋めます)。これが、制約がまったく尊重されない理由です。

ここに簡単な修正はありません。クラスタリング後にセンターを再割り当てして制約を尊重するか、別のアルゴリズムを採用する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

scikit-learnでのSpectralClusteringとspectrum_clustering

分類Dev

scikit-learn HashingVectorizer on sparse matrix

分類Dev

How would one use Kernel Density Estimation as a 1D clustering method in scikit learn?

分類Dev

scikit learn documentation in PDF

分類Dev

Scikit-Learn Standard Scaler

分類Dev

repeated FeatureUnion in scikit-learn

分類Dev

scikit-learn StratifiedKFold implementation

分類Dev

scikit-learn:最近傍

分類Dev

Python Agglomerative Clustering:クラスター内の最も近いポイントを見つける

分類Dev

scikit learnのRandomForestClassifierとExtraTreesClassifier

分類Dev

Scikit-learn tutorial documentation location

分類Dev

Scikit learn split train test for series

分類Dev

Data not persistent in scikit-learn transformers

分類Dev

Balanced Random Forest in scikit-learn (python)

分類Dev

Custom tokenizer for scikit-learn vectorizers

分類Dev

「KeyError:0」、xgboost、scikit-learn、pandas

分類Dev

Looping scikit-learn machine learning datasets

分類Dev

Scikit-learn tfidf vectorizer in minibatches?

分類Dev

Target transformation and feature selection in scikit-learn

分類Dev

Installing an old version of scikit-learn

分類Dev

anaconda/spyder scikit learn update 0.21.3 to 0.22.2

分類Dev

API calls from NLTK, Gensim, Scikit Learn

分類Dev

StratifiedKFold vs KFold in scikit-learn

分類Dev

StratifiedKFoldとscikit-learnのKFold

分類Dev

Scikit-Learn Not Properly Updating in IPython

分類Dev

scikit-learn Ridge Regression UnboundLocalError

分類Dev

Predict movie reviews with scikit-learn

分類Dev

SciKit Learn、Keras、またはPytorchの違い

分類Dev

Scikit Learn K-MeansによるBlaze

Related 関連記事

ホットタグ

アーカイブ