Я очень новичок в WEKA и сегодня попробовал IBk-алгоритм для классификации строк в разные классы с помощью функции расстояния Левенштейна-расстояния.Однако я получаю очень плохие результаты.Моим входам всегда присваивается один и тот же класс (класс b), который вообще не корректен.Может кто-нибудь сказать мне, что я делаю неправильно?
В настоящее время мой Код очень прост:
CSVLoader loader = new CSVLoader();
loader.setSource(new File("current_path"));
Instances data = loader.getDataSet();
int numberAttributes = data.numAttributes();
data.setClassIndex(data.numAttributes() - 1);
EditDistance newWeka = new EditDistance();
IBk ibk = new IBk(1);
((IBk) ibk).getNearestNeighbourSearchAlgorithm().setDistanceFunction(newWeka);
ibk.setCrossValidate(false);
ibk.setMeanSquared(false);
ibk.buildClassifier(data);
System.out.println(ibk);
Evaluation eval = new Evaluation(data);
eval.evaluateModel(ibk, data);
Результат:
** KNN Demo **
Correctly Classified Instances 4 50 %
Incorrectly Classified Instances 4 50 %
Kappa statistic 0
Mean absolute error 0.398
Root mean squared error 0.4449
Relative absolute error 97.2913 %
Root relative squared error 99.5586 %
Total Number of Instances 8
=== Detailed Accuracy By Class ===
TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0,000 0,000 ? 0,000 ? ? 0,500 0,375 Surname
1,000 1,000 0,500 1,000 0,667 ? 0,500 0,500 Firstname
0,000 0,000 ? 0,000 ? ? 0,500 0,125 Job
Weighted Avg. 0,500 0,500 ? 0,500 ? ? 0,500 0,406
=== Confusion Matrix ===
a b c <-- classified as
0 3 0 | a = Surname
0 4 0 | b = Firstname
0 1 0 | c = Job
Файл:
"Attribute","class"
"Wellbrock","Surname"
"Kohler","Surname"
"Sanger","Surname"
"Jan","Firstname"
"Anna","Firstname"
"Tim","Firstname"
"Schmidt","Firstname"
"Consultant","Job"
очень ценю вашу помощь