web-dev-qa-db-ja.com

kmeansscikitlearnでクラスターラベルを識別する方法

私は学習していますpython scikit。ここに示す例では、クラスター名ではなく、各クラスターで上位に出現する単語を表示しています。

http://scikit-learn.org/stable/auto_examples/document_clustering.html

Kmオブジェクトには、数値である重心IDをリストする「km.label」があることがわかりました。

2つの質問があります

1. How do I generate the cluster labels?
2. How to identify the members of the clusters for further processing.

私はk-meansの実用的な知識を持ち、tf-idsの概念を知っています。

7
vij555
  1. クラスターラベルを生成するにはどうすればよいですか?

これが何を意味するのかわかりません。クラスター1、クラスター2、...、クラスターn以外のクラスターラベルはありません。ラベルがないため、教師なし学習と呼ばれるのはそのためです。

実際にラベルがあり、クラスタリングアルゴリズムがたまたまラベルに従ってデータをクラスタリングしたかどうかを確認したいということですか?

その場合、リンクしたドキュメントに例が示されています。

print("Homogeneity: %0.3f" % metrics.homogeneity_score(labels, km.labels_))
print("Completeness: %0.3f" % metrics.completeness_score(labels, km.labels_))
print("V-measure: %0.3f" % metrics.v_measure_score(labels, km.labels_))
  1. さらに処理するためにクラスターのメンバーを識別する方法。

KMeansのドキュメント を参照してください。特に、predictメソッド:

予測(X)

パラメータ:X:{配列のような、スパース行列}、形状= [n_samples、n_features]予測する新しいデータ。

戻り値:
labels:array、shape [n_samples、]各サンプルが属するクラスターのインデックス。

何か新しいことを予測したくない場合は、km.labels_トレーニングデータに対してそれを行う必要があります。

5
IVlad

ああ、それは簡単です

私の環境:scikit-learnバージョン「0.20.0」

ドキュメントのように属性.labels_を使用するだけです: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

from sklearn.cluster import KMeans
import numpy as np

実例:

x1 = [[1],[1],[2],[2],[2],[3],[3],[7],[7],[7]]
x2 = [[1],[1],[2],[2],[2],[3],[3],[7],[7],[7]]

X_2D = np.concatenate((x1,x2),axis=1)

kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init=10, random_state=0)
labels = kmeans.fit(X_2D)

print(labels.labels_)

出力:

[2 2 3 3 3 0 0 1 1 1]

ご覧のとおり、4つのクラスターがあり、X_2D配列の各データ例にはそれに応じてラベルが割り当てられています。

0
ArmandduPlessis