2013-04-03 52 views
1

实现参数元分类:如果我目前使用Weka的决策树(或其他)分类为我的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

回答

0

javadoc表明,有一种方法setClassifier(),你会用它来设置要使用的分类。除此之外,仅仅是实例化课程并相应地设置选项。

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

+0

感谢您的回复:我计划在数据库表中的'一个尺寸适合所有'varchar字段。这可以在运行时读取到Java字符串。然后可以分割字符串以适合cls.setOptions(optionsArray); 这是元分类器的使用,但让我尽管。 – 2013-04-03 20:49:30

+0

您需要单独存储该信息,因为分类器将以不同的方式实例化(即您必须设置基本分类器)。 – 2013-04-03 20:52:45

+0

如果我正确理解这个问题,基本分类器,例如J48,将正常设置。这是我不确定的元分类器的应用。 – 2013-04-03 20:57:00