以下のデータセットにK-meansアルゴリズムを実装しようとしています.2つの数値属性間の距離を計算するのは簡単ですが、2つの文字列間の距離を計算する方法と、すべての距離を合計する方法(つまり文字列属性間の距離と数値属性間の距離。) 親切にアドバイスしてください。ありがとうございます。
2 に答える
K-means はユークリッド距離用に設計されています。任意の他の距離関数をプラグインすることはできません。これにより、k-means が収束しなくなる可能性があります。
必要な特性は、平均が分散を最小化する必要があるということです。このプロパティを保証できない場合 (文字列の意味は何ですか?)、保証された収束が失われます。
技術的には、k-means はユークリッド距離にも基づいていませんが、分散を最小限に抑えます。これはたまたまユークリッド距離の 2 乗と同じになります。これらの正方形を最小化すると、ユークリッド距離も最小化されます。しかし、アルゴリズムが実際に最小化を目指しているのはVar(Attribute 1, Cluster 1) + Var(Attribute 2, Cluster 1) + ... + Var(Attribute n, Cluster k)
.
平均の代わりに medoid を使用することで、平均を計算する必要がなくなり、私の知る限り、任意の距離に対して収束を保証できる k-medians を調べることもできます。
ただし、通常は距離ベースでもあるさまざまな密度ベースのクラスタリングアルゴリズムを含む、真の距離ベースのアルゴリズムを調べることをお勧めします。
文字列間の距離を計算するには、レーベンシュタイン距離(別名編集距離) を使用できます。
文字列属性と数値属性の間の値を正規化するために、属性をパーセンテージで表すことができます。属性の各タイプの最小値と最大値を見つけてから、特定のデータ インスタンスについて、それぞれの範囲内のパーセンテージを計算します。