Change Dir

先知cd——热爱生活是一切艺术的开始

统计

留言簿(18)

积分与排名

“牛”们的博客

各个公司技术

我的链接

淘宝技术

阅读排行榜

评论排行榜

weka的java使用(2)——分类

书接上文,既然写了聚类,再把我用到的分类的相关代码奉上。
  1/**
  2 * 
  3 */

  4package edu.tju.ikse.mi.util;
  5
  6import java.io.File;
  7import java.io.IOException;
  8
  9import weka.classifiers.Classifier;
 10import weka.core.Attribute;
 11import weka.core.Instances;
 12import weka.core.converters.ArffLoader;
 13
 14/**
 15 * @author Jia Yu
 16 * @date 2010-6-9
 17 */

 18public class WekaClassifier {
 19
 20    /**
 21     * @param args
 22     */

 23    private ArffLoader loader;
 24    private Instances dataSet;
 25    private File arffFile;
 26    private int sizeOfDataset;
 27    private Classifier classifier;
 28    private int sizeOfAttribute;
 29    private String resultClass;
 30    private double[] distributions;
 31
 32    public WekaClassifier(File file) throws Exception {
 33        this.arffFile = file;
 34        loadTrainSet();
 35        loadClassifier();
 36        buildClassifierModel();
 37    }

 38
 39    private void buildClassifierModel() throws Exception {
 40        this.classifier.buildClassifier(dataSet);
 41    }

 42
 43    private void loadClassifier() {
 44        this.classifier = new weka.classifiers.meta.RandomSubSpace();
 45    }

 46
 47    private void loadTrainSet() throws IOException {
 48        loader = new ArffLoader();
 49        loader.setFile(this.arffFile);
 50        dataSet = loader.getDataSet();
 51        setSizeOfDataset(dataSet.numInstances());
 52        setSizeOfAttribute(dataSet.numAttributes());
 53        dataSet.setClassIndex(this.sizeOfAttribute - 1);
 54    }

 55
 56    public void classifyInstance(weka.core.Instance instance) throws Exception {
 57        double tNum = this.classifier.classifyInstance(instance);
 58        setDistributions(this.classifier.distributionForInstance(instance));
 59        Attribute attr = dataSet.attribute(dataSet.classIndex());
 60        int classIndex = (int) tNum;
 61        setResultClass(attr.value(classIndex));
 62    }

 63    
 64    public static void main(String[] args) {
 65        File file = new File(
 66                "iris.arff");
 67        try {
 68            WekaClassifier wc = new WekaClassifier(file);
 69            double[] feature = 5.1,3.5,1.4,0.2 };
 70            weka.core.Instance ins = new weka.core.Instance(wc
 71                    .getSizeOfAttribute());
 72            ins.setDataset(wc.getDataSet());
 73            for (int i = 0; i < ins.numAttributes() - 1; i++{
 74                ins.setValue(i, feature[i]);
 75                // System.out.println(ins.attribute(i).getLowerNumericBound());
 76            }

 77            ins.setValue(ins.numAttributes() - 1"Iris-setosa");
 78            System.out.println("original class is "
 79                    + ins.stringValue(ins.numAttributes() - 1));
 80            wc.classifyInstance(ins);
 81            System.out.println("classify it to class "
 82                    + wc.getResultClass());
 83        }
 catch (Exception e) {
 84            e.printStackTrace();
 85        }

 86    }

 87
 88    public int getSizeOfAttribute() {
 89        return sizeOfAttribute;
 90    }

 91
 92    public void setSizeOfAttribute(int sizeOfAttribute) {
 93        this.sizeOfAttribute = sizeOfAttribute;
 94    }

 95
 96    public Instances getDataSet() {
 97        return dataSet;
 98    }

 99
100    public void setDataSet(Instances dataSet) {
101        this.dataSet = dataSet;
102    }

103
104    public String getResultClass() {
105        return resultClass;
106    }

107
108    public void setResultClass(String resultClass) {
109        this.resultClass = resultClass;
110    }

111
112    public void setDistributions(double[] distributions) {
113        this.distributions = distributions;
114    }

115
116    public double[] getDistributions() {
117        return distributions;
118    }

119
120    public void setSizeOfDataset(int sizeOfDataset) {
121        this.sizeOfDataset = sizeOfDataset;
122    }

123
124    public int getSizeOfDataset() {
125        return sizeOfDataset;
126    }

127}

128

其中的iris数据集也是数据挖掘领域的标准数据集,这个程序的运行结果如下:
original class is Iris-setosa
classify it to class Iris-setosa
感兴趣的朋友可以和我一起研究~~~邮件联系哦。

posted on 2010-11-04 09:51 changedi 阅读(4027) 评论(2)  编辑  收藏 所属分类: 机器学习

评论

# re: weka的java使用(2)——分类 2011-03-31 20:21 Jesson

你好,我在学习weka中。。。利用java调用j48算法对数据集构建分类模型,这个步骤问题 不大,重点是我应该如何利用模型对未分类的数据集进行分类?谢谢啊~~~~~  回复  更多评论   

# re: weka的java使用(2)——分类 2011-03-31 20:35 changedi

@Jesson
在weka中默认的分类是十折交叉验证即train和test都用你提供的arff文件。你可以选择train和test分开,使用单独的train文件和test文件,在weka的explorer界面的classifier选项卡里有设置的,很容易找到。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: