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

时间:2013-04-03 20:21:38

标签: weka decision-tree classification

如果我目前在我的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的资源管理器中,如果我将训练和测试数据用于装袋,则分类器的参数字符串为:

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 个答案:

答案 0 :(得分:0)

javadoc表示您可以使用方法setClassifier()来设置要使用的分类器。除此之外,它只是实例化类并相应地设置选项。

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