Weka K-均值距离
Weka K-means distance
我使用 weka
库来使用 SimpleKMeans
函数。
我的 arff
文件是:
@relation digits
@attribute number numeric
@data
3.708699941635132
3.608700037002563
3.508699893951416
3.808700084686279
3.708699941635132
3.708699941635132
3.708699941635132
3.708699941635132
3.708699941635132
3.408699989318847
3.708699941635132
它是质心,我还有包含所有质心距离的距离矩阵(有特殊计算的距离,不是简单的欧几里得距离)。如何在代码中传输距离矩阵?现在我训练这段代码:
package kmeanstest;
import java.io.BufferedReader;
import java.io.FileReader;
import weka.clusterers.SimpleKMeans;
import weka.core.Instances;
public class Kmeanstest {
public Kmeanstest() throws Exception {
BufferedReader breader = new BufferedReader(new FileReader("data.arff"));
Instances Train = new Instances(breader);
SimpleKMeans kMeans = new SimpleKMeans();
kMeans.setSeed(10);
kMeans.setPreserveInstancesOrder(true);
kMeans.setNumClusters(3);
kMeans.buildClusterer(Train);
int[] assignments = kMeans.getAssignments();
int i = 0;
for (int clusterNum : assignments) {
System.out.println("Instance " + i + " -> Cluster " + clusterNum);
i++;
}
breader.close();
}
public static void main(String[] args) throws Exception {
Kmeanstest kmeanstest = new Kmeanstest();
}
}
在我的项目中,我比较了这些距离函数得到了类似的结果。(在我的例子中,我有 40.000 个实例和 10 个特征)。
但是,如果您使用 2 个以上的特征,最好创建自己的距离函数(例如,汉密尔顿距离。我坚信它会有更好的结果)。
ManhattanDistance manhattan = new ManhattanDistance();
try {
kmeans.setDistanceFunction(manhattan);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
我使用 weka
库来使用 SimpleKMeans
函数。
我的 arff
文件是:
@relation digits
@attribute number numeric
@data
3.708699941635132
3.608700037002563
3.508699893951416
3.808700084686279
3.708699941635132
3.708699941635132
3.708699941635132
3.708699941635132
3.708699941635132
3.408699989318847
3.708699941635132
它是质心,我还有包含所有质心距离的距离矩阵(有特殊计算的距离,不是简单的欧几里得距离)。如何在代码中传输距离矩阵?现在我训练这段代码:
package kmeanstest;
import java.io.BufferedReader;
import java.io.FileReader;
import weka.clusterers.SimpleKMeans;
import weka.core.Instances;
public class Kmeanstest {
public Kmeanstest() throws Exception {
BufferedReader breader = new BufferedReader(new FileReader("data.arff"));
Instances Train = new Instances(breader);
SimpleKMeans kMeans = new SimpleKMeans();
kMeans.setSeed(10);
kMeans.setPreserveInstancesOrder(true);
kMeans.setNumClusters(3);
kMeans.buildClusterer(Train);
int[] assignments = kMeans.getAssignments();
int i = 0;
for (int clusterNum : assignments) {
System.out.println("Instance " + i + " -> Cluster " + clusterNum);
i++;
}
breader.close();
}
public static void main(String[] args) throws Exception {
Kmeanstest kmeanstest = new Kmeanstest();
}
}
在我的项目中,我比较了这些距离函数得到了类似的结果。(在我的例子中,我有 40.000 个实例和 10 个特征)。
但是,如果您使用 2 个以上的特征,最好创建自己的距离函数(例如,汉密尔顿距离。我坚信它会有更好的结果)。
ManhattanDistance manhattan = new ManhattanDistance();
try {
kmeans.setDistanceFunction(manhattan);
} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}