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 #は、最終的なクラスタ中心点を返します。