我正在尝试用MATLAB中的SVM进行一些文本分类,并且真的想知道MATLAB是否有任何特征选择方法(Chi Sq。,MI,....),因为我想尝试各种方法和保持最好的方法,我没有时间实现所有这些。这就是为什么我在MATLAB中寻找这样的方法。任何人都知道吗?
答案 0 :(得分:3)
MATLAB还有其他用于分类的工具,如cluster analysis,random forests等。
如果您没有svmtrain
所需的工具箱,我建议LIBSVM。它是免费的,我已经使用了很多,效果很好。
答案 1 :(得分:2)
统计工具箱有sequentialfs。另请参阅feature selection上的文档。
答案 2 :(得分:2)
类似的方法是dimensionality reduction。在MATLAB中,您可以轻松执行PCA或Factor analysis。
或者,您可以采用包装器方法进行功能选择。您可以通过每次获取一部分特征来搜索特征空间,并使用您决定的任何分类算法(LDA,决策树,SVM,...)来评估该子集。您可以详尽地执行此操作,也可以使用某种启发式方法来指导搜索(贪婪,GA,SA,...)
如果您可以访问 Bioinformatics Toolbox ,它有一个randfeatures
功能可以执行类似的操作。甚至还有几个cool demos个实际用例。
答案 3 :(得分:0)
这可能会有所帮助:
有两种方法可以选择分类中的功能:
我建议使用fselect.py,因为它提供了更多选项 - 比如自动网格搜索最佳参数(使用grid.py)。它还根据特征的辨别能力提供F分数(有关F分数的详细信息,请参阅http://www.csie.ntu.edu.tw/~cjlin/papers/features.pdf)。
由于fselect.py是用python编写的,你可以使用python接口或者我喜欢的,使用matlab来执行对python的系统调用:
system('python fselect.py <training file name>')
安装python,编译libsvm很重要(你在libsvm的tools目录中有grid.py和其他文件)。
必须以libsvm格式(稀疏格式)提供培训文件。您可以通过在matlab中使用稀疏函数然后使用libsvmwrite来实现。
xtrain_sparse = sparse(xtrain)
libsvmwrite('filename.txt',ytrain,xtrain_sparse)
希望这有帮助。
对于带有libsvm的sequentialfs,你可以看到这篇文章: