scikit-learnを使用してシーケンシャルk-meansクラスタリングを実行する方法はありますか?すべてのデータを再調整せずに、新しいデータを追加する適切な方法を見つけることができないようです。
ありがとうございました
scikit-learnを使用してシーケンシャルk-meansクラスタリングを実行する方法はありますか?すべてのデータを再調整せずに、新しいデータを追加する適切な方法を見つけることができないようです。
ありがとうございました
scikit-learn のKMeans
クラスには、predict
いくつかの (新しい) ポイントが与えられると、これらのポイントがどのクラスターに属するかを決定するメソッドがあります。このメソッドを呼び出しても、クラスターの重心は変更されません。
新しいデータの追加によって重心を変更したい場合、つまりオンライン設定でクラスタリングを行いたい場合は、推定MiniBatchKMeans
器とそのpartial_fit
方法を使用してください。
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 個のランダム シードを使用してフィッティングをやり直して、最適なものを選択することもできます。