2013-04-03 4 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); Это использование мета-классификатора, который меня получает. –

+0

Вам нужно будет хранить эту информацию отдельно, поскольку классификатор будет создаваться по-другому (т. Е. Вам нужно будет установить базовый классификатор). –

+0

Если я правильно понимаю эту проблему, базовый классификатор, например, J48, будет устанавливаться нормально. Это приложение мета-классификатора, о котором я не знаю. –

Смежные вопросы