图像缩略图“itemprop=

特征选择库

版本7.0.2020.3(723 KB)通过 乔治
功能选择库(MATLAB工具箱)
4.8条
56级

232个下载

更新2020年5月3日

查看许可证

特征选择库(FSLib 2018)是一种应用广泛的用于特征选择(属性或变量选择)的MATLAB库,能够减少高维问题,最大限度地提高数据模型的准确性,提高自动决策规则的性能,降低数据采集成本。
* FSLib是在2017年通过接收MATLAB中央硬币授予MATLAB。
如果您能给我们一些关于这个工具箱的反馈,我们将不胜感激。我们重视你的意见,欢迎你的评价。
如果您使用我们的工具箱(或方法包含在里面),请考虑举:
[1] Roffo,G.,梅尔齐,S.,卡斯泰拉尼,U.和Vinciarelli,A.,2017无限潜特征选择:基于图的一个概率潜在排序方法。预印本的arXiv的arXiv:1707.07538。
[2] Roffo,G.,Melzi,S.和Cristani,M.,2015年。无限特征选择。计算机视觉国际会议论文集(第4202-4210页)。
[3] Roffo,G。和梅尔齐,S.,2017,七月。排名学习:通过功能特征向量中心排名和选择。在新领域中挖掘复杂模式:第5届国际研讨会,NFMCP 2016年,同期举办ECML-PKDD 2016年,加尔达湖滨,意大利,2016年9月19日,修改后的论文选编(10312卷,第19页。)。斯普林格。

[4] Roffo,G.,2017年。排名学习和学习排名:关于排名在模式识别应用中的作用。arXiv预印本第十四章:1706.05933。

引用作为

乔治(2020)。特征选择库(//www.tatmou.com/matlabcentral/fileexchange/56937-feature-selection-library),MATLAB中央文件交换。检索.

评论和评级(146)

乔治

感谢大家这些年来使用这个工具箱。
我很高兴它对你们很多人都有用。
我希望您知道,我是以志愿者的身份分享代码和库的(我不为MATLAB工作,也不从中获利)。
我可以投入到更新这个库的时间是有限的。
这个库是不是一个商业产品,因此它可能包含不一致,错误,或我更新一些旧文件健忘。
尽管如此,我还是尽力通过改进这个开源库来纠正您发现的错误。
再次感谢你。

乔治

嗨Brais,
该文件从第一个实现开始就一直保存在库中。
我固定的一些问题,并用新版本更新的代码。谢谢你找到的bug。
请注意,PLSA+EM算法的实现基于以下代码:
https://github.com/lizhangzhan/plsa
https://github.com/lizhangzhan/plsa/blob/master/plsa.m
我可以继续讨论我们的邮件对话!

红烧

我尝试使用ILFS算法,但看来,这是不正常。我不知道有关实现的,所以我想指出我的顾虑:
1)线113:它说的std ^ 2,但我认为它是性病。方差然后在管线150如果不使用,线150除以STD ^ 4。
2)第159行:算法取prob类中值较低的箱子,但根据论文,取较高的箱子。
3)线243:不更新prob_token_factor,但prob_tokens_factor,即未使用。这导致prob_token_factor永远不会被在EM循环更新。

Shinuk金

亲爱的乔治,
我用蜘蛛已经10多年了。现在我安装了工具箱并尝试了数据,但它总是显示错误命令。在数据中,它显示数据(算法,X,Y)或数据(X,Y)都可以工作。但是我输入了数据(X,Y),它说显示错误:输入不足争论。什么数据中的格式是“算法”,fisher中“hyper”的格式是什么?
你可以帮帮我吗?

戴泽华

谢谢你的工作。
我一直在使用这个工具包时encoutered一些问题。
当我运行Demo.m文件,错误发生。而且我发现的功能svmtrain去和svmclassify不是在MATLAB 2018B使用,该软件建议我通过fitcsvm和ClassificationSVM替换它们。然而,当我修改它们,该程序仍不能运行。我不知道为什么,你能帮帮我吗?

adhusch

用下面Brad提供的补丁更新演示(2018年12月26日)是Nessary最近在Matlab上运行的。如果能更新源代码就好了。

乔治

你好,马克,谢谢你下载工具箱,看来你有问题的drtoolbox,而不是fslib。下载降维工具箱,因为您在这里找到的只是一个库,而且只有很少的函数。

嗨,我相信后面的工作是伟大的,但我真的面临着很多麻烦得到test_toolbox.m正常运行的。我越来越喜欢多个错误:
------------
人指数在位置2超过数组边界(必须不超过3)。“
警告:使用CorrDim进行内在维度估计失败!
-------------
这是在看某一点:
\ MATLAB \加载项\工具箱\特征选择库\ FSLib_v6.2.1_2018 \ LIB \ drtoolbox \技术\ csdp.exe
我怎样才能买到这个?

最重要的是,我试图运行drgui.m和使用分散绘图时,我得到一个错误num2str在scattern.m线112它正在努力使num2str(HS,“%20.20f”)和HS是一款处理。
感谢很多关于一切了。

@Giorgio非常感谢你
我有一个问题,我无法理解:
在运行演示文件在我的数据(使用FSV方法或Fisher),它给了我准确性85%..然后我试图运行Demo_InfFs文件,但它给了我准确性57%!哪里是我的错吗?
感谢问候;

王萌

嗨,谢谢你出色的工作。关于这个我有个问题。
如果像rfe这样的包装器方法也只返回单个权重的排名,那就混淆了如何实现。在我看来,我们必须尝试不同的特性子集,而不是包装方法中的单个特性。因此,对我来说,您似乎要评估包装代码中的特性子集,比如Xsubset,以及其他一些方法,比如Xindiv,来提取所有使用过的特性集中单个特性的重要性。最后我们得到了排名。如果是,为什么不返回每个特性子集的结果,即Xsubset。因为当我们使用包装器方法时,我们希望得到最好的子集。即使代码返回单独的排名,我也不确定组成一个子集的最前面的几个特性是否是最好的子集。

黎平黄

@乔治谢谢你的帮助!

乔治

如果你的数据是非数字的,比如
标签={'blue','green','red'};
有些功能不起作用。你需要像数字数据:
标签=[1,2,3]

乔治

似乎你的数据不是数字(int,float,double)

黎平黄

我有以下错误,有人能帮忙吗
未定义功能“isnan”类型“名义”的输入参数。

乔治

@samar拉加布​​感谢您的帮助!

@曹文彦
注意:您必须拥有“视觉工作室”和“x86_64的-W64-的mingw32”
只需下载库,该库也“一库中大型线性分类”,你可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/
然后运行make.m文件。如果运行良好,就可以了..另一方面,您应该按照自述文件来运行它。
最好的祝愿

你好,我是一个新手。这是一个原始的问题。如何使用这个工具箱?我希望你能给我指点。我会很感激。

嗨,如何为多类问题实现这个库(Demo&Demo_InfFS)?
提前感谢;

如何找出哪两个特征得到了1级和2级,即哪些特征被选中。

获取mex文件时出错。不知道该怎么办

你好!非常感谢你的图书馆。我们公司正在用它。

您好,这可能是一个愚蠢的问题,但它可以提供预先指定的权重,每个要素进入的特征选择算法(例如,特征向量中心算法)中的一个?

你好,乔治,你做得很好。我一直在寻找这样的代码使用的机会。我已经提取了特征,当我应用支持向量机时,分数很低,我相信这有助于提高提取特征的性能。我对密码有意见。我试图使用make代码首先构建,但出现此错误。已将所有必需的功能添加到垃圾箱中。

使用cd时出错
不能光盘F:\ BIN \ LIB(名称不存在或不是一个目录)。

make123forfeatureselection中的错误(第5行)
CD( 'LIB');

我使用MATLAB 2018B。希望得到您的阅读。谢谢你,先生!

齐昌

乔治

你好!
@穆罕默德:很可能sigma_ij和corr_ij被颠倒了,如果设置alpha=05,这两个公式是相同的,就不会造成这么多问题。
本文中的α0.2在本例中对应于α=0.8。如果在训练集上使用交叉验证来找到最佳alpha,就不会有问题。我会试着把它修好并和纸对齐。
@Samar:在Demo_InfFS仅包含交叉验证在那里可以学到最好的阿尔法参数的结构。您将无法运行,因为它是,但它是。尝试demo.m轻松运行代码。

你好,我不明白,在A矩阵的计算,它比在提出的方法不同。
报告声称,
A =(阿尔法* sigma_ij +(1-α)* corr_ij);
但代码是这样实现的
A=(α*corr_ij+(1-α)*sigma_ij);

嗨,运行Dimo_InfFs.m时出错
非结构数组对象的字段分配。

误差在列车(第32行)
algo.training_time = CPUTIME;

演示文件出错(第41行)
cv=列车(Y_列车,X_列车,cmd);
有什么帮助吗?

嗨,我有一个关于这个问题。我现在有一组数据(它的12列),并就准备所提到的数据进行分类(通过使用KNN,SVM等)。现在,我打算消除了一些来自数据的列来提高它的精度。而这一特征选择库似乎非常适合它。然而,刚刚开始MATLAB,我现在有上编译工具箱不知道。而我得到的编译个别库(特征选择方法.m文件)的一些错误。任何帮助,高度赞赏。谢谢。

乔治

嗨!你的意思是多类分类?
在情况下,是的。
所有FS的方法是“无监督”自然适合多类问题,因为他们没有考虑到任何类的标签。
至于“监督”,FS办法,他们中的一些工作,对多类问题,如reliefF,SVM-RFE,...

彭双玲

您好,这个工具箱是否适合对多个类别进行分类?如果是,如何实现?谢谢!

固定的。谢谢!

乔治

嗨,
功能列车属于LIBLINEAR - 库中大型线性分类,你可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/

嗨,乔治,谢谢你分享你的工具箱!
我在使用DemoInfFD.m脚本时遇到了一些问题,因为当我运行它时,会出现以下错误:
"未定义函数'train'用于'double'类型的输入参数。
演示文件出错(第41行)
cv=列车(Y_列车,X_列车,cmd);”
我使用的Windows 10 Matlab2016a。
有什么建议么?
谢谢
埃琳娜

陈华

乔治

谢谢你@Brad,我会尽快修好的;)

布拉德

FYI-- svmtrain去()&svmclassify()
这些函数在2018b中被删除,因此演示脚本在第200行附近失败。我相信下面的更新可以解决这个问题。。。

%使用线性支持向量机分类器金宝app
svmStruct = fitcsvm(X_train(:,排名(1:K)),Y_train);
sv = svmStruct.金宝appSupportVectors;
gscatter(X_train(:,排名(1)),X_train(:,排名(2)),Y_train);坚持,稍等
绘图(sv(:,1),sv(:,2),“ko”,“MarkerSize”,10);暂停
C =预测(svmStruct,X_test(:,排名(1:K)));
err_rate =总和(Y_test〜= C)/P.TestSize;%误分类率
conMat=confusionmat(Y_test,C);%混淆矩阵

否则,这个项目就是一个成功的努力。做得好。

我在文件交换中找到的最好的完美工具箱之一!干得好!荣誉!

优秀作品。

漂亮的?

征蓬

哈,我发现我的错。该标签必须在1和-1,代替1和0

神凯文

郭百合

感谢您的分享,这对我很重要,谢谢

乔治

F.Y.I.
新特刊“功能选择符合深度学习”
本期特刊的主要焦点将是特征选择和深度学习,那是多么深的学习模式可以与特征选择和排名策略来一脉相承的问题。
请参阅提交页面,了解更多信息(https://www.mdpi.com/journal/informatics/special_issues/FSMDL)

太好了,非常感谢!

郑生动

嗨,乔治!谢谢分享。我有个问题:套索的源代码在哪里?我在工具箱里找不到。

嗨,乔治!它可以是一个愚蠢的问题......但是,你是什么意思与内“CFS”功能“得分”?我怎样才能访问这些值?代码不会在工作区中归还。

感谢你的分享!
一些方法使用“nClass”变量来选择类的数量。工具箱中的其他方法如何?你知道它们是否适用于多类范式吗?
另外,如果你能提供实现方法的引用,那将是非常棒的!

杨晶

谢谢!!

乔治

固定的。谢谢。

乔治

我查一下。。对不起的

喜。我相信新版本包含错误的infFS功能。因为infFS给出的参数太多演示失败。infFS.m说,这是从4.0版本。

乔治

新版本已推出,请编译之前的解决方案。运行make。

缺少libsvm_classifier_spider

乔治

嗨!请参阅全新6.1版本 - >添加新的演示文件:如何选择的INF-FS和ILFS最佳参数。

乔治

你有多少令牌使用?注意,T> = 4

我得到了错误:使用histc的错误;边向量必须是单调的非递减的

金雅苏

嗨,谢谢你的出色工作。我有个问题。当我在带8GB内存的64位Window 8.1上的matlab 2015b上运行这个工具箱时,我得到了一个错误“内存不足”。我遵循了一些建议,比如重置“Jave堆大小”,但是没有成功。我该怎么办?

对于matlab2018a
%svmStruct = svmtrain去(X_train(:,排名(1:K)),Y_train, 'showplot',TRUE);
%C = svmclassify(svmStruct,X_test(:,排名(1:K)), 'showplot',TRUE);
SVMClassier=fitcsvm(X_列(:,排名(1:k)),Y_列);
[C,得分]=预测(SVM分类,X嫒检验(:,排名(1:k));

嗨,

我在windows 10计算机上使用Matlab 2015a。我总是得到一个错误:“错误使用mex
不支持金宝app的编译器或SDK被发现。对于选项,请访问://www.tatmou.com/金宝appsupport/compilers/R2015a/win64.html“有人能帮我吗?

乔治

你好@东阳!不幸的是,工具箱提供了一组排序方法,您应该预先决定子集的基数。如果你想要一个方法,为你提供一个子集的特征,你可以去套索方法,他们是估计器,用于删除冗余的特征,通过减少其权重为零,在过程结束时,你可以选择的特征的系数是>0的子集。我希望能帮忙!最好的。

东阳

嗨乔治:
感谢您分享您的代码。我有一些问题,
我怎样才能输出的使用,而不是一个排名的特征此工具箱,特征的子集。

京华熊

嗨乔治:
我试图在RFE期间以“即时”的方式对测试数据执行交叉验证。
我试过设置a。测试_on_the_fly = struct('loss','class_loss','data',test_dset);
其中test_dset =数据(X_test,Y_test);

这会在训练中引发错误:
未定义的函数或变量“group”。

误差在RFE /训练>评估(线122)
如果~isa(a.测试_飞行结果,a.测试_飞行结果=组;结束

知道怎么解决这个问题吗?我不确定“group”应该是什么,以及是否需要设置a.test_on_the_fly。提前得到结果。

谢谢,
缺口

亲爱的乔治,

很高兴看到一切编译和运行如此顺利
在版本6中。了不起的工作!

嗨乔治,

该工具箱是巨大的。看来,从RFE算法排名始终是1到N,不管我把什么数据是一家我失去了一些东西?难道排名应该是功能的重要性?

你好,我要发布一个新版本6.0的几个更新。最好。

你好乔治
感谢您分享您的代码。我有一些问题,
我怎么能导入此toolbax在MATLAB 2017A?

使用mex时出错
不支持金宝app的编译器或SDK被发现。对于选项,请访问:
//www.tatmou.com/金宝appsupport/compilers/R2014a/win64.


谢谢你分享你的代码。这是我在编译时遇到的一个错误,你能帮帮我吗?
制作
+生成并安装
建设estmutualinfo.cpp的MEX(DLL)
使用“Microsoft Windows SDK 7.1 (c++)”构建。
MEX成功完成。
正在生成的mex(dll)estpab.cpp公司
使用“Microsoft Windows SDK 7.1 (c++)”构建。
MEX成功完成。
建设libsvm_classifier_spider.cpp的MEX(DLL)
警告:转义字符“\ m”是无效的。参见“文档sprintf的”支持的特殊字符。金宝app
>制造中(第20行)
使用mex时出错
未知的文件扩展名“”。
制造错误(第20行)
eval(['mex libsvm_分类器_蜘蛛.cpp支持向量机.cpp-Icompiletools,sprintf(['compiletools',filesep,'墨西哥石油公司'])])

感谢Giorgio提供了这个非常有用且易于使用的库。。。

嗨!
其实这不是一个图书馆的问题,你丢失的文件位于:FSLib_v5.2_2017 / lib目录/ compiletools / mexarg.h
编译器找不到它,因此可以尝试将文件夹和子文件夹添加到路径中,然后重新编译。
最好,

这是一套完整的错误上运行的make.m文件
使用mex时出错
libsvm_分类器_蜘蛛.cpp
E: \FSLib戋u v5.2戋u 2017(1)\FSLib戋u v5.2戋u 2017\lib\libsvm戋u分类器_蜘蛛.cpp(11) :致命
错误C1083:无法打开包含文件:“mexarg.h”:没有这样的文件或目录

制造错误(第20行)
的eval(['MEX libsvm_classifier_spider.cpp svm.cpp
-Icompiletools',的sprintf([ 'compiletools',filesep, 'mexarg.cpp'])])

特征选择方法:RFE
训练rfe(支持向量机核线性)feat=43输出秩=1。。。
训练时间1
训练SVM核线性....
未定义函数或变量“libsvm_classifier_spider”。

错误SVM /培训(225线)
[α,XSV,BIAS0] = libsvm_classifier_spider({ 'X',X},{ 'Y',Y},...

算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);

rfe/培训错误(第36行)
[res,a.child]=列车(未经培训,日期);

算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);

误差在spider_wrapper(线55)
[tr,a]=列车(a,dset);

误差在rfe_rf(第16行)
ranking=spider_wrapper(TrainFeatures,TrainClass,numF,lower('rfe'));
请帮助

乔治

@顺:谢谢你的反馈。我修正了错误,可能是在之前的上传中引入的。很抱歉。
@FSV是一种包装方法。抱歉,你在哪里找到关于FSV和过滤器的推荐信?

张舜

喜乔治,使用infFS模式时,我有一个问题。在本文中,相关术语科尔= 1-ABS(斯皮尔曼(FI,FJ)),但在你的代码,为什么看起来科尔=斯皮尔曼(FI,FJ)?

嗨,乔治,我有一个关于fsv特性选择方法的问题,在你的指南中,你说fsv是一个包装器方法,但是你的代码表明它是一个过滤方法。你能告诉我你在守则中提到的原则吗。

这个错误是通过运行'make.m'发现的。然后做什么?

使用mex时出错
不支持金宝app的编译器或SDK被发现。对于选项,请访问://www.tatmou.com/金宝appsupport/compilers/R2014a/win32.

错误化妆(第17行)
MEX([列表(ⅰ)。名称]);

说Pertuz

优秀作品

乔治·您好,感谢您的共享代码。我有一些问题,
我有100个样本(84列16测试),每个样本有648个属性,所以我有100*648矩阵。我创建x_列(84*648)、y_列(84*1)、x_测试(16*648)、y_测试(16*1)。
选择方法后,会出现一些错误。我在粘贴命令窗口;

+特征选择方法:L0
训练10(SVM内核线性)技艺= 648 output_rank = 1 ....
训练SVM核线性....
由于依赖关系,已删除约束1

没有平等的约束…

使用时出错+
矩阵尺寸必须一致。
quadsolve中的错误(第414行)
y=y+fd*dy;
支持向量机/训练错误(第50行)
[alpha,bias]=quadsolve(KerMa,-one(size(KerMa,1),1),y',0,algo.C);
算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);
误差在10 /训练(第30行)
[r,阿尔格儿童]=列车(阿尔格儿童,数据温度);
算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);
误差在spider_wrapper(线55)
[tr,a]=列车(a,dset);
专长选择错误(第205行)
排名=蜘蛛包装(X_train,Y_train,numF,lower(selection_method));
你对我有什么建议?

乔治

嗨!
为了编译工具箱你只需要在主文件夹中运行“make.m”。
请打开make.m文件并检查路径分隔符:addpath(genpath('./compiletools');
/在Linux操作系统下使用,如果在MS Windows上运行代码,则可能需要将其替换为:addpath(genpath('.\compiletools'));

从您的输出似乎你安装合适的C​​编译器。如果您仍然有问题,复制并粘贴错误,否则很难理解什么是错的。最好的祝愿

您好乔治,我比理查德同样的问题。起初我运行mexall.文件,并得到如下的输出:
编译...
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
用“g++”构建。
MEX成功完成。
编译完成。

从那以后,我要运行的make.m文件,但得到的错误:未知的文件扩展名“”。错误化妆(第20行)。
我做错什么了?先感谢您。

你好,这个下载不是用make.m构建的。我需要做什么?找不到/缺少目录/lib/compiletools。运行make.m文件时,第20行出错。谢谢您。

乔治

嗨,抱歉,mathworks的人因为上次上传的.mex文件而降级了库。我重新上传了最后一个版本。

您好乔治,
我怎样才能解决这个问题(我使用ILFS)
赋值的非单例rhs维数比非单例下标的多

乔治

你好,排名(1)是最具歧视性的功能。排名(结束)最差的功能。最好的。

您好乔治,

我想知道在打电话给

[排名,权重,子集]=ILFS(X_列,Y_列,0);

排名(1)是“最具歧视性”功能还是排名(结束)?

提前谢谢

乔治

你好,
请确保你已经正确编译工具箱:
在./FSLib_v5.0_2017/lib/drtoolbox --->运行mexall.m

你应该有这样的输出:

>> mexall
编译...
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
用“g++”构建。
MEX成功完成。
编译完成。

使用时出错内部.stats.parseArgs(第42行)
错误数量的参数。

误差在PCA(线170)
[瓦尔戈里姆,vCenter,vConomy,vNumComponents,vRows,vWeights,。。。

误差在intrinsic_dim(线197)
[mappedX,映射] = PCA(X,尺寸(X,2));

未标题12中的错误(第39行)
DD = intrinsic_dim(X,{技术II});

亚平LIN

乔治

根据我们的实验“无限潜功能选择:基于图的一个概率潜在的排序方法” ICCV 2017年,我们的ILFS结果是最稳定的,强大的监督FS技术。
看到这里的文件的结果:https://goo.gl/WiDmu2
要执行多类FS,你可以随时使用1-VS-所有策略。
假设我们有四节课。
我们可以通过相应地设置类标签来获得表示每个类的最佳子集:
SUB1)标签1到类标签1 -1至2,3,4类
sub2)标签1至2类标签-1至1、3、4类
SUB3)标签1至3类,标签-1至1,2,4
SUB4)标签1至4类,标签-1至2,3,4类
然后我们可以提取最大公共子集(intersect sub1 sub2 sub3 sub4)。

你好,
请为我建议从这个工具盒中为高维,多类数据(7类)的最佳监督特征选择方法

你好,
每当我在训练数据和训练标签上使用mRMR方法时,MATLAB总是崩溃。
任何人也有类似的问题?

>> FEA,得分= MRMR(M,L,10)%,其中M是X火车,而L是Y系和我想选择10层的功能。
------------------------------------------------------------------------
访问冲突在太阳8月13日21点38分47秒2017年检测
------------------------------------------------------------------------
.
.
.

先感谢您!

rabbasi

谢谢你的贡献,我有一个关于LaplacianScore的问题。当我使用你的代码的例子是包含在您的代码中,关于constructW函数它给了我一个警告:“警告:这个函数已经改变和度规不再被支持”的延续,它给了我一个错误在LaplacianScore(有限元分析,W)功能:金宝app
“下标索引必须是实正整数或逻辑数。”。如我所说,实现是在rand数据上完成的,这在代码解释中是一个例子。如果你能解释一下原因,我将不胜感激。

乔治

无限特征选择以有监督和无监督的方式工作,您可以通过设置参数sup=1(用于监督)或sup=0(无监督)来进行选择。

[排名,w]=infFS(X_train,Y_train,alpha,sup,0);

X_列是一个矩阵,标准的“设计矩阵”(见Bishop,2006)每行是一个样本,每列是一个特征。
Y_train是标签的列向量,如果有两个类,则该向量将如下所示:[1,1,1,-1,-1-1,1,-1,等等…]
alpha是混合参数,可以设置alpha=0.9,通常工作正常。

无法知道有多少特征要使用先验,大多数FS方法只是根据特征的关联度对其进行排序,因此您可以选择前N个特征并将其传递给分类器,以查看它们是如何工作的。如果不够,你可以相应地增加N。。。

前N个特征很可能是那些最好的分类贡献
最好!

朱利安,我用ReliefF算法解决了一个类似的问题,而且效果很好!
祝你好运

朱利安

大家好,很抱歉问了这么简单的问题。这个方法可以用来确定在二分类任务中哪个(视觉)特征最有助于对给定的图像进行分类吗?谢谢。朱利安

嗨,
是否有意义,我在同一个数据上运行的代码两次,得到不同的结果?
我用mrmr和fisher方法。
谢谢!
埃利亚。

乔治

我的评论消失了。
SVM-RFE是基于SVM,所以
1) 你把输入的数据规范化了吗?当输入在[0,1]范围内时,支持向量机工作得更好更快,
一个非常简单的方法是:X=X./sum(X,2)
2)检查是否在您的y向量你丢失了一些标签,例如[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5 5] < - 这里有没有2,也许这会产生异常。在这种情况下,你如下应该重新分配标签:
[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5 5] - > [1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4]

乔治

****对不起“检查,如果你的y向量你丢失了一些标签,例如[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5 5] < - 这里有没有4,也许这可以产生异常。“
我的意思是标签2缺失......在这种情况下,你应该重新分配标签是这样的:
[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5 5] - > [1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4]
最好,

嗨,亲爱的乔治·罗夫

我已经使用SVM-RFE(FSLIB)对于两个相似的数据集(臭氧和ozone2),但臭氧数据集的正常运行和ozone2数据集运行它并没有结束。

%函数SR = SVMRFEOzone(TrainData)
%%演示文件
fprintf('\nFEATURE SELECTION TOOLBOX v 4.0 2016-用于Matlab\n');

%从列表中选择一个特征选择方法
listFS = { 'InfFS', 'ECFS', 'MRMR', 'relieff', 'mutinffs', 'FSV', '拉普拉斯', 'MCFS', 'RFE', 'L0', '费舍尔', 'UDFS', 'llcfs', 'CFS'};

[methodID]=读取输入(listFS);
selection_method=listFS{methodID};%已选定
%包括依赖项
让addpath( './ LIB');%依赖
addpath('./methods');%FS方法

功能数量%
%numF =尺寸(X_train,2);
vectorvote =零(1.72);
列车数据=负荷('臭氧.mat');
列车数据=列车数据;

%训练数据的特征选择

X_train = TrainData(1:201,1:72);
Y_train = TrainData (1:201, 73);
排名=蜘蛛包装(X_train,Y_train,60,lower('rfe'));
rankingD =排序(排序(1,61:72));
rankingB =排序(排序(1,1:60));
vectorvote (rankingD (:)) = vectorvote (1, rankingD (:)) + 9;
TrainData(:,rankingD(:))= [];
%--------------------------------------------------------------

X_train1 = TrainData(201:400,1:60);
Y_train1=列车数据(201:400,61);
ranking1 = spider_wrapper(X_train1,Y_train1,60,低级( 'RFE'));
rankingD1 =排序(ranking1(1,51:60));
rankingB1 =排序(ranking1(1,1:50));
rankingB1 = rankingB (rankingB1 (:));
vectorvote(1,rankingB(rankingD1(:)))= vectorvote(1,rankingB(rankingD1(:)))+ 8;
列车数据(:,rankingD1(:)=[];

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
X_train2 = TrainData(401:600,1:50);
Y_train2=列车数据(401:600,51);
ranking2=蜘蛛包装纸(X庠train2,Y庠train2,40,lower('rfe'));
rankingD2=排序(ranking2(1,41:50));
rankingB2 =排序(ranking2(1,1:40));
rankingB2 = rankingB1(rankingB2(:));
vectorvote(1,rankingB1(rankingD2(:)))= vectorvote(1,rankingB1(rankingD2(:)))+ 7;
TrainData(:,rankingD2(:))= [];
%--------------------------------------------------------------
X_train3=列车数据(600:801,1:40);
Y_train3 = TrainData (600:801, 41);
ranking3=蜘蛛包装纸(X_train3,Y_train3,30,lower('rfe'));
rankingD3 =排序(ranking3(1,31:40));
rankingB3 =排序(ranking3(1,1:30));
rankingB3=rankingB2(rankingB3(:));
vectorvote (rankingB2 (rankingD3 (:))) = vectorvote (1, rankingB2 (rankingD3 (:))) + 6;
TrainData(:,rankingD3(:))= [];
%--------------------------------------------------------------
X_train4=列车数据(802:1000,1:30);
Y_train4 = TrainData(802:1000,31);
ranking4=蜘蛛包装纸(X廑u train4,Y廑u train4,25,lower('rfe'));
rankingD4 =排序(ranking4(1,26:30));
rankingB4 =排序(ranking4(1,1:25));
rankingB4 = rankingB3(rankingB4(:));
vectorvote(1,rankingB3(rankingD4(:)))= vectorvote(1,rankingB3(rankingD4(:)))+ 5;
列车数据(:,rankingD4(:)=[];


TrainData1 =负载( 'ozone2.mat');
TrainData1 = TrainData1.xc11;

%训练数据的特征选择

X_train = TrainData1(1:201,1:72);
Y_列车=列车数据1(1:201,73);
排名=蜘蛛包装(X_train,Y_train,60,lower('rfe'));
rankingD =排序(排序(1,61:72));
rankingB =排序(排序(1,1:60));
vectorvote (rankingD (:)) = vectorvote (1, rankingD (:)) + 9;
TrainData(:,rankingD(:))= [];
%--------------------------------------------------------------

X_train1 = TrainData1(201:400一60);
Y_train1=列车数据1(201:400,61);
ranking1 = spider_wrapper(X_train1,Y_train1,60,低级( 'RFE'));
rankingD1 =排序(ranking1(1,51:60));
rankingB1 =排序(ranking1(1,1:50));
rankingB1 = rankingB (rankingB1 (:));
vectorvote(1,rankingB(rankingD1(:)))= vectorvote(1,rankingB(rankingD1(:)))+ 8;
列车数据(:,rankingD1(:)=[];

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
X_train2=列车数据1(401:600,1:50);
Y_train2=列车数据1(401:600,51);
ranking2=蜘蛛包装纸(X庠train2,Y庠train2,40,lower('rfe'));
rankingD2=排序(ranking2(1,41:50));
rankingB2 =排序(ranking2(1,1:40));
rankingB2 = rankingB1(rankingB2(:));
vectorvote(1,rankingB1(rankingD2(:)))= vectorvote(1,rankingB1(rankingD2(:)))+ 7;
TrainData(:,rankingD2(:))= [];
%--------------------------------------------------------------
X_train3=列车数据1(600:801,1:40);
Y_train3 = TrainData1(600:801,41);
ranking3=蜘蛛包装纸(X_train3,Y_train3,30,lower('rfe'));
rankingD3 =排序(ranking3(1,31:40));
rankingB3 =排序(ranking3(1,1:30));
rankingB3=rankingB2(rankingB3(:));
vectorvote (rankingB2 (rankingD3 (:))) = vectorvote (1, rankingB2 (rankingD3 (:))) + 6;
TrainData(:,rankingD3(:))= [];
%--------------------------------------------------------------
X_train4 = TrainData1(802:1000,1:30);
Y_train4=列车数据1(802:1000,31);
ranking4=蜘蛛包装纸(X廑u train4,Y廑u train4,25,lower('rfe'));
rankingD4 =排序(ranking4(1,26:30));
rankingB4 =排序(ranking4(1,1:25));
rankingB4 = rankingB3(rankingB4(:));
vectorvote(1,rankingB3(rankingD4(:)))= vectorvote(1,rankingB3(rankingD4(:)))+ 5;
列车数据(:,rankingD4(:)=[];



嗨,乔治!
非常感谢你的工具箱!
我有关于使用Fisher线性discriminent特征选择一个问题。在涉及到工具箱中的纸你引顾等人提出的Generelized特征分数。但似乎工具箱执行由杜达等人定义的“简单”的渔民选择。2012年是正确的吗?

乔治

你好!感谢您下载工具箱,一些技术可以为您提供一个子集的功能。但一般来说,它们只是执行排序步骤,在这种情况下,您可以决定选择多少个先验特征,或者使用任何形式的交叉验证来决定(大致)要维护多少个特征。

非常感谢你做出的宝贵贡献。
我刚刚下载了你开发的FSLib。我有个问题。在特征排序过程之后,我们如何确定需要多少个特征才能达到最佳精度?

杰巴克

忘记下面的评论。发现了Matlab的编译器是不是唯一一个可用。这个工具箱的方式的伟大工程。

杰巴克

想试试这个,但我没有访问Matlab编译器。某个地方有预编译版本吗?(除了第一个评论中的死链接)谢谢!

对于FS伟大的工具,有据可查,并用细节和参考的各种方法优异的README文件。

我希望它会为多类或基于回归特征选择工作,但我会看看我能想出一个办法,使之成为可能。

--编辑:值得注意的是,这里使用的支持向量机工具“将在将来的版本中删除”,并需要在某个时候用更新的函数替换。

——EDIT2:至少解决了如何让多个类为fisher工作的问题。对别人感兴趣:
1.开启标签(Y)成N×M矩阵,其中m =类和N =样品数量数(具有值-1或1如演示)。
2.修改 'spider_wrapper' 线10:a.method = '分类';到a.method = 2;%可以是任何数量的1-3取决于你的方法的偏好(详见FSLib_v4.2_2016/FSLib_v4.2_2016/FSLib_v4.2_2016/lib/@fisher/training.m的线60)
三。不要试图使用支持向量机绘制结果,这对多类数据是行不通的。功能选择后停止(Demo.m的第149行)。

乔治

你好,Davide,路径的“\”和“/”与您的操作系统(Linux或Windows)有关,因此可能需要根据它从一个路径切换到另一个路径,不客气:)

嗨,乔治,谢谢你的建议。在make文件的第9行,路径“/lib”下有一个“/”而不是一个“/”。干杯:)

乔治

嗨达维德,你确定你编制的解决方案?使用您应该运行make文件中的工具箱之前,它似乎是一个MEX文件丢失,还检查包括到路径的FSLib文件夹及其子文件夹。

rank = spider_wrapper(X,Y,N_DS,lower('rfe'))触发此堆栈错误跟踪:

未定义的函数“libsvm_classifier_spider”的类型“小区”的输入参数。

错误SVM /培训(225线)
[α,XSV,BIAS0] = libsvm_classifier_spider({ 'X',X},{ 'Y',Y},...

算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);

rfe/培训错误(第36行)
[res,a.child]=列车(未经培训,日期);

算法/列车错误(103号线)
[DAT,ALGOR] =训练(ALGO,DAT);

蜘蛛包装器出错(第12行)
[tr,a]=列车(a,dset);

你可以建议我该如何解决呢?

乔治

嗨,David,Inf FS是一个无监督的方法,但是在这个工具箱中你可以找到这个方法的两个变体。
函数[排名,权重]=infFS(X_train,Y_train,alpha,supervisory,verbose)

设置supervision=0以使用无监督版本,在这种情况下,可以设置Y_train=[]

如果你想使用监督版本,那么设置监督=1并提供正确的类标签。

谢谢你的提问,
希望这可以帮助!

你好,关于infFS算法一个问题。如果它是一种无监督的特征选择方法,为什么你还要为用户提供一流的标签一个Y_train载体?

YJXia

日前杨

阿夫松

这个工具箱对多类数据有效吗?我有1320个特征和3个类的数据,我需要特征选择阶段。但这个工具箱不能处理我的数据。

我发现FSLib是一个非常有用的工具!非常感谢开发者!

大卫

乔治

嗨,谢谢你的反馈。我在zip中添加了“Feature Selection Library(MATLAB Toolbox)”一文。讨论了最重要的FS方法。至于可用性,您可以在工具箱中找到一个演示文件,该文件旨在允许用户轻松运行代码并使用工具箱提供的每个方法。

你好,你的工具箱似乎很有趣,但你提供任何“自述”文件或任何其他文件,以了解如何使用它?
非常感谢你!

优秀的!谢谢!

你好,非常感谢你的图书馆。我有个问题。对于Fisher[6]方法,图书馆是采用顾泉泉等2012年提出的广义Fisher评分法(更为复杂),还是仅仅采用经典Fisher评分法。谢谢你!

黄海

乔治

更新

7.0.2020.3版

错别字

7.0.2020.2版

更新的演示文件:Demo_InfFS.m
%若要运行此代码,你需要去完成它。
这个文件还不能运行。你可以用一部分。
%你需要添加数据集并安装LIBLINEAR SVM分类

7.0.2020.1版

在braisecancela注释中,对ILFS方法进行了一些更新。
重要的提示:
PLSA + EM算法的实现是基于代码为:
https://github.com/lizhangzhan/plsa
https://github.com/lizhangzhan/plsa/blob/master/plsa.m

6.2.2018.1

+添加方法:infFS_fast

6.2.2018.0

+新方法:
[1] ILFS
[2] INFF系统
[3] ECFS
[4] 先生
[5]relieff
[6] 多功能
[7] FSV
[8] 拉普拉斯的
[9] 最大持续频率
[10] RFE
[11] L0
[12]费希尔
[13] 自定义项
[14] llcfs
[15] CFS
[16] fsasl公司
[17] dgufs
[18] ufsol
[19] 套索

6.1.2018.0

+添加了新的演示文件:如何为Inf FS和ILFS选择最佳参数。
+如何使用Inf-FS方法获得最佳结果。

6.0.2018.0

+文件分隔符为当前平台包括在内。

MATLAB版本兼容性
用R2017b创建
与任何版本兼容
平台兼容性
窗户 马科斯 Linux的

FSLib_7.0.1_2020_2

FSLib_v7.0.1_2020_2 / eval_metrics

FSLib_v7.0.1_2020_2 / lib目录

FSLib_7.0.1_2020_2/lib/@算法

FSLib_v7.0.1_2020_2/lib/@data

FSLib_7.0.1_2020_2/lib/@距离

FSLib_7.0.1_2020_2/lib/@fisher

FSLib_7.0.1_2020_2/lib/@内核

FSLib_7.0.1_2020_2/lib/@l0

FSLib_v7.0.1_2020_2/lib/@loss

FSLib_v7.0.1_2020_2/lib/@rfe

FSLib_v7.0.1_2020_2/lib/@svm

FSLib_v7.0.1_2020_2 / lib / drtoolbox

FSLib_7.0.1_2020_2/lib/drtoolbox/gui

FSLib_7.0.1_2020_2/lib/drtoolbox/技术

FSLib_7.0.1_2020_2/lib/文件

FSLib_v7.0.1_2020_2/方法