【问题标题】:Weka K-means distanceWeka K 均值距离
【发布时间】:2015-06-02 17:28:45
【问题描述】:

我使用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();
    }
}

【问题讨论】:

    标签: java weka distance k-means


    【解决方案1】:

    在我的项目中,我比较了这些距离函数,得到了类似的结果。(在我的例子中,我有 40.000 个实例和 10 个特征)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-22
      • 2014-09-30
      • 2017-03-26
      • 2012-06-27
      • 1970-01-01
      • 2016-02-19
      • 2016-03-16
      • 2013-04-30
      相关资源
      最近更新 更多