web-dev-qa-db-ja.com

scikit-learn KMeansによって返される「スコア」を理解する

テキストドキュメントのセット(約100)にクラスタリングを適用しました。 Tfidfを使用してそれらをTfIdfVectorizerベクトルに変換し、scikitlearn.cluster.KMeans(n_clusters=2, init='k-means++', max_iter=100, n_init=10)への入力としてベクトルを提供しました。今私が

_model.fit()
print model.score()
_

ベクトルでは、すべてのテキストドキュメントが非常に類似している場合、非常に小さな値を取得し、ドキュメントが非常に異なる場合、非常に大きな負の値を取得します。

どのドキュメントのセットが似ているかを見つけるという私の基本的な目的を果たしますが、このmodel.score()値が適合を意味するものを正確に理解するのを助けてくれますか?この値を使用して調査結果を正当化するにはどうすればよいですか?

18
Prateek Dewan

ドキュメントには次のように書かれています:

Returns:    
score : float
Opposite of the value of X on the K-means objective.

それが何を意味するのかを理解するには、k-meansアルゴリズムを見る必要があります。 k-meansが本質的に行うことは、データサンプルとそれに関連するクラスター中心間の距離の合計を最小化するクラスター中心を見つけることです。

これは2段階のプロセスで、(a)各データサンプルは最も近いクラスター中心に関連付けられ、(b)クラスター中心はそれらに関連付けられたすべてのサンプルの中心に位置するように調整されます。基準(最後の2つの反復間の最大反復/最小変更)が満たされるまで、これらのステップが繰り返されます。

ご覧のとおり、データサンプルとそれに関連するクラスター中心の間には距離が残っており、最小化のobjectiveはその距離(すべての距離の合計)です。

データサンプルの数がクラスターの数よりはるかに多い場合、データサンプルの種類が多ければ、自然に大きな距離が得られます。クラスターの数はtwoだけです。逆に、すべてのデータサンプルが同じ場合、クラスターの数に関係なく、常にゼロの距離が得られます。

ただし、ドキュメントからは、すべての値が負であると予想されます。負の値と正の値の両方を観察する場合、スコアにはそれ以上のものがあるかもしれません。

しかし、2つのクラスターにクラスター化するというアイデアをどのようにして得たのでしょうか。

10
ypnos

ypnosは正しい、ここで詳細を見つけることができます: https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/cluster/k_means_.py#L89

inertia : float
    Sum of distances of samples to their closest cluster center.
"""
7
Mark Yang

ドキュメントで選択されたWordは少しわかりにくいです。 「K平均目標のXの値の反対。」K平均目標の負を意味します。

K-Means Objective

K平均の目的は、それぞれのクラスター重心からの点の距離の平方和を減らすことです。 J平方誤差関数、Jスコア、またはクラスター内の平方和など、他の名前があります。この値は、クラスターの内部の一貫性を示します。 (少ないほど良い)

目的関数は、次の方法から直接取得できます。

model.inertia_

3