データセットがあり、1つの変数のみに基づいてそのデータにクラスターを作成します(欠損値はありません)。その1つの変数に基づいて3つのクラスターを作成します。
使用するクラスタリングアルゴリズム、k-means、EM、DBSCANなど
私の主な質問は、どのような状況でEMよりもk-meansを使用すべきか、k-meansよりもEMを使用すべきかということです。
データセットがあり、1つの変数のみに基づいてそのデータにクラスターを作成します(欠損値はありません)。その1つの変数に基づいて3つのクラスターを作成します。
使用するクラスタリングアルゴリズム、k-means、EM、DBSCANなど
私の主な質問は、どのような状況でEMよりもk-meansを使用すべきか、k-meansよりもEMを使用すべきかということです。
回答:
K-meansアルゴリズムとEMアルゴリズムは、1Dクラスタリングで非常によく似ています。
K-meansでは、平均の位置の推測から始めて、最も近い平均を持つクラスターに各ポイントを割り当てます。次に、現在のポイントの割り当てに基づいて平均(および分散)を再計算し、ポイントの割り当てを更新してから更新しますその手段 ...
EMでは、平均がどこにあるかを推測することから始めて、割り当ての期待値(基本的に各クラスター内にある各ポイントの確率)を計算し、期待値を使用して推定平均(および分散)を更新します重みとして、次に新しい期待値を計算し、次に新しい平均を計算します...
主な違いは、K-meansのクラスターへのポイントの割り当ては、すべてまたはゼロであり、EMはグループメンバーシップの割合/確率を提供することです(1つのポイントは、グループAに存在する確率80%、18%の確率を持つと見なされる場合があります)グループBに属していること、およびグループCにいる確率2%)。グループ間に多くの分離がある場合、2つの方法は非常に類似した結果をもたらします。しかし、かなりの量のオーバーラップがある場合、EMはおそらくより意味のある結果を提供します(分散/標準偏差に関心がある場合はさらに多くなります)。ただし、パラメーターを気にせずにグループメンバーシップを割り当てることだけが必要な場合は、おそらくK-meansの方が簡単です。
両方を行って、答えがどれほど違うのか見てみましょう。それらが類似している場合は、より単純なものを使用し、異なる場合は、グループ化をデータおよび外部の知識と比較することを決定します。
別の簡単な方法は、基本的に1D配列の並べ替えを使用することです。つまり、各ポイントを反復処理し、正方向と負方向の両方で最小距離にある値を取得します。例えば:
data = [1,2,3,4,5,6,7,8,9,10,12]
k = 5
for a in data:
print {'group': sorted(k, key=lambda n: abs(n-a))[0:k], 'point': a}
配る:
{'group': [1, 2, 3, 4, 5], 'point': 1}
{'group': [2, 1, 3, 4, 5], 'point': 2}
{'group': [3, 2, 4, 1, 5], 'point': 3}
{'group': [4, 3, 5, 2, 6], 'point': 4}
{'group': [5, 4, 6, 3, 7], 'point': 5}
{'group': [6, 5, 7, 4, 8], 'point': 6}
{'group': [7, 6, 8, 5, 9], 'point': 7}
{'group': [8, 7, 9, 6, 10], 'point': 8}
{'group': [9, 8, 10, 7, 6], 'point': 9}
{'group': [10, 9, 8, 12, 7], 'point': 10}
{'group': [12, 10, 9, 8, 7], 'point': 12}
どのポイント、特定のポイントに近いアイテムは基本的にそのグループの下にあります。この手法で熟考する唯一のものは変数kです。これはクラスターの固定サイズです:-)。