gpt4 book ai didi

java - WEKA - 对来自 Java 的新数据进行分类 - IDF 转换

转载 作者:行者123 更新时间:2023-11-30 11:51:48 25 4
gpt4 key购买 nike

我们正在尝试从 Java 程序内部实现 WEKA 分类器。到目前为止一切顺利,但是当在 Weka GUI 中从训练集构建分类器时,我们使用 StringToWordVector IDF 转换来帮助提高分类准确性。

在将实例传递给分类器之前,如何从 Java 内部为新实例计算 IDF 转换以设置新实例中的每个标记值?

基本代码如下所示:

Instances ins = vectorize(msg);
Instances unlabeled = new Instances(train,1);
Instance inst = new Instance(unlabeled.numAttributes());

String tmp = "";

for(int i=0; i < ins.numAttributes(); i++) {
tmp = ins.attribute(i).name();
if(unlabeled.attribute(tmp)!=null)
inst.setValue(unlabeled.attribute(tmp), 1.0); //TODO: Need to figure out the IDF transformed value to put here NOT 1!!
}

unlabeled.add(inst);

unlabeled.setClassIndex(classIdx);

.....cl.distributionForInstance(unlabeled.instance(i));

那么我该如何编码才能将正确的值放入要分类的新实例中?

为了清楚起见,inst.setValue(unlabeled.attribute(tmp), 1.0); 行需要从 1.0 更改为 IDF 转换后的数字。 .

最佳答案

为此,您需要使用 FilteredClassifier。代码片段是:


StringToWordVector strWVector = new StringToWordVector();
filteredClassifier fcls = new FilteredClassifier();
fcls.setFilter(strWVector);
fcls.setClassifier(new SMO());
fcls.buildClassifier(yourdata)
//rest of your code

这要容易得多,因为您可以一次传递所有实例。FilteredClassifier 会处理所有其他细节。该代码未经测试,但可以帮助您入门。

编辑:您也可以通过以下方式进行。这是 weka 教程中的代码片段有关详细信息,请参阅 http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Filter-Filtering%20on-the-fly 批处理模式


Instances train = ... // from somewhere
Instances test = ... // from somewhere
Standardize filter = new Standardize();
filter.setInputFormat(train); // initializing the filter once with training set
Instances newTrain = Filter.useFilter(train, filter); // configures the Filter based on train instances and returns filtered instances
Instances newTest = Filter.useFilter(test, filter); // create new test se

HTH

关于java - WEKA - 对来自 Java 的新数据进行分类 - IDF 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7238879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com