2

scikit-learnを使用してシーケンシャルk-meansクラスタリングを実行する方法はありますか?すべてのデータを再調整せずに、新しいデータを追加する適切な方法を見つけることができないようです。

ありがとうございました

4

3 に答える 3

7

scikit-learn のKMeansクラスには、predictいくつかの (新しい) ポイントが与えられると、これらのポイントがどのクラスターに属するかを決定するメソッドがあります。このメソッドを呼び出しても、クラスターの重心は変更されません。

新しいデータの追加によって重心を変更したい場合、つまりオンライン設定でクラスタリングを行いたい場合は、推定MiniBatchKMeans器とそのpartial_fit方法を使用してください。

于 2012-06-17T23:05:11.030 に答える
3

initパラメータ to を使用して、重心の初期値を渡すことができますsklearn.cluster.kmeans。したがって、次のことができます。

centroids, labels, inertia = k_means(data, k)
new_data = np.append(data, extra_pts)
new_centroids, new_labels, new_inertia = k_means(new_data, k, init=centroids)

データポイントを追加するだけで、変更しないと仮定しますk

これは、最適ではない結果が得られることを意味する場合があると思いますが、通常はより高速になるはずです。場合によっては、たとえば 10 個のランダム シードを使用してフィッティングをやり直して、最適なものを選択することもできます。

于 2012-06-17T22:55:22.413 に答える