我想测量 OpenIMAJ 库中的 KMColourSegmenter 执行聚类所需的时间。
如果我没有使初始质心固定而不是随机,我就无法衡量性能;因为它每次都会改变,给出不同的迭代次数,并且执行聚类的时间也会不同。
那么如何使初始质心固定,即手动设置它们?
更新:
@Jon感谢您的回答,我正在尝试实施您所说的。你能检查一下吗,尤其是“集群”数组,我认为这个数组初始化没有意义。如果我错了,请纠正我。
public class MyFloatKMeansInit extends FloatKMeansInit{
@Override
public void initKMeans(DataSource<float[]> bds, float[][] clusters) throws IOException {
// TODO Auto-generated method stub
for (int i = 0; i < bds.size(); i++) {
for (int j = 0; j < bds.getData(i).length; j++) {
clusters[i][j]=bds.getData(i)[j];
}
}
}
}
public class MyKMColourSegmenter extends KMColourSegmenter{
public MyKMColourSegmenter(FloatArrayBackedDataSource bds, ColourSpace colourSpace, int K) throws IOException {
super(colourSpace, K);
MyFloatKMeansInit myFloatKMeansInit = new MyFloatKMeansInit();
float[][] clusters = new float[K][];//#######I think there is something wrong here
myFloatKMeansInit.initKMeans(bds, clusters);
this.kmeans.setInit(myFloatKMeansInit);
// TODO Auto-generated constructor stub
}
}