当前位置: 首页 > 知识库问答 >
问题:

验证实例与Weka分类器的兼容性

权黎昕
2023-03-14

我需要构建一个Weka分类器,然后使用它来预测未来的实例。这里有一个很好的入门来源。不幸的是,我注意到未来的实例不需要与源训练数据的格式匹配。

如何利用训练数据和新实例之间的这种差异进行预测?

示例火车:

@关系列车

@属性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]);
    }
}

对于如何使用不同的数据源进行预测的任何解释,或者如何强制新实例与分类器原始训练数据的格式相匹配的想法,都是值得赞赏的。然而,我不想依赖评估类。

共有2个答案

裴意
2023-03-14

如果可以的话,您可以测试一个新实例与用于构建分类器的数据集[trainset.check实例(yourInstance)]。这保证了兼容性。如果训练集太大,您可以通过过滤来执行它的子样本。这样,您就可以测试任何新实例是否满足分类器的要求。

杨昆
2023-03-14

我知道这个问题很老了,但我的回答可能会帮助其他人。

方法Instances.equalHeaders(实例)是您要查找的。如果两个实例兼容或false否则,它将返回true

 类似资料:
  • 我最近开始使用weka,我正试图使用朴素贝叶斯将推特分类为正面或负面。所以我有一个训练集,上面有我给的标签,还有一个测试集,上面有所有标签都是“肯定的”。当我运行Naive Bayes时,我得到以下结果: 正确分类实例:69 92%错误分类实例:6 8% 然后,如果我将测试集中推文的标签更改为“否定”并再次运行朴素贝叶斯,结果会颠倒: 分类正确的实例:6.8%分类错误的实例:69.92% 我认为正

  • 我试图在一个有32个属性的数据集上对分类机器学习算法进行数据建模,最后一列是目标类。我将属性数从32改进为6,我觉得这对我的分类模型更有用。 我尝试执行J48和一些增量分类算法。我期望输出结构包括混淆矩阵、更正和分类错误的实例、kappa值。 但是我的结果没有给出任何关于正确和错误分类实例的信息。此外,它也没有预测混淆矩阵和Kappa值。我收到的只是这样: ===总结=== 相关系数0.9482

  • 我今天开始使用Weka。我使用一个包含虚拟信息的. arff文件。然后,我使用weka来获取结果。但是,问题是我不确定weka正在做什么来获取结果。例如,使用Heoffding Tree,我在错误分类的结果上得到了75%和25%的正确分类实例结果;75%到底是什么?weka做了什么来获得75%的正确分类结果?谢谢!

  • 我对机器学习很陌生。对不起,如果我的英语有任何错误。 我使用weka J48分类来预测是真是假。我有将近999K的训练套件,我用来训练模型。我使用了3倍的交叉验证方法来训练模型,使我的准确率达到了约84%。 现在在存储模型之后。我试着在50k数据集上测试它。结果非常糟糕,其中50%是不匹配的。我有11个属性,包括名词和数字字段。 我不知道为什么会这样。 我有两个问题。 我怎样训练才能在测试集中表现

  • 我有一个使用JDK1.7编译的jar文件,我想在加载时检查一下我的jar运行的java运行时环境是否是1.7或更新的。有办法做到这一点吗? 我尝试使用System.getProperty(“java.version”),但这没有帮助,因为我的类版本是51,而JRE1.6拒绝加载它。

  • 本文向大家介绍js与jQuery实现的兼容多浏览器Ajax请求实例,包括了js与jQuery实现的兼容多浏览器Ajax请求实例的使用技巧和注意事项,需要的朋友参考一下 ajax我们经常会用到的,但网上找到的大部份ajax兼容性都不强,下面自己改了一个不错的兼容性很强的ajax函数,同时后面介绍的jquery ajax 兼容性也很强。 一、纯js实现的Ajax实例: 二、jQuery $.ajax概