繁体   English   中英

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个要素)。

但是,如果您使用两个以上的功能,则最好创建自己的距离函数(例如汉密尔顿距离。我坚信它会产生更好的结果)。

ManhattanDistance manhattan = new ManhattanDistance();
    try {
        kmeans.setDistanceFunction(manhattan);
    } catch (Exception e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM