2016-06-22 8 views
0

私はwekaプログラミングにかなり新しいです。 私は単純なbayesクラシファイアをコード化しました。 はここのコードです:Wekaクラシファイアは動作しません

public static void main(String[] args) throws Exception { 
    Attribute Attribute1 = new Attribute("firstNumeric"); 
    Attribute Attribute2 = new Attribute("secondNumeric"); 

    // Declare a nominal attribute along with its values 
    ArrayList<String> fvNominalVal = new ArrayList(3); 
    fvNominalVal.add("blue"); 
    fvNominalVal.add("gray"); 
    fvNominalVal.add("black"); 
    Attribute Attribute3 = new Attribute("aNominal", fvNominalVal); 

    // Declare the class attribute along with its values 
    ArrayList<String> fvClassVal = new ArrayList(2); 
    fvClassVal.add("positive"); 
    fvClassVal.add("negative"); 
    Attribute ClassAttribute = new Attribute("theClass", fvClassVal); 

    // Declare the feature vector 
    ArrayList<Attribute> fvWekaAttributes = new ArrayList(4); 
    fvWekaAttributes.add(Attribute1); 
    fvWekaAttributes.add(Attribute2); 
    fvWekaAttributes.add(Attribute3); 
    fvWekaAttributes.add(ClassAttribute); 

    // Create an empty training set 
    Instances isTrainingSet = new Instances("Rel", fvWekaAttributes, 10); 
    // Set class index 
    isTrainingSet.setClassIndex(3); 

    // Create the instance 
    Instance ex1 = new DenseInstance(4); 
    ex1.setValue((Attribute) fvWekaAttributes.get(0), 1.0); 
    ex1.setValue((Attribute) fvWekaAttributes.get(1), 5.5); 
    ex1.setValue((Attribute) fvWekaAttributes.get(2), "gray"); 
    ex1.setValue((Attribute) fvWekaAttributes.get(3), "positive"); 

    Instance ex2 = new DenseInstance(4); 
    ex1.setValue((Attribute) fvWekaAttributes.get(0), 1.0); 
    ex1.setValue((Attribute) fvWekaAttributes.get(1), 5.5); 
    ex1.setValue((Attribute) fvWekaAttributes.get(2), "blue"); 
    ex1.setValue((Attribute) fvWekaAttributes.get(3), "negative"); 

    // add the instance 
    isTrainingSet.add(ex1); 
    isTrainingSet.add(ex2); 

    // Create a naïve bayes classifier 
    Classifier cModel = (Classifier) new NaiveBayes(); 
    cModel.buildClassifier(isTrainingSet); 

    Instance testData = new DenseInstance(4); 
    testData.setValue((Attribute) fvWekaAttributes.get(0), 1.0); 
    testData.setValue((Attribute) fvWekaAttributes.get(1), 5.5); 
    testData.setValue((Attribute) fvWekaAttributes.get(2), "gray"); 

    Instances testDataSet = new Instances("Rel", fvWekaAttributes, 1); 
    testDataSet.setClassIndex(3); 
    testDataSet.add(testData); 

    double[] a = cModel.distributionForInstance(testDataSet.firstInstance()); 
    for(int i=0;i<a.length;i++){ 
     System.out.println(a[i]); 
    } 
} 

が、結果doesntのは真実であると思われます。 は、ここに結果である:

testData.setValue((Attribute) fvWekaAttributes.get(0), 1.0); 
testData.setValue((Attribute) fvWekaAttributes.get(1), 5.5); 
testData.setValue((Attribute) fvWekaAttributes.get(2), "blue"); 

結果はほぼこれである:私はこれにTESTDATAを変更した場合でも1.0

6.702810252023562E-151は

。以下のように:

3.351405126011781E-151

1.0

高度に感謝します。

答えて

1

私の意見では、問題はあなたが訓練セットに2つのinstanecesしか持たず、naiv baiesクラシファイアはそれから貴重なモデルを学ぶことができないということです。なぜあなたは結論を得たのですか? 列車のインスタンスを100以上作成するか、MLメソッドを適用する方法を学習するためのサンプルデータセットがあります。

関連する問題