我正在尝试使用Weka库中的SVM分类来对一些数据进行分类。我的分类代码如下所示:
BufferedReader reader = new BufferedReader(new FileReader(arffDataFile));Instances data = new Instances(reader);reader.close();data.setClassIndex(0);NumericToNominal filter = new NumericToNominal();String[] options = new String[2];options[0] = "-R";options[1] = "1";filter.setOptions(options);filter.setInputFormat(data);Instances newData = Filter.useFilter(data, filter);newData.setClassIndex(0);weka.classifiers.functions.LibSVM svm = new weka.classifiers.functions.LibSVM();svm.buildClassifier(newData);Evaluation eval = new Evaluation(newData);eval.crossValidateModel(svm, newData, folds, new Random(1));System.out.println(eval.toSummaryString("\nResults\n======\n", false));System.out.println();
Arff数据文件包含2973个实例,每个实例有27个属性。
我的问题是,如何找出实例属性的权重。我需要研究哪些属性在分类过程中最有用。
我在机器学习领域还是个初学者,所以希望能用简单的话语和示例代码来解释。
提前感谢任何帮助。
回答:
Weka提供了从属性池中选择属性的选项。换句话说,它为你提供了对属性进行排序的手段。这些功能位于weka.attributeSelection中,你可以选择多种属性评估器和特定的搜索方法来使用。我个人在我的任务中偏好使用InfoGainAttributeEval作为属性评估器,并结合Ranker作为搜索方法。具体使用哪种组合取决于你的任务需求。
请查阅文档,了解如何在使用JAVA API与Weka交互时使用属性评估器和搜索方法。我个人使用的是图形用户界面。