在 Weka 中实现元分类器的参数

Posted

技术标签:

【中文标题】在 Weka 中实现元分类器的参数【英文标题】:Implementing parameters to meta classifier in Weka 【发布时间】:2013-03-25 16:58:09 【问题描述】:

如果我目前在我的 Java 代码中使用 Weka 决策树(或其他)分类器,如下所示:

// Get training and testing data.
Instances train = new Instances ("from training file");
train.setClassIndex(train.numAttributes() - 1);
Instances test = new Instances ("from testing file");        
test.setClassIndex(test.numAttributes() - 1);

// Set classifier.
Object obj = Class.forName("weka.classifiers.trees.J48").newInstance();
Classifier cls = (Classifier) Class.forName("weka.classifiers.trees.J48").cast(obj);

// Set parameters for classifier.      
String options = ("-C 0.05 -M 2");        
String[] optionsArray = options.split(" ");        
cls.setOptions(optionsArray);        

// Train classifier.    
cls.buildClassifier(train);        
Evaluation eval = new Evaluation(train);

// Test trained classifier.
eval.evaluateModel(cls, test);

如果我想使用元分类器会发生什么,例如装袋,试图提高结果?在 Weka 的 Explorer 中,如果我对我的训练和测试数据使用 bagging,分类器的参数字符串是:

weka.classifiers.meta.Bagging -P 100 -S 1 -num-slots 1 -I 10 -W weka.classifiers.trees.J48 -- -C 0.25 -M 2

有谁知道这可能是什么代码表示?

理想情况下,我想将分类器和元分类器的类存储在数据库表中,即行:

Object obj = Class.forName("weka.classifiers.trees.J48").newInstance(); 

变成:

Object obj = Class.forName(classifier.getWekaClass()).newInstance();

如果我将分类器从 J48 切换到 NB,参数也可以在数据库表中列出,以便于更改它们。

我相信这就是我正在寻找的,但是......

http://weka.wikispaces.com/Use+WEKA+in+your+Java+code#Attribute selection-Meta-Classifier

【问题讨论】:

【参考方案1】:

javadoc 表明有一种方法 setClassifier() 可以用来设置要使用的分类器。除此之外,只需实例化类并相应地设置选项。

您当然可以将类名存储在数据库中,并将它们用作您的示例。存储参数会有点棘手,因为每个分类器的数量和类型会有所不同——您必须提供一个可以正确序列化和反序列化它们的包装器。

【讨论】:

感谢您的回复:我计划在数据库表中使用“一刀切”的 varchar 字段。这可以在运行时读取到 Java 字符串。然后可以拆分字符串以适合 cls.setOptions(optionsArray);让我印象深刻的是元分类器的使用。 您需要单独存储该信息,因为分类器将以不同的方式实例化(即您必须设置基本分类器)。 如果我正确理解了这个问题,基本分类器,例如J48,正常设置。这是我不确定的元分类器的应用。 元分类器的设置方式完全相同,除了调用setClassifier(),在其中你给它一个基本分类器。 我稍微修改了这个问题,以包含一个指向我认为你的意思的链接。

以上是关于在 Weka 中实现元分类器的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何提高 Weka 中 SMO 分类器的性能?

在 Weka 中级联分类器的错误方法

Weka - 如何查找分类器的输入格式

运行 weka 分类器的 C# 代码

Weka 中 SMO、NaiveBayes 和 BayesNet 分类器的不同结果

如何将训练数据转换为 weka 分类器的测试数据?