重みベクトル\({\boldsymbol w}_k\)の更新の実装例:クラスタの重心\({\boldsymbol \mu}_k\)を計算し,これを重みベクトル\({\boldsymbol w}_k\)とする
common.cpp
内updateWeight
より.重みベクトル\({\boldsymbol w}\)はweight
と表記
//-- クラスタの重心として重みベクトルを更新 --
for( int k = 0 ; k < numc ; k++ ) // nvecは入力ベクトル数
for( int m = 0 ; m < ndim ; m++ ) weight[k][m] = 0; //ベクトル初期化
std::vector<double> n(numc,0); // n[k]はクラスタkの要素数を格納
for( int i = 0 ; i < nvec ; i++ ){
int label = lbls[i]; // i番目のベクトルのクラスタラベル
n[label]++; // ↓所属する入力ベクトルの和算出
for(int m = 0 ; m < ndim ; m++) weight[label][m] +=vecs[i][m];
}
for( int k = 0 ; k < numc ; k++ )//要素数で割り(平均化)重みベクトル算出
if( n[k] != 0 )
for( int m = 0 ; m < ndim ; m++ ) weight[k][m] *= 1.0/n[k];