我需要构建一个韦卡分类器,然后使用它来预测未来的实例。这里。是一个很好的入门源,不幸的是,我注意到未来的实例不需要匹配源培训数据的格式。
如何预测训练数据和新实例之间的差异?
火车示例:
@relation @属性A1 {e,f,g} @属性A2数值 @属性A3数值 @属性A4 {正,负}@数据 e,-100,100,正 f,-10,10,正 g,-90,90,阴性
示例测试:
@关系检验 @属性B1 {b,a} @属性B2数值 @属性B3 {好的,坏的}@数据 b,100,很好 a,10,不好 b,90,很好
如果保存上述培训和测试数据集,则可以使用以下代码来确保构建在培训数据上的模型能够从测试数据中对实例进行分类。
import java.io.BufferedReader;
import java.io.FileReader;
import weka.classifiers.Classifier;
import weka.classifiers.bayes.NaiveBayes;
import weka.core.Instances;
public class Main {
public static void main(String[] args) throws Exception {
//
// Load train data
//
String readTrain = "someWhere/train.arff";
BufferedReader readerTrain = new BufferedReader(new FileReader(readTrain));
Instances train = new Instances(readerTrain);
readerTrain.close();
train.setClassIndex(train.numAttributes() - 1);
//
// Load test data
//
String readTest = "someWhere/test.arff";
BufferedReader readerTest = new BufferedReader(new FileReader(readTest));
Instances test = new Instances(readerTest);
readerTest.close();
test.setClassIndex(test.numAttributes() - 1);
// Create a naïve bayes classifier
Classifier cModel = (Classifier)new NaiveBayes();
cModel.buildClassifier(train);
// Predict distribution of instance
double[] fDistribution = cModel.distributionForInstance(test.instance(2));
System.out.println("Prediction class 1: " + fDistribution[0]);
System.out.println("Prediction class 2: " + fDistribution[1]);
}
}对于如何使用不同的数据源进行预测的任何解释,或者使新实例与分类器原始培训数据的格式相匹配的想法,都是值得赞赏的。但是,我不想依赖于评价课。
发布于 2016-10-18 21:55:09
我知道这个问题很老,但我的回答可能会对其他人有所帮助。
Instances.equalHeaders(Instances)方法是您要寻找的方法。如果true与Instances兼容,或者false不兼容,则返回false。
发布于 2016-01-06 21:18:55
您可以测试一个新的实例与用于构建分类器的数据集(如果是trainset.checkInstance(yourInstance) )。这就保证了兼容性。如果训练集太大,您可以通过过滤来执行它的子示例。这样,您就可以测试任何新实例是否符合分类器的要求。
https://stackoverflow.com/questions/34613691
复制相似问题