K-意味擬似コードを

1、k個のクラスタセンターを初期化します。

最近、どのクラスタに属するの中心点までのクラスタサンプルポイント:2、クラスタに属するすべてのサンプルポイントを更新。

図3に示すように、各クラスタの中心点の再計算(変化なしまたは更新の中心点までのクラスタが最大数に達しました)

#の擬似コードKは-手段
インポートNP AS numpyの
 インポートコピー
 ユークリッド距離算出
DEFのget_distance(X、Y):
     戻り np.sum((XY)** 2)** 0.5
 DEF calc_mean(X-): 算出中心点各次元平均 
    L = LEN(X- [0])
    list_mean = []
     のための I における範囲(L):
        S = 0
         のための J X-:
            S + = J [I] 
        M = S / LEN(X-)
        list_mean.append(M)
    リターンlist_mean 
 
DEFk_means(x_train、K、max_iter):
    num_iter = 0
     初期クラスタ中心 
    cluster_center = [:K] x_train 
    pre_cluster_center = copy.deep_copy(cluster_center) 最後のクラスタ中心点
    反復
    しばらく num_iter < max_iter:
        一時変数 
        clusters_data } = { #の辞書{クラスタ索引:座標} 
        ための I x_train:
            cluster_dists = []
             のためのインデックス、クラスタ内の列挙(cluster_center):
                距離 = get_distance(I、クラスタ)
                cluster_dists.append((インデックス、距離)) 中心間距離に対する各試料の
            
            cluster_dists.sort(キー = ラムダ X:[1] Xの)#の上昇 
            min_index、min_dist cluster_dists [0] = 最も近いフェッチ
            
            IF min_index ません clusters_data:
                clusters_data [min_index] = [] 
            clusters_data [min_index] .append(I) 一時変数にデータを追加
            
        更新されたクラスタの中心点
        のための指標clusters_data:
            cluster_center [インデックス] = calc_mean(clusters_data [インデックス])
        IF pre_cluster_centerは== :cluster_center
             BREAKの   クラスタの中心点が変更されない場合は、最後の
        
            pre_cluster_center = copy.deep_copy(cluster_center)、それはコピー
    を返す cluster_center #は、最終的なクラスタ中心点を返します。

 

おすすめ

転載: www.cnblogs.com/wqbin/p/11031167.html