图像缩略图

特征选择库

版本7.0.2020.3(723kb) 乔治
特征选择库(MATLAB工具箱)

229次下载

更新2020年05月03日

查看许可证

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

[4] Roffo,G.,2017年排名学习和学习等级:在模式识别应用排名的作用。预印本的arXiv的arXiv:1706.05933。

引用作为

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

评论和评级(146

乔治

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

乔治

嗨,炖肉,
这个文件从最初的执行仍然在库中。
我修复了一些问题并用新版本更新了代码。谢谢你找到虫子。
需要注意的是PLSA + EM算法的实现是基于代码为:
https://github.com/lizhangzhan/plsa网站
https://github.com/lizhangzhan/plsa/blob/master/plsa.m
我可以继续我们的邮件对话讨论!

我试着用ILFS算法,但似乎不行。我对执行情况不确定,因此我想指出我的关切:
1) 第113行:上面写着std.^2,但我认为是std。然后在第150行中使用方差。如果不是,150行除以std^4。
2)线159:该算法采取与概率类的较低值的二进制位,但是根据纸应该是高的。
3) 第243行:prob_token_factor未更新,但prob_tokens_factor未使用。这导致prob_token_factor永远不会在EM循环上更新。

金新宇

亲爱的乔治,
我已经使用蜘蛛超过10年了。现在我安装了工具箱并尝试了数据,但它总是错误命令显示。在数据中,它显示数据(算法,X,Y)或数据(X,Y)都可以工作。无论我输入数据(X,Y),它说显示错误:没有足够的输入参数。数据的格式‘算法’是什么,费雪的格式‘超级’是什么?
你可以帮帮我吗?

感谢您的工作。
我一直在使用这个工具包时encoutered一些问题。
当我运行Demo.m文件时,出现了错误。我发现在MATLAB 2018b中没有使用svmtrain和svmclassify函数,软件建议我用fitcsvm和ClassificationSVM替换它们。但是,在我修改了它们之后,程序仍然无法运行。我不知道为什么,你能帮我吗?

adhusch

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

乔治

喜马克,感谢您下载工具箱,看来您有drtoolbox问题,而不是fslib。下载降维工具箱,因为你在这里找到一个仅仅是一个图书馆,只有少数的功能都存在。

嗨,我相信后面的工作是伟大的,但我真的面临着很多困难,使测试工具箱。m运行正常。我有多个错误,比如:
------------
人指数在位置2超过数组边界(必须不超过3)。“
警告:使用CorrDim的内在维度估计失败!
-------------
这是在看某一点:
\MATLAB\Add-Ons\toolboxs\Feature Selection Library\FSLib_v6.2.1_2018\lib\drtoolbox\technologies\csdp.exe文件
我怎样才能得到这一个吗?

除此之外,我试图运行drgui.m,当使用散点图时,我得到了一个num2str错误,如scattern.m的第112行所示,它试图使num2str(hs,'%20.20f'),而hs是一个句柄。
非常感谢你所做的一切。

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

王萌

嗨,谢谢你的精彩工作。关于这一点,我有一个问题。
如果包装方法,如RFE也只返回排名个体的重量,这混淆了我关于如何实现。从我的观点,我们必须尝试在包装方法不同功能的子集,而不是单独的特征。所以对我来说好像你评估包裹里面的代码功能的子集,说Xsubset,以及一些其他的方式来提取单个要素的重要性,说Xindiv,在所有的使用功能集。最终我们得到的排名。如果是这样,为什么不返回每个功能子集,即Xsubset的结果。因为当我们使用的包装方法,我们希望得到最好的子集。即使代码返回的个人排名,我不知道,如果包含的子集frontest几个功能是最好的子集。

黎平黄

@Giorgio感谢您的帮助!

乔治

如果你的数据是非数字的,比如
标签= { '蓝色', '绿色', '红'};
有些功能不起作用。您需要数字数据,例如:
标签= [1,2,3]

乔治

黎平看来你的数据不是数字(整数,浮点,双)

黎平黄

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

乔治

@谢谢你的帮助!

@wenyan曹
注意:必须有“visual studio”和“x86_64-w64-mingw32”
只需下载库,该库也“一库中大型线性分类”,你可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/
然后运行。m文件。如果效果不错,那就没问题。另一方面,您应该遵循readme文件来运行它。
最好的祝愿

曹文彦

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

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

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

越来越MEX文件错误。不知道该怎么办

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

约翰王

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

您好乔治,你真的做了很多工作。我一直在寻找的代码这样的机会来使用。我已经提取的特征,当我应用了SVM的比分是非常低的,而且我相信这将有助于提高特征提取的性能。我有一个代码问题。我想使用make代码来构建第一,我有这样的错误。添加了所有必要的功能到bin。

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

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

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

齐插嗯

乔治

你好!
@穆罕默德:很可能sigma_ij和corr_ij被颠倒了,如果设置alpha=05,这两个公式是相同的,就不会造成这么多问题。
论文中的0。2,在这种情况下对应于=0。8。如果在训练集上使用交叉验证来找到最佳alpha,就不会有问题。我会试着把它修改一下,使它与纸张对齐。
@Samar:Demo_InfFS只包含交叉验证的结构,在这里您可以学习到最好的alpha参数。你将无法运行它,但它是。请尝试demo.m以轻松运行代码。

您好,我不懂A矩阵的计算方法,它和本文提出的方法不同。
报纸上说
A =(阿尔法* sigma_ij +(1-α)* corr_ij);
但代码实现它喜欢
A=(α*corr_ij+(1-α)*sigma_ij);

嗨,我有一个错误,同时运行Dimo_InfFs.m
字段分配到一个非结构阵列对象。

列车错误(32号线)
algo.training_time = CPUTIME;

Demo_InfFS错误(第41行)
CV =列车(Y_train,X_train_,CMD);
有什么帮助吗?

肯Irok

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

乔治

你好!你是说多类分类吗?
在情况下,是的。
所有“无监督”的FS方法自然适合于多类问题,因为它们不考虑任何类标签。
对于“有监督的”FS方法,其中一些方法适用于多类问题,如reliefF,SVM-RFE。。。

双凌彭

嗨,这是工具箱适用于多个类别的分类?如果是,如何实现呢?谢谢!

固定。谢谢!

乔治

你好,
函数列属于LIBLINEAR——一个用于大型线性分类的库,可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/

嗨,乔治,谢谢你分享你的工具箱!
我已经使用DemoInfFD.m脚本,因为当我运行它,我得到以下错误一些麻烦:
“未定义函数‘训练’用于类型‘双’的输入参数。
Demo_InfFS错误(第41行)
cv = train(Y_train, X_train_, cmd);
我在Windows 10上使用Matlab2016a。
有什么建议吗?
谢谢
埃琳娜

陈化

乔治

谢谢@Brad,我会尽快将其修复;)

布拉德

仅供参考--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_检验(:,排名(1:k));
err_rate =总和(Y_test〜= C)/P.TestSize;%误分类率
conMat = confusionmat(Y_test,C);%的混淆矩阵

这个项目是一个成功的努力。做得很好。

一个最好的无瑕工具箱的,我在文件交换已经找到了!做工精湛!奖励!

干得好。

frankjk

漂亮的?

征蓬

哈,我发现了我的错。标签必须是1和-1,而不是1和0

郭百合

谢谢你的分享,这对我很重要,谢谢

乔治

F、 Y.I.公司。
新特刊“功能选择符合深度学习”
本期专题的主要焦点是特征选择和深度学习,即深度学习模型如何融入特征选择和排序策略的问题。
请参阅提交页面,了解更多信息(https://www.mdpi.com/journal/informatics/special_issues/FSMDL

太好了,非常感谢!

你好,乔治!谢谢分享!我有一个问题:[19]Lasso的源代码在哪里?我在工具箱里找不到它。

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

感谢你的分享!
一些方法使用“nClass”变量选择的类别数量。怎么样在你的工具箱其他方法?你知道他们是否适用于多类模式?
另外,如果您能够为实现的方法提供引用,那就太好了!

杨晶

谢谢!!

乔治

固定。谢谢。

乔治

I''l检查..对不起

喜。我相信新版本包含错误的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(:,ranking(1:k)),Y懔train,'showplot',true);
%C = svmclassify(svmStruct,X_test(:,排名(1:K)), 'showplot',TRUE);
SVMClassier=fitcsvm(X_列(:,排名(1:k)),Y_列);
[C,分数] =预测(svmClassifier,X_test(:,排名(1:K)));

你好,

我使用的是Windows 10计算机上Matlab的2015A。我总是得到错误:“使用错误MEX
不支持金宝app的编译器或SDK被发现。对于选项,请访问://www.tatmou.com/金宝appsupport/compilers/R2015a/win64.html“谁能帮帮我?”

乔治

嗨@dongyang!不幸的是,工具箱提供的排序方法的集合,你应该决定一个先验的子集的基数。如果你想,为您提供的功能的子集,你可以去套索接近,他们是通过减少它们的权重为零,在该过程结束时去除冗余特征估计的方法,你可以选择的功能,其子集系数> 0。我希望能帮助!最好。

东阳市

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

熊京华

你好,乔治:
我想在“上即时”的方式RFE期间执行测试数据的交叉验证。
我已尝试设置a.test_on_the_fly =结构( '损失', 'class_loss', '数据',test_dset);
其中test_dset =数据(X_test,Y_test);

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

rfe/培训>评估中的错误(第122行)
如果~ isa (a.test_on_the_fly。因此,“集团”),a.test_on_the_fly。结果=组;结束

任何想法如何解决这一问题?我不知道什么是“组”应该是的,我是否需要提前设定a.test_on_the_fly.result。

谢谢,
缺口

Grzegorz Nowacki

扬尼斯

亲爱的乔治,

很高兴看到一切编译等运行平稳
在第6版出色的工作!

小民曰

你好,乔治,

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

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

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

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

arghavani

你好
谢谢分享你的代码。这是我收到在编译时,你会帮我的错误?
使
+编译和安装
建设estmutualinfo.cpp的MEX(DLL)
用 '的Microsoft Windows SDK 7.1(C ++)' 建设。
MEX成功完成。
建设estpab.cpp的MEX(DLL)
用 '的Microsoft Windows SDK 7.1(C ++)' 建设。
MEX成功完成。
建设libsvm_classifier_spider.cpp的MEX(DLL)
警告:转义字符“\m”无效。有关支持的特殊字符,请参阅“doc sprintf”。金宝app
>在使(线20)
错误使用墨西哥人
未知的文件扩展名“”。
制造错误(第20行)
的eval([ 'MEX libsvm_classifier_spider.cpp svm.cpp -Icompiletools',的sprintf([ 'compiletools',filesep, 'mexarg.cpp'])])

谢谢乔治这个非常有用的和易于使用的库...

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

这是运行make.m文件时出现的一整套错误
错误使用墨西哥人
libsvm_classifier_spider.cpp
E:\FSLib_v5.2_2017 (1)\FSLib_v5.2_2017\lib\libsvm_classifier_spider.cpp(11):致命
错误C1083:无法打开include文件:“mexarg.h”:没有这样的文件或目录

制造错误(第20行)
eval(['mex libsvm_分类器_蜘蛛.cpp支持向量机.cpp
-Icompiletools',的sprintf([ 'compiletools',filesep, 'mexarg.cpp'])])

特征选择方法:rfe
训练RFE(SVM内核线性)技艺= 43 output_rank = 1 ...
而在训练1
训练SVM核线性....
未定义的函数或变量“libsvm_classifier_spider”。

错误SVM /培训(225线)
[alpha,xSV,bias0]=libsvm_classifier_spider({'X',X},{'Y',Y}。。。

误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);

rfe/培训错误(第36行)
[RES,a.child] =列车(未受过训练的,DAT);

误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);

误差在spider_wrapper(线55)
(tr) =火车(a, dset);

rfe_rf错误(第16行)
排名= spider_wrapper(TrainFeatures,TrainClass,numF,低级( 'RFE'));
请帮忙

乔治

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

张舜

嗨,乔治,我在使用infFS模式时有个问题。在本文中,相关项是corr=1-abs(spearman(fi,fj)),但在您的代码中,为什么看起来像corr=spearman(fi,fj)?

嗨乔治,我对FSV特征选择方法有一个问题,在你的指导书,你说FSV是一种包装方法,但你对这个代码表示它是一个过滤器的方法。你能告诉我的原则是你在代码中引用。

通过运行“make.m'.What做,然后发现这个错误?

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

错误化妆(第17行)
mex([列表(i.名称]);

说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;
svm/训练错误(第50行)
[α,偏置] = quadsolve(KERMA, - 酮(大小(比释动能,1),1)中,Y”,0,algo.C);
误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);
误差在10 /训练(第30行)
[R,alg.child] =列车(alg.child,datTemp);
误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);
误差在spider_wrapper(线55)
(tr) =火车(a, dset);
误差在feat_selec(线205)
排名= spider_wrapper(X_train,Y_train,numF,低级(selection_method));
你对我有什么建议?

乔治

你好!
为了编译工具箱你只需要在主文件夹中运行“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时,在第20行出现错误。m文件。谢谢你!

乔治

你好,很抱歉,但来自MathWorks公司的家伙降级,因为在过去的上传.mex文件的库。我重新上传的最后一个版本。

富国范

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

瓦伦卡

乔治

你好,排名(1)是区别最大的特征。排名(完)最坏的功能。最好。

您好乔治,

我想知道在打电话给

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

排名(1)被所述“”最判别“”特征或它排名(端部)?

提前致谢

乔治

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

你应该有这样的输出:

>>美沙尔
编译...
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
用“gcc”建造。
MEX成功完成。
建筑“g++”。
MEX成功完成。
编译完成。

使用internal.stats.parseArgs误差(线42)
错误数量的参数。

pca错误(第170行)
算法,vcente, vEconomy, vNumComponents, vRows,vWeights,…

内在尺寸错误(第197行)
[mappedX,mapping]=主成分分析(X,大小(X,2));

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

亚平LIN

乔治

根据我们的实验“无限潜功能选择:基于图的一个概率潜在的排序方法” ICCV 2017年,我们的ILFS结果是最稳定的,强大的监督FS技术。
看到这里的文件的结果:https://goo.gl/WiDmu2
要执行多类FS,你可以随时使用1-VS-所有策略。
假设我们有4节课。
我们可以通过获得相应地设置类标签代表每个班上最好的子集:
SUB1)标签1到类标签1 -1至2,3,4类
标签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,score]=mRMR(M,L,10)%,其中M是X列,L是Y列,我要选择10个特征。
------------------------------------------------------------------------
2017年8月13日周日21:38:47检测到访问违规
------------------------------------------------------------------------


提前谢谢你!

拉巴斯

感谢您的贡献,我有一个关于LaplacianScore的问题。当我用你的代码包含在你的代码的例子,关于constructW功能它给了我一个警告:“警告:此功能被改变了这个度量不再支持”,并在延续,它给了我一个金宝app误差在LaplacianScore(FEA,W)功能:
“下标指标必须是真正的正整数或逻辑值。”正如我所说,在实现上是在你的代码示例进行说明兰特数据来完成。如果你解释原因,我将感谢。

乔治

无限的特征选择工作在监督和非监督的方式下,你可以简单地通过设置参数sup=1(监督)或sup=0(非监督)做出选择。

[排名中,w] = infFS(X_train,Y_train,α,SUP,0);

X_列是一个矩阵,标准的“设计矩阵”(见Bishop,2006)每行是一个样本,每列是一个特征。
Y_train是标签的列向量,如果你有两个班,这个载体将看起来像这样:[1,1,1,-1,-1-1,1,-1,等等。]“
阿尔法是混合参数,可以设置阿尔法= 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 3 3 3 3 4 4 4 5 5 5]这样的标签-这里没有2,这可能会生成异常。在这种情况下,应按如下方式重新分配标签:
[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5]>[1 1 1 1 2 2 2 3 3 3 4 4 4 4 4]

乔治

****抱歉“请检查Y向量中是否缺少诸如[1 1 1 1 3 3 3 3 4 4 4 5 5 5]之类的标签-这里没有4,这可能会生成异常。”
我是说标签2不见了。。。在这种情况下,应重新分配如下标签:
[1 1 1 1 1 3 3 3 3 4 4 4 4 5 5 5]>[1 1 1 1 2 2 2 3 3 3 4 4 4 4 4]
最好的,

你好,亲爱的乔治·罗福

我使用过svm rfe(FSLIB)来处理两个类似的数据集(ozone和ozone2),但是对于ozone数据集正确运行和ozone2数据集运行,它不会结束。

%函数SR = SVMRFEOzone(TrainData)
%% DEMO FILE
fprintf中( '\ nFEATURE选型工具箱V4.0起2016 - 对于Matlab的\ n');

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

[放在methodID] = readInput(listFS);
selection_method = listFS {methodID};%选择
%包括依赖项
让addpath( './ LIB');%依赖
让addpath(” ./方法);%FS方法

功能数量%
%numF =尺寸(X_train,2);
向量表决=零(1,72);
TrainData =负载(“ozone.mat”);
TrainData = TrainData.TrainData;

训练数据%的特征选择

X_train=列车数据(1:201,1:72);
Y_train = TrainData(1:201,73);
排名= spider_wrapper(X_train,Y_train,60%,降低( 'RFE'));
rankingD =排序(排序(1,61:72));
rankingB =排序(排序(1,1:60));
vectorvote(1,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;
TrainData (:, rankingD1 (:)) = [];

%--------------------------------------------------------------
X_train2 = TrainData(401:600,1:50);
Y_train2 = TrainData (401:600, 51);
ranking2 = spider_wrapper(X_train2,Y_train2,40,低级( 'RFE'));
rankingD2=排序(ranking2(1,41:50));
rankingB2 =排序(ranking2(1,1:40));
rankingB2 = rankingB1(rankingB2(:));
vectorvote(1,rankingB1(rankingD2(:)))= vectorvote(1,rankingB1(rankingD2(:)))+ 7;
列车数据(:,rankingD2(:)=[];
%--------------------------------------------------------------
X_train3 = TrainData(600:801,1:40);
Y_train3 = TrainData(600:801,41);
ranking3 = spider_wrapper (X_train3 Y_train3 30,降低(rfe));
rankingD3 =排序(ranking3(1,31:40));
rankingB3=排序(ranking3(1,1:30));
rankingB3 = rankingB2 (rankingB3 (:));
vectorvote(1,rankingB2(rankingD3(:)))= vectorvote(1,rankingB2(rankingD3(:)))+ 6;
TrainData(:,rankingD3(:))= [];
%--------------------------------------------------------------
X_train4 = TrainData (802:1000, 1:30);
Y_train4=列车数据(802:1000,31);
ranking4 = spider_wrapper (X_train4 Y_train4 25,降低(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_train = TrainData1(1:201,73);
排名= spider_wrapper(X_train,Y_train,60%,降低( 'RFE'));
rankingD =排序(排序(1,61:72));
rankingB =排序(排序(1,1:60));
vectorvote(1,rankingD(:))= vectorvote(1,rankingD(:))+ 9;
TrainData(:,rankingD(:))= [];
%--------------------------------------------------------------

X_train1 = TrainData1(201:400,1:60);
Y_train1 = TrainData1 (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;
TrainData (:, rankingD1 (:)) = [];

%--------------------------------------------------------------
X_train2=列车数据1(401:600,1:50);
Y_train2 = TrainData1 (401:600, 51);
ranking2 = spider_wrapper(X_train2,Y_train2,40,低级( 'RFE'));
rankingD2=排序(ranking2(1,41:50));
rankingB2 =排序(ranking2(1,1:40));
rankingB2 = rankingB1(rankingB2(:));
vectorvote(1,rankingB1(rankingD2(:)))= vectorvote(1,rankingB1(rankingD2(:)))+ 7;
列车数据(:,rankingD2(:)=[];
%--------------------------------------------------------------
X_train3 = TrainData1(600:801,1:40);
Y_train3 = TrainData1(600:801,41);
ranking3 = spider_wrapper (X_train3 Y_train3 30,降低(rfe));
rankingD3 =排序(ranking3(1,31:40));
rankingB3=排序(ranking3(1,1:30));
rankingB3 = rankingB2 (rankingB3 (:));
vectorvote(1,rankingB2(rankingD3(:)))= vectorvote(1,rankingB2(rankingD3(:)))+ 6;
TrainData(:,rankingD3(:))= [];
%--------------------------------------------------------------
X_train4 = TrainData1(802:1000,1:30);
Y_train4 = TrainData1(802:1000,31);
ranking4 = spider_wrapper (X_train4 Y_train4 25,降低(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文件。

我希望它可以用于多类或基于回归的特性选择,但我将看看是否能找到一种方法使之成为可能。

——编辑:值得注意的是,这里使用的SVM工具“将在未来的版本中被删除”,需要在某个时候用更新后的函数替换。

--EDIT2:想通了如何获得多类至少对渔民的工作。感兴趣的其他人:
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)
3.不要尝试使用支持向量机阴谋的结果,不会对多类数据的工作。特征选择(线Demo.m 149)后停止。

乔治

嗨达维德的“\”和“/”的是与您的操作系统(Linux或Windows)路径所以也许你从另一个在此基础上,欢迎您需要开关:)

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

乔治

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

排名= spider_wrapper(X,Y,N_DS,低级( 'RFE'))触发此堆栈错误跟踪:

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

错误SVM /培训(225线)
[alpha,xSV,bias0]=libsvm_classifier_spider({'X',X},{'Y',Y}。。。

误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);

rfe/培训错误(第36行)
[RES,a.child] =列车(未受过训练的,DAT);

误差在算法/火车(线103)
[dat,algor]=训练(algo,dat);

误差在spider_wrapper(线12)
(tr) =火车(a, dset);

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

乔治

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

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

如果你要使用的监管版本,那么设定的监控= 1,并提供正确的类标签。

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

嗨,有一个关于infFS算法的问题。如果它是一种无监督的特征选择方法,为什么必须提供一个带有类标签的Y_序列向量?

YJXia

阿夫松

是否多类数据该工具箱的工作?我有一个1320层的功能和3级的数据,我需要特征选择阶段。但这个工具箱不能为我的数据。

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

大卫

乔治

嗨,感谢您的反馈意见。我添加了“功能选择库(MATLAB工具箱)”的文件在压缩。它讨论的最重要的FS方法。至于实用性,你可以找到,其目的是使用户能够轻松运行代码,并使用提供工具箱每一个方法的工具箱中的演示文件。

您好,您的工具箱看起来很有趣,但是您是否提供了“自述”文件或任何其他文档来学习如何使用它?
非常感谢你!

杰出的!谢谢您!

您好感谢这么多的图书馆。我有个问题。对于该方法费希尔[6],并在库中实现广义Fisher得分提出了通过全全谷等2012,(这是更复杂的),或者只是经典费舍尔得分。谢谢你!

frankjk

黄海

更新

7.0.2020.3

打字错误

7.0.2020.2

更新的演示文件:demo-InfFS.m
%要运行此代码,您需要完成它。
%该文件还没有准备好运行。你可以用它的一部分。
%你需要添加数据集并安装LIBLINEAR SVM分类

7.0.2020.1

从Brais坎塞拉评论一些更新已经在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] ILF公司
[2] INFF系统
[3] ECFS
[4] MRMR
[5] relieff
[6]mutinffs
[7] fsv公司
[8] 拉普拉斯的
[9] 最大持续频率
[10] 无线电频率
[11] L0
[12]费希尔
[13] 自定义项
[14] llcfs公司
[15] cfs公司
[16]fsasl
[17] dgufs公司
[18] ufsol公司
[19]套索

6.1.2018.0

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

2018年0月6日

+包含当前平台的文件分隔符。

MATLAB版本兼容性
创建与R2017b
与任何版本兼容
平台兼容性
窗户 macOS Linux系统

FSLib_v7.0.1_2020_2

FSLib_v7.0.1_2020_2/评估指标

FSLib_7.0.1_2020_2/lib版本

FSLib_7.0.1_2020_2/lib/@算法

FSLib_v7.0.1_2020_2/lib/@data

FSLib_v7.0.1_2020_2 / lib / @distance

FSLib_7.0.1_2020_2/lib/@fisher

FSLib_v7.0.1_2020_2 / lib / @kernel

FSLib_7.0.1_2020_2/lib/@l0

FSLib_v7.0.1_2020_2/lib/@loss

FSLib_7.0.1_2020_2/lib/@rfe

FSLib_v7.0.1_2020_2/lib/@svm

FSLib_v7.0.1_2020_2 / lib目录/ drtoolbox

FSLib_v7.0.1_2020_2 / lib / drtoolbox / gui

FSLib_v7.0.1_2020_2 / lib目录/ drtoolbox /技术

FSLib_7.0.1_2020_2/lib/文件

FSLib_v7.0.1_2020_2/方法