2017-11-10 4 views
0

私はクラスター数が60のクラスター化にk-meansを使用しています60.クラスターの中には意味が少なくなるものもありますので、中央の配列(count = 8)に保存され、clean_cluster_arrayに保存されます。あらかじめ計算されたクラスターセンターを使用してk-meansを再構築する

今回は、k-meansモデルをinit = clean_cluster_centersに再フィットしています。私はできるだけ再フィットしたくないので、n_clusters = 52max_iter = 1です。

基本的な考え方は、clean_cluster_centersで新しいモデルを作り直すことです。ここでの問題は、多数のクラスタを削除していることです。このモデルは、n_iter = 1であっても、より安定したセンターに素早く構成しています。 k-meansモデルを再作成する方法はありますか?

+0

clean_c luster_arrayは、あなたが再びフィットした後のように見え、clusters_centers_はどのように見えますか? –

+0

センターが形状(52,2E5)であるので、私はここでそれを示すことはできません。彼らはあなたの質問に答えるために異なっています。 –

+0

@ValentinCalommeモデルをフィッティングした後、 'clean_cluster_array' を' clusters_centers_'に渡すことをお勧めします。これはセンターを書き直すべきです。しかし、私はこのモデルフィッティングを完全にバイパスしたいと思います。これを試して結果を投稿します。 –

答えて

1

KMeansオブジェクトに適合した場合は、cluster_centers_という属性があります。あなたはきれいなクラスタ中心を持つ新しいオブジェクトをしたい場合は、だから、

cls.cluster_centers_ = new_cluster_centers

をちょうど次のようなものを実行します:あなたは、直接このような何かを行うことによって、それを更新することができ

cls = KMeans().fit(X) 
cls2 = cls.copy() 
cls2.cluster_centers_ = new_cluster_centers 

そして今、予測関数では、オブジェクトにcluster_centers_という名前のヌル以外の属性があることだけがチェックされるため、予測関数を使用できます。

def predict(self, X): 
    """Predict the closest cluster each sample in X belongs to. 

    In the vector quantization literature, `cluster_centers_` is called 
    the code book and each value returned by `predict` is the index of 
    the closest code in the code book. 

    Parameters 
    ---------- 
    X : {array-like, sparse matrix}, shape = [n_samples, n_features] 
     New data to predict. 

    Returns 
    ------- 
    labels : array, shape [n_samples,] 
     Index of the cluster each sample belongs to. 
    """ 
    check_is_fitted(self, 'cluster_centers_') 

    X = self._check_test_data(X) 
    x_squared_norms = row_norms(X, squared=True) 
    return _labels_inertia(X, x_squared_norms, self.cluster_centers_)[0] 
関連する問題