web-dev-qa-db-ja.com

k-meansクラスタリングは分類を行うことができますか?

K-meansクラスタリングアルゴリズムで分類できるかどうか知りたいですか?

単純なk-meansクラスタリングを実行した場合。

多くのデータがあると仮定し、k-meansクラスタリングを使用して、2つのクラスターA、Bを取得します。重心の計算方法は、ユークリッド距離です。

左側のクラスターA。

右側のクラスターB。

したがって、新しいデータが1つある場合。私は何をすべきか?

  1. K-meansクラスタリングアルゴリズムを再度実行すると、新しいデータがどのクラスターに属しているかを取得できますか?

  2. 最後の重心を記録し、ユークリッド距離を使用して計算し、新しいデータが属するかどうかを判断しますか?

  3. 他の方法?

14
Sirius Wang

もちろん、最も簡単な方法は2です。各オブジェクトを最も近い重心に割り当てます(技術的には、ユークリッド距離ではなく二乗和を使用します。これはk-meansに対してより正確であり、sqrt計算を節約します)。

方法1.k-meansは完全に異なる解を与える可能性があるため、脆弱です。特に、そもそもデータにうまく適合しなかった場合(たとえば、次元が高すぎる、サイズが異なるクラスター、クラスターが多すぎるなど)

ただし、次の方法がさらに合理的である可能性があります。

。実際の分類器をトレーニングします。

はい、k-meansを使用して初期パーティションを作成し、k-meansパーティションが妥当なクラスであると想定できます(本当にはこれを検証する必要があります)ただし、ある時点で)、データにユーザーラベルが付けられている場合と同じように続行します。

つまりk-meansを実行し、結果のクラスターでSVMをトレーニングします。次に、分類にSVMを使用します。

k-NN分類、または各オブジェクトを最も近いクラスター中心に割り当てること(オプション1)は、非常に単純な分類子と見なすことができます。後者は1NN分類器であり、クラスター重心のみで「トレーニング」されています。

はい、分類できます。

アルゴリズム自体(#1のような)は、トレーニングデータに分類されるデータを組み込むため、ポイントの分類に特に適しているとは言えません。嫌われる傾向があります(リアルタイムシステムを使用している場合を除きますが、これについて詳しく説明すると、ポイントから少し離れると思います)。

新しい点を分類するには、各クラスターの重心までのユークリッド距離を計算して最も近い点を決定し、そのクラスターの下に分類します。

最も近い重心をより効率的に決定できるデータ構造があります( kd-tree など)が、上記が基本的な考え方です。

5
Dukeling

2つのクラスターを取得するためにデータでk-meansクラスタリングを既に実行している場合は、新しいデータポイントで k最近傍 を使用して、データが属するクラスを見つけることができます。

2
Bill the Lizard

ここに別の方法があります:

「統計学習の要素」で見ました。表記を少し変更します。 Cをクラスの数、Kをクラスターの数とします。次に、次の手順に従います。

  1. クラスごとにKクラスターを使用して、各クラスのトレーニングデータにK-meansクラスタリングを個別に適用します。
  2. 各C * Kクラスターにクラスラベルを割り当てます。
  3. 観測値xを最も近いクラスターのクラスに分類します。

クラスターを使用してデータの観測値を減らす、分類のための優れたアプローチのようです。

0
Ayar Paco

クラスタリングと分類の概念を混乱させています。データにラベルを付けたら、ラベルに従ってデータがどのようにクラスター化されるかをすでに知っているので、機能がクラスをどれだけうまく識別できるかを知りたい場合を除いて、データをクラスター化しても意味がありません。

K-meansアルゴリズムを実行して各クラスの重心を見つけ、重心からの距離を使用して新しいデータポイントを分類する場合、実際には、同じ複数の同一性を想定した線形判別分析アルゴリズムの形式を実装します。すべてのクラスの共分散行列。

0
Reza