また、ミーンシフトはKDEの理論を利用して関数の極値を求める方法で、カーネル数を事前に設定しなくてもよいクラスタリングとしてよく利用されていると思います。
しかし、どちらもバンド幅を設定する必要があります。
そのバンド幅をデータから自動調整する方法の一つにPlugin法があります。
Plugin法はデータの確率分布が正規分布に従うことを想定してます。
double variance(double *data,int num){
int i;
double mean=0,sum=0;
for(i=0;i<num;i++){
mean+=data[i];
}
mean/=num;
for(i=0;i<num;i++){
sum+=pow(mean-data[i],2);
}
return sum/num;
}
//プラグイン法によるバンド幅
//data:データ配列
//num:配列の要素数
//戻り値:バンド幅
double calcBandWidth(double *data,int num){
return 1.06*sqrt(variance(data,num))*pow(num,-0.2);
}