私は学習しています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の概念を知っています。
- クラスターラベルを生成するにはどうすればよいですか?
これが何を意味するのかわかりません。クラスター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_))
- さらに処理するためにクラスターのメンバーを識別する方法。
KMeansのドキュメント を参照してください。特に、predict
メソッド:
予測(X)
パラメータ:X:{配列のような、スパース行列}、形状= [n_samples、n_features]予測する新しいデータ。
戻り値:
labels:array、shape [n_samples、]各サンプルが属するクラスターのインデックス。
何か新しいことを予測したくない場合は、km.labels_
トレーニングデータに対してそれを行う必要があります。
ああ、それは簡単です
私の環境: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配列の各データ例にはそれに応じてラベルが割り当てられています。