图片缩略图

特征选择图书馆

version 7.0.2020.3 (723 KB) by Giorgio.
特征选择库(MATLAB工具箱)
4.8
64级

164下载

更新2020年5月3日

视图版本历史

查看许可协议

Feature Selection Library (FSLib 2018)是一种广泛应用于特征选择(属性或变量选择)的MATLAB库,能够降低高维问题,最大化数据模型的准确性,自动决策规则的性能,降低数据采集成本。
* FSLib在2017年获得MATLAB中央硬币奖励。
如果您能就这个工具箱给我们一些反馈,我们将不胜感激。我们重视您的意见,欢迎您的评价。
如果你使用我们的工具箱(或其中包含的方法),请考虑引用:
Roffo, G., Melzi, S., Castellani, U. and Vinciarelli, A., 2017。无限潜在特征选择:一种基于概率潜在图的排序方法。arXiv预印本arXiv: 1707.07538。
[2] Roffo,G.,Melzi,S.和Cristani,M.,2015年。无限特征选择。IEEE计算机视觉国际会议记录(第4202-4210页)。
[3] Roffo, G.和Melzi, S., 2017, 7月。学习排序:通过特征向量中心性进行特征排序和选择。2016年9月19日,《采矿复杂模式的新前沿:第五届国际研讨会(NFMCP 2016)》,与ECML-PKDD 2016联合举办,意大利Riva del Garda, 2016年9月19日,修订论文选集(第10312卷,第19页)。施普林格。

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

引用作为

乔治(2021)。特征选择图书馆(//www.tianjin-qmedu.com/matlabcentral/fileexchange/56937-feature-selection-library), MATLAB中央文件交换。检索.

意见及评分(163)

涛 陈

穆罕默德Khabbaz

嗨,谢谢你的包裹。我只是想知道如何更改svm rfe的内核。你有关于这方面的文件吗?

斯楠伊斯兰教

李永好

万博1manbetx支持作者

嗨,乔治,我现在可以使用演示代码了。我试着运行各种过滤器,每个过滤器的排名都不一样。在这种情况下,我如何决定哪些功能是最重要的。请帮忙。我应该试试其他代码吗?

尼古拉·杜

Zeynab Mousavikhamene

有一点:我想知道你是否能在代码的什么地方找到了w(变换矩阵),并将其应用到fisher参考书中的方程式3.83中。我看到在训练中计算了相关性。m,但没有变换。在Fisher方法中,特征的排序是在它们转换到一个新的空间之后进行的。

Zeynab Mousavikhamene

更新:我尝试探索每个功能的权重(不仅仅是输出排名),我尝试添加a.rank到输出,我收到了这个错误:
A.重量级
索引超过数组元素的数量(0)。

fisher/subsref错误(第72行)
cur = stack {1};

Zeynab Mousavikhamene

Zeynab Mousavikhamene

Zeynab Mousavikhamene

Giorgio各个特征选择器的输出排名。我还需要知道每个功能的得分。显然,该软件不会报告每个功能的得分。

Giorgio.

嗨@Zeynab,谢谢你的提问。Q1:listFS是字符串的单元格数组,methodID应该是一个整数值。是否确实对数组进行了正确的索引?e、 例如,listFS{1}或listFS{2}等。。?
Q2:特征选择应该应用于训练数据,这是因为你不应该有测试数据(和它的标签在监督的情况下设置),如果你在整个数据集应用FS是不公平的,你的特征选择策略运作(~显然更好~),因为它见证了所有的数据,但是,您对数据进行了过度拟合(具有很高的概率),并在实际测试数据上失去了泛化能力。谷歌搜索关于ML中训练/测试分割的动机以获得更多细节。
Q3:加入随机特征是为了表明FS可以有效地检测那些不相关的特征(Random -> by construction)并丢弃它们。它是一个演示文件,因此玩具数据是演示的一部分,您可以看到不同的方法如何检测和选择相关的特性。这个演示提供了工具箱中FS方法集之间的简单比较。谢谢你的问题,希望我的回答能有所帮助!

Zeynab Mousavikhamene

嗨,乔治
为什么要在演示中运行特征选择?我认为对整个数据点进行特征选择可以得到更全面的数据趋势结果。另外,请您解释一下为什么在演示中再次向列车集添加了随机特征值(X_train = [X_train,rand(120,4)];) ?
谢谢

Giorgio.

嗨@pallavi,您使用哪些X_train数据和y来提供分类器?看起来你的数据X和Y有问题,请检查你是否正确地将它们传递给函数。

Zeynab Mousavikhamene

嗨,乔治
我在尝试为Fisher运行演示时收到此错误:
无法使用类型fisher作为索引的值。

演示中的错误(第70行)
selection_method=listFS{methodID};%挑选出来的

嗨,乔治,
我是机器学习的新手。我只是想演示一下。m代码和我遇到以下错误
使用classreg.learning错误。FitTemplate / fillIfNeeded(第666行)
showplot不是有效的参数名称。。

你能解释一下我该怎么改正吗?我已经在我的代码中更改了函数fitcsvm和ClassificationSVM

鲱鱼穆罕默德

你好,乔治,感谢你的努力
你能帮我个忙吗?
我想要一个通过粗糙集理论进行特征选择的工具箱

Giorgio.

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

Giorgio.

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

brai Cancela

我尝试使用ILFS算法,但似乎不正常。我不确定实施,所以我想指出我的担忧:
1)第113行:它说std.^2,但我认为它是std。方差在第150行中使用。如果不是,第150行除以std^4。
2)第159行:算法取概率类值较低的箱子,但根据论文,取概率类值较高的箱子。
3)第243行:prob_token_factor没有更新,但prob_token_factor未使用。这将导致在EM循环中永远不会更新prob_token_factor。

Shinuk金

亲爱的乔治,
我已经用了十多年了。现在我安装了工具箱并尝试了数据,但它总是在显示中出错。在数据中,它显示数据(算法,X,Y)或数据(X,Y)都有效。但是我输入了数据(X,Y),它说显示错误:没有足够的输入参数。数据中的“算法”是什么格式,fisher中的“超”是什么格式?
你能帮我个忙吗?

Zehua戴

谢谢你的工作。
我在使用这个工具箱时遇到了一些问题。
当我运行演示。m文件,errors happened. And I found the functions svmtrain and svmclassify are not used in MATLAB 2018b, the software suggested me replacing them by fitcsvm and ClassificationSVM. However, after I modified them,the program still cannot run. I do not know why, can you help me?

adhusch

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

穆罕默德·萨夫达尔

Giorgio.

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

Marc Youcef

嗨,我相信背后的工作是伟大的,但我真的面临着很多麻烦让Test_toolbox.m正常运行。我得到了多个错误,如:
------------
'位置2的索引超过数组边界(不能超过3)。'
警告:使用CorrDim的内在维度估计失败!
-------------
它是看着某一点:
MATLAB \附件\工具箱\ \特征选择图书馆\ FSLib_v6.2.1_2018 \ lib \ \ csdp.exe drtoolbox \技术
请问我怎样才能买到这个?

除此之外,我还试着运行drgui。m,当使用散点绘图时,我得到了一个num2str错误,就像scatter112行一样。它试图使num2str(hs,'%20.20f')和hs是一个句柄。
非常感谢你所做的一切。

高科技的人

萨玛Ragab

@Giorgio非常感谢
我有一个问题,我不明白:
当运行演示文件(使用FSV方法或fisher)对我的数据,它给我的准确性85% ..然后我尝试运行demo_infffs文件,但它给了我57%的准确率!!我的错在哪里?
谢谢,关于;

王濛

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

力平黄

@乔治谢谢你的帮助!

Giorgio.

如果你的数据是非数值的
标签={‘蓝色’、‘绿色’、‘红色’};
有些函数不起作用。你需要像这样的数字数据:
标签=[1,2,3]

Giorgio.

liping您的数据似乎不是数字(整数、浮点、双精度)

力平黄

我有以下错误,谁能帮助这个
未定义的函数'ISNAN'用于类型“标称”类型的参数。

Giorgio.

@samar ragab谢谢你的帮助!

萨玛Ragab

@wenyan曹
注意:您必须具有“Visual Studio”和“X86_64-W64-Mingw32”
只要下载这个库,这个库也是“大型线性分类库”,你可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/
然后运行make.m文件。如果它工作正常,就可以了。另一方面,您应该按照自述文件来运行它。
最好的祝愿

闻堰曹

你好,我是个新手。这是一个很有创意的问题。我该如何使用这个工具箱?我希望你能给我指导。我会很感激的。

萨玛Ragab

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

Ananya Dutta.

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

Ananya Dutta.

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

马西莫·里比利尼

这就跟你问声好!非常感谢你给我这个图书馆。我们公司正在使用它。

王约翰

克努特安德烈Skaug

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

菲利克斯•伊曼纽尔

你好,乔治,你真的做得很好。我一直在寻找这样的代码使用的机会。我已经提取了特征,当我使用SVM的时候得分很低,我相信这可以帮助提高特征提取的性能。我对代码有意见。我试图使用make代码首先构建,我有这个错误。将所有必要的功能添加到bin中。

错误使用cd
不能CD到F:\bin\lib(名称不存在或不是目录)。

make123forfeatureselection错误(第5行)
cd(“自由”);

我使用MATLAB 2018b。希望收到你的来信。谢谢你先生!

齐昌

Giorgio.

你好!
@Muhammed:可能sigma_ij和corr_ij被颠倒了,如果你设置alpha=05,这两个公式是一样的,就不会造成这么多问题。
文中的alpha 0.2,在这种情况下对应于alpha=0.8。如果您在训练集上使用交叉验证来找到最好的alpha,就不会有问题。我会试着修正它,把它和纸对齐。
Demo_InfFS只包含交叉验证的结构,你可以从中学到最好的alpha参数。你将无法运行它,但它是。尝试演示。M可以轻松地运行代码。

穆罕默德Yucel

你好我不明白矩阵的计算,它与纸上提出的方法不同。
论文指出,
A = (alpha*sigma_ij + (1-alpha)*corr_ij); / /
但是代码是这样实现的
A = (alpha*corr_ij + (1-alpha)*sigma_ij);

萨玛Ragab

您好,我在运行Dimo_InfFs.m时出错
字段分配给非结构数组对象。

列车错误(第32行)
algo.training_time = cputime;

演示InfFS中的错误(第41行)
cv=列车(Y\U列车、X\U列车、cmd);
任何帮助请吗?

肯·伊洛克

你好,我有一个关于这个的问题。我目前有一组数据(12列),并计划对上述数据进行分类(使用KNN, SVM等)。现在,我计划从数据中删除一些列,以提高它的准确性。这个功能选择库似乎非常适合它。然而,刚开始使用MATLAB,我目前对编译工具箱没有任何想法。在编译单个库(特征选择方法。m文件)时,我得到了一些错误。任何帮助,这是高度赞赏。谢谢。

Giorgio.

这就跟你问声好!你是说多类分类吗?
在情况下,是的。
所有“无监督”的FS方法自然适合于多类问题,因为它们不考虑任何类标签。
至于“监督的”,FS方法,其中一些工作多级问题,如救济,SVM-RFE,…

彭双玲

你好,这个工具箱适合多类别分类吗?如果是,如何实现它?谢谢你!

埃琳娜Bassanelli

固定的谢谢

Giorgio.

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

埃琳娜Bassanelli

嗨,乔治,谢谢你分享你的工具箱!
我在使用DemoInfFD时遇到了一些麻烦。因为当我运行它时,我得到以下错误:
"未定义函数'train'用于输入类型为'double'的参数。
演示InfFS中的错误(第41行)
cv=列车(Y\U列车、X\U列车、cmd);"
我在Windows 10上使用Matlab2016a。
有什么建议吗?
谢谢
埃琳娜

陈化

Giorgio.

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

布拉德

供参考——svmtrain() & svmclassify()
这些函数在2018b中被删除了,所以演示脚本在第200行左右失败。我相信下面的更新会解决这个问题…

%使用线性支持向量机分类器万博1manbetx
svmStruct = fitcsvm (X_train (:, (1: k)), Y_train);
sv = svmStruct.万博1manbetxSupportVectors;
gscatter (X_train (:, (1)), X_train (:, (2)), Y_train);抓住
情节(sv (: 1), sv(:, 2),‘ko’,‘MarkerSize’,10);推迟
C = predict(svmStruct, X_test(:,ranking(1:k)));
err_rate = sum(Y_test~= C)/P.TestSize;%错误分类率
conMat=混淆MAT(Y_测试,C);%混淆矩阵

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

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

V拉吉尼坎特

优秀作品。

弗兰克

好? ?

郑彭

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

上帝keven.

莉莉郭

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

Giorgio.

供参考。
新特刊《特征选择与深度学习》
本期特刊的主要焦点将是特征选择和深度学习,也就是深度学习模型如何融入特征选择和排名策略的问题。
详情请参阅提交网页(https://www.mdpi.com/journal/informatics/special_issues/FSMDL)

勒•Robelli

太棒了,非常感谢!

生动的郑

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

佩德罗博尔斯

佩德罗博尔斯

你好,乔治!这可能是一个愚蠢的问题……但是,在“cfs”函数中使用“scores”是什么意思?我如何访问这些值?代码不会在工作区中返回它们。

哈姆泽·加塞姆扎德

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

水晶杨

谢谢!!

Giorgio.

固定的谢谢

Giorgio.

我查一查。。很抱歉

尼古拉斯Blauch

嗨。我认为新版本包含了错误的infFS函数。演示失败是因为infFS给出了太多的参数。infFS。M说它来自4.0版本。

Giorgio.

新版本可用,请先编译解决方案。运行make。

百万桶Idrisi科技

失踪libsvm_classifier_spider

Giorgio.

这就跟你问声好!请参阅新版本6.1 ->增加了新的演示文件:如何为Inf-FS和ILFS选择最佳参数。

Giorgio.

你用了多少代币?注意,T > = 4

你好蔡华

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

Jinya苏

你好蔡华

你好,谢谢你的出色工作。我有个问题。当我在matlab2015b上运行这个工具箱在64位windows 8.1和8GB内存,我得到的错误'Out of memory'。我遵循了一些建议,如重置“Jave堆大小”,但它没有工作。我该怎么办?

ZhenHui太阳

对于matlab2018a
%svmstruct = svmtrain(x_train(:,排名(1:k)),y_train,'showplot',true);
% C = svmclassify(svmStruct,X_test(:,ranking(1:k)),'showplot',true);
svmClassifier = fitcsvm (X_train (:, (1: k)), Y_train);
[c,scores] =预测(svmclassifier,x_test(:,排名(1:k)));

埃里克舒尔茨

你好,

我在windows 10电脑上使用Matlab 2015a。我总是得到错误:“错误使用mex
没有找万博1manbetx到支持的编译器或SDK。的选项,请访问//www.tianjin-qmedu.com/万博1manbetxsupport/compilers/r2015a/win64.html.“有人能帮我吗?

Giorgio.

@dongyang!不幸的是,工具箱提供了一系列排名方法,您应该决定先验的子集。如果您想要一种为您提供套索方法的功能子集的方法,它们是用于通过将其权重减少为零的冗余功能,在此过程结束时,您可以选择其特征的子集系数是> 0.我希望有帮助!最好的事物。

东阳

你好乔治:
谢谢分享你的代码。我有一些问题,
我如何使用这个工具箱输出功能的子集,而不是功能的排序。

京华熊

尼古拉斯Blauch

你好乔治:
我试图在RFE期间以“实时”的方式对测试数据进行交叉验证。
我已经尝试设置a.test_on_the_fly = struct('loss','class_loss','data',test_dset);
其中test_dset = data(X_test,Y_test);

这会在训练中抛出一个错误:
未定义的函数或变量“组”。

rfe/training>的错误评估(第122行)
如果~isa(a.test_on_the_fly.result,'group'),a.test_on_the_fly.result=group;终止

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

谢谢,
尼克

Grzegorz Nowacki

Ioannis.

亲爱的乔治,

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

岳晓敏

嗨,乔治,

工具箱很棒。看起来rfe算法的排名总是1到N,不管我输入的数据是什么。我是不是漏掉了什么?排名应该是功能的重要性吗?

Giorgio Roffo.

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

omid eghbali

你好,乔治
谢谢分享你的代码。我有一些问题,
如何在matlab 2017a中导入这个toolbax ?

Chintan Shah.

使用mex时出错
没有找万博1manbetx到支持的编译器或SDK。的选项,请访问
//www.tianjin-qmedu.com/万博1manbetxsupport/compilers/R2014a/win64.

阿加瓦尼


谢谢你分享你的代码。这是我在编译时遇到的一个错误,你能帮我吗?
制作
+构建和安装
构建estmutualinfo.cpp的mex(dll)
使用“Microsoft Windows SDK 7.1 (c++)”构建。
墨西哥人成功完成。
构建estpabp .cpp的mex(dll)
使用“Microsoft Windows SDK 7.1 (c++)”构建。
墨西哥人成功完成。
构建libsvm_classifier_spider.cpp的mex(dll)
警告:转义字符'\m'无效。有关受支持的特殊字符,请参见'doc spr万博1manbetxintf'。
>在制造(第20行)
使用mex时出错
未知的文件扩展名“”。
make错误(第20行)
eval(['mex libsvm_classifier_spider.cpp svm.cpp-Icompiletools',sprintf(['compiletools',filesep,'mexarg.cpp']))

康纳·法伊

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

康纳·法伊

拉杰卜·穆克吉

Giorgio Roffo.

Giorgio Roffo.

这就跟你问声好!
实际上,这不是一个库问题,您丢失的文件位于:FSLib_v5.2_2017/lib/compiletools/mexarg.h
编译器找不到它,所以可以尝试将文件夹和子文件夹添加到该路径中,然后重新编译。
最好的事物,

Harsha Dudeja

这是运行make时的完整错误集。m文件
使用mex时出错
libsvm_分类器_spider.cpp
E:\FSLib\u v5.2\u 2017(1)\FSLib\u v5.2\u 2017\lib\libsvm\u分类器\u spider.cpp(11):致命
错误C1083:无法打开包含文件:'mexarg.h':没有这样的文件或目录

make错误(第20行)
eval(['mex libsvm_classifier_spider.cpp svm.cpp
-Icompiletools’,sprintf ([compiletools, filesep, ' mexarg.cpp ']))

Harsha Dudeja

特征选择方法:rfe
培训RFE(SVM内核线性)专长= 43 output_rank = 1 ...
在职培训1
训练SVM核线性....
未定义的函数或变量“libsvm\u分类器\u spider”。

svm/training中的错误(第225行)
[alpha,xsv,bias0] = libsvm_classifier_spider({'x',x},{'y',y},...

算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);

rfe/training错误(第36行)
[res,a.child]=训练(未训练,dat);

算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);

spider_wrapper错误(第55行)
[tr,a]=列车(a,dset);

rfe_rf错误(第16行)
排名=蜘蛛包装(列车特征、列车等级、numF、较低('rfe');
请帮助

Giorgio.

@shun:谢谢你的反馈。我修复了这个bug,可能是在之前的上传中引入的。对不起。
@Lilin:FSV是一种包装方法。对不起,您在哪里找到有关FSV和筛选器的参考资料?

避开张

嗨Giorgio,我有一个问题时使用了Inffs模式。在论文中,相关项是Corr = 1-Abs(Spearman(FI,FJ)),但在您的代码中,为什么它似乎是Corr = Spearman(FI,FJ)?

liliinChina

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

PRADOSH NAYAK

运行make.m发现此错误。那么怎么办呢?

使用mex时出错
没有找万博1manbetx到支持的编译器或SDK。的选项,请访问//www.tianjin-qmedu.com/万博1manbetxsupport/compilers/R2014a/win32.

make错误(第17行)
MEX([列表(i).name]);

说Pertuz

优秀的工作

将有关ODABAS YILDIRIM

嗨,Giorgio,谢谢分享你的代码。我有一些问题,
我有100个样本(84 train 16 test),每个样本有648个属性,所以我有100*648矩阵。我创建x_train(84*648), y_train(84*1), x_test(16*648), y_test(16*1)。
选择方法后,会出现一些错误。我粘贴命令窗口;

+特征选择方法:10
Training l0(svm kernel linear) feat=648 output_rank=1....
训练SVM核线性....
由于依赖性而删除了约束1

没有平等的约束…

错误使用+
矩阵维数必须一致。
四次解误差(第414行)
y=y+fd*dy;
svm/训练错误(第50行)
[α,偏见]= quadsolve(比释动能的(大小(比释动能,1),1),y ', 0, algo.C);
算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);
第10 /training错误(第30行)
[r,alg.child]=列车(alg.child,datTemp);
算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);
spider_wrapper错误(第55行)
[tr,a]=列车(a,dset);
专长选择错误(第205行)
排名= spider_wrapper(x_train,y_train,numf,dowllow(selection_method));
你对我有什么建议?

Giorgio.

这就跟你问声好!
为了编译工具箱,你只需要运行“make”。M ",从主文件夹。
请打开make.m文件并检查路径分隔符:addpath(genpath('./compiletools');
/在Linux操作系统下使用,如果你在MS Windows上运行代码,你可能需要用\比如:addpath(genpath('.\compiletools'));

从您的输出中可以看出,您安装了一个合适的C编译器。如果您仍然有问题,复制和粘贴错误,否则很难理解是什么问题。最好的祝愿

萨穆埃尔

你好,乔治,我和理查德有同样的问题。一开始我负责管理餐馆。-file并得到如下输出:
编译…
建筑与gcc。
墨西哥人成功完成。
建筑与gcc。
墨西哥人成功完成。
建筑与gcc。
墨西哥人成功完成。
使用“g++”构建。
墨西哥人成功完成。
编译完成。

在那之后,我想运行制造。m文件,但得到错误:未知的文件扩展名"。make错误(第20行)。
我做错了什么?先感谢您。

理查德Finlan

您好,此下载不会使用make.m生成。我需要做什么?未找到/缺少目录/lib/compiletools。运行make.m文件时,第20行出现错误。非常感谢。

Giorgio.

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

他范教授

你好乔治,
我如何解决这个问题(我正在使用ILFS)
赋值具有比非单例下标更多的非单例rhs维度

Suhani阿加瓦尔

Vinayak Swarnkar

Giorgio.

您好,排名(1)是最具辨别力的功能。排名(末尾)最差的功能。最好的

你好乔治,

我想知道在呼叫后哪些功能是如何排名的

[ranking, weights, subset] = ILFS(X_train, Y_train, 0);

排名(1)是“最具鉴别性”的特征还是排名(结束)?

提前谢谢

Giorgio.

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

你应该有这样的输出:

>> MEXALL.
编译…
建筑与gcc。
墨西哥人成功完成。
建筑与gcc。
墨西哥人成功完成。
建筑与gcc。
墨西哥人成功完成。
使用“g++”构建。
墨西哥人成功完成。
编译完成。

Suhani阿加瓦尔

使用internal.stats.parseArgs时出错(第42行)
参数个数错误。

pca错误(第170行)
[vAlgorithm、vCenter、向量学、vNumComponents、vRows、vWeights,。。。

在intrinsic_dim错误(第197行)
[mappedX, mapping] = pca(X, size(X, 2));

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

里斯Chappell

yap林

Giorgio.

根据我们在ICCV 2017“无限潜在特征选择:基于概率潜在图的排序方法”中的实验,我们的ILFS是最稳定、鲁棒的监督FS技术。
本文结果如下:https://goo.gl/WiDmu2
要执行多类FS,您总是可以使用1对所有策略。
让我们考虑我们有4节课。
我们可以通过设置类标签来获得代表每个类的最佳子集:
标签1到类1标签-1到类2,3,4
sub2)标签1至2类标签-1至1、3、4类
Sub3)标记为1至3级,标签-1至1,2,4
标签1到类别4,标签-1到类别2,3,4
然后我们可以提取最大公共子集(交1、2、3、4)。

Unnikrishnan P

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

穆罕默德阿尔霍士恩

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

>> fea,score] = mRMR(M,L,10) %其中M是X-train, L是Y-train,我想选择10个特征。
------------------------------------------------------------------------
在2017年8月13日星期日21:38:47检测到访问违规
------------------------------------------------------------------------
.
.
.

提前谢谢你!

阿兰战争

rabbasi

谢谢你的贡献,我有一个关于拉普拉斯分数的问题。当我使用你的代码的例子是包含在您的代码中,关于constructW函数它给了我一个警告:“警告:这个函数已经改变和度规不再被支持”的延续,它给了我一个错误在LaplacianScore(有限元分析,W)功能:万博1manbetx
“subscript指数必须是真正的正整数或逻辑。”。正如我所说,实现是在RAND数据上完成的,该数据是您的代码说明中的示例。如果你解释原因,我会感激。

维克多Calle

Giorgio.

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

[排名,w]=infFS(X_序列,Y_序列,alpha,sup,0);

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

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

排名前N的特征可能是对分类贡献最大的特征
最好的事物!

地中海Aymane Ahajjam

Julien,我用ReliefF算法解决了一个类似的问题,效果非常好!
祝你好运

朱利安

嗨,很抱歉问这个非常基础的问题。在二值分类任务中,这种方法可以用来识别哪些(视觉)特征对给定图像的分类贡献最大?谢谢。朱利安

Eliya苏丹

你好,
我在相同的数据上运行了两次代码却得到了不同的结果,这有意义吗?
我使用了mrmr和fisher方法。
谢谢!
eliya。

Giorgio.

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

Giorgio.

****抱歉"check if in your Y vector you have missing labels like[1 1 1 1 3 3 3 4 4 4 5 5 5 5] <-这里没有4,可能这会产生异常。"
我的意思是标签2缺少......在这样的情况下,您应该重新分配这样的标签:
[1 1 1 1 1 3 3 3 4 4 4 4 5 5 5 5]——> [1 1 1 1 1 1 1 2 2 2 2 3 3 3 4 4 4 4 4 4 4]
最好的

elahe afshari

嗨,亲爱的乔治·罗福

我已经使用svm-rfe(FSLIB)为两个类似的数据集(臭氧和臭氧2),但臭氧数据集正确运行和臭氧2数据集运行它不结束。

%函数SR = SVMRFEOzone (TrainData)
%%演示文件
fprintf(“\n特征选择工具箱v 4.0 2016-适用于Matlab\n”);

%从列表中选择一个特征选择方法
listFS ={‘InfFS’,‘ecf’,‘mrmr’,‘relieff’,‘mutinffs’,‘fsv’,‘拉普拉斯算子’,‘mcf’,‘rfe’,‘10’,‘雪’,‘udf’,‘llcfs’,cfs的};

[方法] = ReadInput(listfs);
selection_method=listFS{methodID};%挑选出来的
%包括依赖关系
目录(' / lib。');%的依赖性
AddPath('./方法');%FS方法

特征数量%
% numF = size(X_train,2);
vectorvote = 0 (72);
TrainData =负载(“ozone.mat”);
TrainData=TrainData.TrainData;

%训练数据的特征选择

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

X_train1 = TrainData(201:400一60);
Y_train1 = TrainData (201:400, 61);
ranking1 = spider_wrapper (X_train1 Y_train1 60,降低(rfe));
51:60 rankingD1 =排序(ranking1 (1));
rankingB1 =排序(ranking1 (1:50));
rankingB1 = rankingB (rankingB1 (:));
vectorvote (rankingB (rankingD1 (:))) = vectorvote (1, rankingB (rankingD1 (:))) + 8;
TrainData (:, rankingD1 (:)) = [];

% --------------------------------------------------------------
X_train2 = TrainData (401:600, 1:50);
Y_train2 = TrainData (401:600, 51);
排名2 = spider_wrapper(x_train2,y_train2,40,更低('rfe'));
41:50 rankingD2 =排序(ranking2 (1));
rankingB2 =排序(ranking2 (1, 1));
rankingB2 = rankingB1 (rankingB2 (:));
vectorvote (rankingB1 (rankingD2 (:))) = vectorvote (1, rankingB1 (rankingD2 (:))) + 7;
TrainData (:, rankingD2 (:)) = [];
%--------------------------------------------------------------
X_train3=列车数据(600:801,1:40);
Y_train3 = TrainData (600:801, 41);
ranking3 = spider_wrapper (X_train3 Y_train3 30,降低(rfe));
31:40 rankingD3 =排序(ranking3 (1));
rankingB3 =排序(ranking3 (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_系列4,Y_系列4,25,下部('rfe');
26:30 rankingD4 =排序(ranking4 (1));
rankingB4 =排序(ranking4 (1:25));
rankingB4 = rankingB3 (rankingB4 (:));
vectorvote (rankingB3 (rankingD4 (:))) = vectorvote (1, rankingB3 (rankingD4 (:))) + 5;
TrainData (:, rankingD4 (:)) = [];


TrainData1 =负载(“ozone2.mat”);
TrainData1 = TrainData1.xc11;

%训练数据的特征选择

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

X_train1 = TrainData1(201:400一60);
Y_train1 = TrainData1 (201:400, 61);
ranking1 = spider_wrapper (X_train1 Y_train1 60,降低(rfe));
51:60 rankingD1 =排序(ranking1 (1));
rankingB1 =排序(ranking1 (1:50));
rankingB1 = rankingB (rankingB1 (:));
vectorvote (rankingB (rankingD1 (:))) = vectorvote (1, rankingB (rankingD1 (:))) + 8;
TrainData (:, rankingD1 (:)) = [];

% --------------------------------------------------------------
X_train2 = TrainData1 (401:600, 1:50);
Y_train2=列车数据1(401:600,51);
排名2 = spider_wrapper(x_train2,y_train2,40,更低('rfe'));
41:50 rankingD2 =排序(ranking2 (1));
rankingB2 =排序(ranking2 (1, 1));
rankingB2 = rankingB1 (rankingB2 (:));
vectorvote (rankingB1 (rankingD2 (:))) = vectorvote (1, rankingB1 (rankingD2 (:))) + 7;
TrainData (:, rankingD2 (:)) = [];
%--------------------------------------------------------------
X_train3 = TrainData1 (600:801, 40);
Y_train3 = TrainData1 (600:801, 41);
ranking3 = spider_wrapper (X_train3 Y_train3 30,降低(rfe));
31:40 rankingD3 =排序(ranking3 (1));
rankingB3 =排序(ranking3 (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_系列4,Y_系列4,25,下部('rfe');
26:30 rankingD4 =排序(ranking4 (1));
rankingB4 =排序(ranking4 (1:25));
rankingB4 = rankingB3 (rankingB4 (:));
vectorvote (rankingB3 (rankingD4 (:))) = vectorvote (1, rankingB3 (rankingD4 (:))) + 5;
TrainData (:, rankingD4 (:)) = [];



卜拉希米迈赫迪

嗨,乔治!
非常感谢您提供这个工具箱!
我有一个关于fisher线性判别的特征选择的问题。在关于工具箱的文章中,您引用了Gu等人提出的广义特征评分,但工具箱似乎执行了Duda等人2012定义的“简单”fisher选择。对吗?

Giorgio.

这就跟你问声好!感谢您下载工具箱,某些技术可以为您提供功能的子集。但一般来说,他们只是执行排名步骤,在这种情况下,您可以决定选择先验的功能或使用任何形式的交叉验证来决定(粗略地)它们中有多少来维护。

ZaferCömert.

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

jae baak

忘记下面的评论吧。发现Matlab编译器不是唯一可用的。顺便说一下,这个工具箱很好用。

jae baak

想尝试这个,但我没有访问Matlab编译器。是否有预编译版本可用?(除了第一个评论中的死链接)谢谢!

佩德罗第24位

德文·沙利文

FS的伟大工具,有很好的文档和优秀的README文件,包含各种方法的详细信息和参考。

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

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

EDIT2:至少弄清楚了如何让费舍尔的多职业工作。对别人感兴趣:
1.将标签(Y)转换为nxm矩阵,其中m=类的数量,n=样本的数量(如Demo中值为-1或1)。
2.修改'spider_wrapper'第10行:a.method='classification';%可以是任意数字1-3,取决于您的方法偏好(参见FSLib_v4.2_2016/FSLib_v4.2_2016/FSLib_v4.2_2016/lib/@fisher/training的第60行。详情)
3.不要尝试使用支持向量机绘制结果,这对多类数据不起作用。选择功能后停止(Demo.m的第149行)。

Giorgio.

嗨Davide,路径的'\'和'/'与您的操作系统(Linux或Windows)有关,所以也许您需要根据它切换到另一个,您是受欢迎的:)

大卫。Nardone

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

Giorgio.

嗨,Davide,你确定你编译了解决方案吗?在使用工具箱之前,您应该运行make文件,它似乎是一个mex文件丢失了,还检查将FSLib文件夹及其子文件夹包含到路径中。

大卫。Nardone

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

未定义函数'libsvm_classifier_spider'用于类型为'cell'的输入参数。

svm/training中的错误(第225行)
[alpha,xsv,bias0] = libsvm_classifier_spider({'x',x},{'y',y},...

算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);

rfe/training错误(第36行)
[res,a.child]=训练(未训练,dat);

算法/列车错误(第103行)
(dat,寒冷)=培训(藻类,dat);

蜘蛛网包装中的错误(第12行)
[tr,a]=列车(a,dset);

你能建议我怎么解决吗?

Giorgio.

Hi David, info - fs是一个无监督的方法,但是在这个工具箱中,您可以找到该方法的两种变体。
function [ranking, WEIGHT] = infFS(X_train, Y_train, alpha, supervision, verbose)

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

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

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

大卫帕拉西奥斯

大家好,有一个关于infFS算法的问题。如果它是一个无监督的特征选择方法,为什么必须提供带有类标签的Y_train向量呢?

nVIDIApascal

YJXia

Helmie哈米德

日前杨

Afsoon

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

安德里亚

洛里潘特

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

大卫

Giorgio.

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

加布里埃尔Theberge

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

安德鲁斯Sobral

太好了!谢谢你!

Chuong Nguyen.

你好,非常感谢你来图书馆。我有一个问题。对于Fisher[6]方法,库是实现了Quanquan Gu等2012提出的广义Fisher Score(更复杂),还是仅仅实现了经典的Fisher Score。谢谢你!

弗兰克

黄海

gabriele tosadori

Giorgio.

Matlab释放兼容性
用R2017B创建
与任何版本兼容
平台的兼容性
窗户 马科斯 Linux

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!

FSLib_v7.0.1_2020_2

FSLib_v7.0.1_2020_2 / eval_metrics

fslib_v7.0.1_2020_2 / lib

FSLib_v7.0.1_2020_2 / lib / @algorithm

FSLib_v7.0.1_2020_2 / lib / @ data

FSLib_v7.0.1_2020_2/lib/@distance

FSLib_v7.0.1_2020_2 / lib / @fisher

FSLib_v7.0.1_2020_2/lib/@kernel

FSLib_v7.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_v7.0.1_2020_2/lib/drtoolbox/gui

FSLib_v7.0.1_2020_2 / lib / drtoolbox /技术

FSLib_v7.0.1_2020_2 / lib /文件

FSLib_v7.0.1_2020_2 /方法