2012-01-19 20 views
0

Naive Bayesを使用してモデルを訓練し、それを単一のレコードに適用する方法があるのだろうかと思っていました。私はwekaに新しいので、これが可能かどうかわかりません。また、クラシファイアの出力をファイルに保存する方法はありますか?NaiveBayesを使用してWekaのインスタンスを1つに分類する

答えて

2

Naive Bayesは分類挑戦に使用できる単純な確率論的Bayes定理に基づいたモデルなので、答えは肯定です。

Naive Bayesと他の分類子を使用して分類するには、サンプルデータセットでモデルを訓練し、訓練を受けたらモデルを任意のレコードに適用する必要があります。

もちろんこのアプローチを使用するとエラー確率が発生しますが、それは主にサンプルの品質とデータセットのプロパティに依存します。

私はWekaを直接使用していませんが、Rapid Minerの拡張機能として使用していますが、原則を適用する必要があります。モデルが訓練されたら、モデルパラメータを表示/印刷できるはずです。

+0

こんにちは私は分類のこのタイプが必要です。今私は分類を構築しています。しかし、私はどのように単一のレコードを解析し、クラス値の確率を得るか分からない。 – Sajithv

0

私は現在javaを使用している間、同じ回答を探しています。

私は訓練の日付を含むarffファイルを作成し、http://weka.wikispaces.com/file/view/WekaDemo.javaを例として使用して、クラスファイヤーを訓練し、評価しました。

Javaでモデルを保存してロードする方法と、さらに重要なことに、単一のレコードに対してテストする方法がまだ分かっています。

WekaDemo.java

... 
public void execute() throws Exception { 
    // run filter 
    m_Filter.setInputFormat(m_Training); 
    Instances filtered = Filter.useFilter(m_Training, m_Filter); 

    // train classifier on complete file for tree 
    m_Classifier.buildClassifier(filtered); 

    // 10fold CV with seed=1 
    m_Evaluation = new Evaluation(filtered); 
    m_Evaluation.crossValidateModel(
     m_Classifier, filtered, 10, m_Training.getRandomNumberGenerator(1)); 
    //TODO Save model 
    //TODO Load model 
    //TODO Test against a single information 
    } 
    ... 

編集1:

保存してモデルをロードするには、ここで説明されている:http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Classification-Classifying%20instancesHow to test existing model with new instance in weka, using java code?

0

どのように分類するためのクイックがあります単一インスタンス。

//load model (saved from user interface) 
Classifier tree = (Classifier) weka.core.SerializationHelper.read("/some/where/j48.model"); 

// load unlabeled data 
Instances unlabeled = new Instances(new BufferedReader(new FileReader("/some/where/unlabeled.arff"))); 

// set class attribute 
unlabeled.setClassIndex(unlabeled.numAttributes() - 1); 
// create copy 
Instances labeled = new Instances(unlabeled); 

// label instances 
for (int i = 0; i < unlabeled.numInstances(); i++) { 
    double clsLabel = tree.classifyInstance(unlabeled.instance(i)); 
    labeled.instance(i).setClassValue(clsLabel); 
    System.out.println(clsLabel + " -> " + unlabeled.classAttribute().value((int) clsLabel)); 
    double[] dist =tree.distributionForInstance(unlabeled.instance(i)) 
    for(int j=0; j<dist.length;j++){ 
    System.print(unlabeled.classAttribute().value(j)+": " +dist[j]); 
    } 
} 

編集この方法は、訓練評価し、モデルを保存しません。これは私が通常weka guiを使用して行うことです。 (http://weka.wikispaces.com/Serialization) このメソッドは、名目クラスを持つ例ではツリー型モデルを使用しますが、Naive Bayesの例に簡単に変換する必要があります。

関連する問題