Change Dir

          先知cd——熱愛生活是一切藝術的開始

          統(tǒng)計

          留言簿(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數(shù)據(jù)集也是數(shù)據(jù)挖掘領域的標準數(shù)據(jù)集,這個程序的運行結果如下:
          original class is Iris-setosa
          classify it to class Iris-setosa
          感興趣的朋友可以和我一起研究~~~郵件聯(lián)系哦。

          posted on 2010-11-04 09:51 changedi 閱讀(4064) 評論(2)  編輯  收藏 所屬分類: 機器學習

          評論

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

          你好,我在學習weka中。。。利用java調用j48算法對數(shù)據(jù)集構建分類模型,這個步驟問題 不大,重點是我應該如何利用模型對未分類的數(shù)據(jù)集進行分類?謝謝啊~~~~~  回復  更多評論   

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

          @Jesson
          在weka中默認的分類是十折交叉驗證即train和test都用你提供的arff文件。你可以選擇train和test分開,使用單獨的train文件和test文件,在weka的explorer界面的classifier選項卡里有設置的,很容易找到。  回復  更多評論   

          主站蜘蛛池模板: 平昌县| 浮梁县| 石渠县| 东至县| 象山县| 盘山县| 北碚区| 通山县| 手游| 文昌市| 宁都县| 长汀县| 葫芦岛市| 栖霞市| 巫溪县| 乐昌市| 武宣县| 兴山县| 东山县| 阜新市| 瓮安县| 阿拉善左旗| 新宁县| 西吉县| 永兴县| 建水县| 无为县| 聂拉木县| 大兴区| 林西县| 名山县| 若羌县| 秦安县| 榆社县| 锦州市| 寿阳县| 桓仁| 五寨县| 砚山县| 昭平县| 商水县|