特征选择,理论上和实际上理论上和实际上使用特征选择之后进行分类比不进行特征选择的正确率都差,那么特征选择的意义又何在呢?与一位网友讨论的结果是:有些特征的提取可没那么容易,也会带来计算效率问题。如果不进行特征选择直接进行分类的话计算效率有可能不能接受,所以可以事先使用部分数据进行特征选择。那么显然我们要权衡的就是:特征选择带来的正确率下降和不选择有可能带来的效率问题哪个更不能被接受。
大概讲一下,用AttributeSelection进行特征选择,它需要设置3个方面,第一:对属性评价的类(自己到Weka软件里看一下,英文Attribute Evaluator),第二:搜索的方式(自己到Weka软件里看一下,英文Search Method),第三:就是你要进行特征选择的数据集了。最后调用Filter的静态方法userFilter,感觉写的都是废话,一看代码就明白了。唯一值得一说的也就是别把AttributeSelection的包加错了,代码旁边有注释。
另一个函数懒的解释了(它也不是我写的),基本上是自解释的,不太可能看不懂。
package com.cizito.weka.study; import java.util.Random; import weka.attributeSelection.CfsSubsetEval; import weka.attributeSelection.GreedyStepwise; import weka.classifiers.Evaluation; import weka.classifiers.bayes.NaiveBayes; import weka.classifiers.meta.AttributeSelectedClassifier; import weka.classifiers.trees.J48; import weka.core.Instances; import weka.core.converters.ConverterUtils.DataSource; import weka.filters.Filter; import weka.filters.supervised.attribute.AttributeSelection; /** * @author zhangwei * */ public class FilterTest { private Instances m_instances = null; private Instances selectedIns; public static void main( String[] args ) throws Exception { FilterTest filter = new FilterTest(); filter.getFileInstances( "D:/ProgramFiles/Weka-3-6/data/soybean.arff"); filter.selectAttUseFilter(); filter.selectAttUseMC(); } public void getFileInstances( String fileName ) throws Exception { DataSource frData = new DataSource( fileName ); m_instances = frData.getDataSet(); m_instances.setClassIndex( m_instances.numAttributes() - 1 ); } public void selectAttUseFilter() throws Exception { AttributeSelection filter = new AttributeSelection(); // package weka.filters.supervised.attribute! CfsSubsetEval eval = new CfsSubsetEval(); GreedyStepwise search = new GreedyStepwise(); filter.setEvaluator(eval); filter.setSearch(search); filter.setInputFormat( m_instances ); System.out.println( "number of instance attribute = " + m_instances.numAttributes() ); selectedIns = Filter.useFilter( m_instances, filter); System.out.println( "number of selected instance attribute = " + selectedIns.numAttributes() ); for( int i = 0; i < selectedIns.numInstances(); i++ ) { System.out.println( selectedIns.instance( i ) ); } } public void selectAttUseMC() throws Exception { AttributeSelectedClassifier classifier = new AttributeSelectedClassifier(); CfsSubsetEval eval = new CfsSubsetEval(); GreedyStepwise search = new GreedyStepwise(); J48 base = new J48(); NaiveBayes nb = new NaiveBayes(); classifier.setClassifier( nb ); classifier.setEvaluator( eval ); classifier.setSearch( search ); // 10-fold cross-validation Evaluation evaluation = new Evaluation( selectedIns ); evaluation.crossValidateModel(classifier, m_instances, 10, new Random(1)); System.out.println( evaluation.toSummaryString() ); } }
相关推荐
Weka 基于 Java 开发,是一款开源且免费的软件,有 Windows 版本,Linux 版本和 Mac OS 版本。在数据源上支持 ARFF文件,这是一种 ASCII 文本文件,CSV 文件和 JDBC 数据库访问功能。 Weka 轻巧便捷,安装简单,非常...
1. **数据预处理**:Weka提供了一系列的数据清洗、转换和筛选工具,帮助用户处理缺失值、异常值,以及进行特征选择和数据规范化。例如,它可以进行数据的归一化、标准化,或者对分类和连续数据进行独热编码。 2. **...
安装完成后,Weka会提供一个图形用户界面(GUI),用户可以通过这个界面加载数据、选择算法、训练模型并进行预测。 Weka的核心功能在于其内置的各种机器学习算法,包括分类、回归、聚类和关联规则等。它支持多种...
Filter组件用于数据预处理,如特征选择、转换等。例如,如果需要对数据进行标准化处理,可以使用`weka.filters.unsupervised.attribute.Normalize`: ```java import weka.filters.Filter; import weka.filters....
在数据预处理阶段,Weka提供了数据清洗、数据转换、特征选择等功能。数据清洗用于处理缺失值、异常值和重复值;数据转换则可以进行标准化、归一化、编码处理;特征选择则可以帮助用户找出对模型构建最有影响力的特征...
"weka-3-4-12.rar_SVM in JAVA_weka_weka平台实现" 这个标题表明我们关注的是一个关于在Java环境下使用Weka平台实现支持向量机(SVM)的教程或者项目。Weka是新西兰怀卡托大学开发的一个开源数据挖掘工具,它提供了...
1. **数据预处理**:Weka提供了丰富的数据预处理工具,如特征选择、缺失值处理和标准化。源码将展示如何实现这些操作。 2. **机器学习算法**:包括监督学习(如决策树、贝叶斯网络、支持向量机等)和无监督学习(如...
Weka软件,里面自带了Java.Weka是一款用Java开发的开源的数据挖掘软件。该软件方便好用
3. **数据预处理**:Weka提供了数据清洗、特征选择、归一化等多种预处理工具,有助于提升模型的性能。 4. **可视化工具**:可以可视化数据分布、模型结构以及学习过程,帮助用户更好地理解数据和模型。 5. **脚本...
Weka提供了一系列预处理工具,如数据过滤、缺失值处理、异常值检测和特征选择等,帮助用户准备适合模型训练的数据。 2. **分类**:分类是将数据集划分为预定义类别的一种任务。Weka包含了大量的分类算法,如决策树...
Weka提供了数据过滤器,如缺失值处理、特征选择、标准化和归一化等,以提高模型的性能和可解释性。 **3. 分类算法:** Weka包含了众多经典的分类算法,如朴素贝叶斯、决策树(C4.5和J48)、支持向量机(SVM)、随机...
在“confusionmatrix-weka-package-master”中,我们可以找到源代码和其他资源,这些资源可以帮助开发人员或研究人员自定义混淆矩阵的显示方式,例如使用Graphviz进行高级的图形渲染。Graphviz是一个强大的开源图形...
Weka开发[4]-特征选择 4 Weka开发[5]-半监督算法 6 Weka开发[0]-导入Weka包 8 半监督算法工具SVMlin使用 12 半监督算法工具SVMlin读取数据代码介绍 14 Weka开发[6]-参数设置 16 Weka开发[7]-LibSVM ...
例如,你可以通过Weka进行数据的缺失值处理(如平均值填充、删除记录等)、异常值检测、数据规范化(如最小-最大缩放、Z-score标准化)以及特征选择,以提高模型的性能和预测准确性。 **二、分类算法** Weka包含了...
1. **数据预处理**:Weka提供了多种数据预处理工具,包括数据清洗(去除缺失值、异常值处理)、数据转换(归一化、标准化、独热编码)、特征选择等,以提升模型的性能。 2. **分类与回归**:支持多种分类算法,如...
1. 数据预处理:清洗数据,处理缺失值,转换数据类型,归一化,缩放,特征选择等。 2. 学习模型:选择合适的算法训练模型,如分类、回归或聚类。 3. 模型评估:使用交叉验证、测试集验证等方式评估模型的准确性和...
- **数据预处理**:包括数据清洗(去除噪声和异常值)、数据转换(标准化、归一化)、数据选择(特征选择)等。 - **分类与回归**:支持多种监督学习算法,如决策树(C4.5, ID3)、贝叶斯分类器(Naive Bayes)、...
Weka,全称为Waikato Environment for Knowledge Analysis,是新西兰怀卡托大学开发的一个开源数据挖掘和机器学习工具。Weka提供了丰富的算法库,涵盖了预处理、分类、回归、聚类、关联规则等多个领域的数据挖掘任务...