我不明白为什么Weka Evaluation类构造函数需要列车实例才能工作。
任何人都可以解释一下吗?
理论上,评估仅取决于训练模型(下一个代码中的 cls )和测试数据( TestingSet )。
谢谢!
这是一个例子:
// TrainingSet is the training Instances
// TestingSet is the testingInstances
// Build de classifier
Classifier cls = (Classifier) new NaiveBayes();
cls.buildClassifier(TrainingSet);
// Test the model
Evaluation eTest = new Evaluation(**TrainingSet**);
eTest.evaluateModel(cls, TestingSet);
答案 0 :(得分:0)
来自UMass Boston Computer Science Documentation on Weka:
<强>评价 public Evaluation(Instances data)抛出java.lang.Exception
初始化评估的所有计数器 的参数:强>
数据 - 训练实例的集合,以获得一些头信息和先前的类分布信息
的抛出:强>
java.lang.Exception - 如果未定义类
您可以查看构造函数源here。
答案 1 :(得分:0)
我对自己的问题有一个可行的解决方案。我正在寻找使用先前训练并保存在文件中的分类器模型来评估测试文件的方法。 评估类对我不起作用,因为它需要构造函数中的训练数据。但它可以用于分类器的 classifyInstance 方法。
下一个代码就是一个例子:
HttpSession#isNew()
答案 2 :(得分:0)
用于映射结果
大多数算法都适用于数字数据。因此,要素的所有non-numeric
值都必须转换为数字形式。 此映射必须是唯一的。这意味着具有特定非数字值的所有值都将映射到相同的数值。
在训练数据时,数据预处理器第一次看到数据。在转换非数字数据时,预处理器使用maps
来记住映射。
对于例如如果要素的所有可能值都是{yes,no,maybe},则可以将这些值映射为:
{"yes":1, "no":2, "maybe":3}
因此,看起来像[yes,yes,no,yes,maybe,yes]
的输入要素/列现在将转换为[1,1,2,1,3,1]
的内部形式。算法使用这些数值
现在,此信息存储在Weka的Instances(已训练)中。因此,当评估者预测某个要素的数值时,需要将此数值转换为其实际值。如果算法吐出值2,则需要地图确定2对应于“否”。为此,算法需要在训练之前创建映射。因此,它要求培训实例。
Note : AFAIK same logic applies in all ML frameworks like weka, dl4j, etc.