图片缩略图

特性选择库

版本7.0.2020.3 (723 KB 乔治•
特征选择库(MATLAB工具箱)
4.8
56评级

233下载

更新2020年5月3日

查看许可协议

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

G. Roffo, 2017。学习排名和学习排名:论排名在模式识别应用中的作用。arXiv预打印arXiv:1706.05933。

引用作为

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

评论及评分(146

乔治•

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

乔治•

嗨brai,
从最初的实现开始,该文件就保留在库中。
我修复了一些问题,用一个新版本更新了代码。谢谢你找到了窃听器。
注意,PLSA + EM算法的实现基于以下代码:
https://github.com/lizhangzhan/plsa
https://github.com/lizhangzhan/plsa/blob/master/plsa.m
我可以继续讨论我们的邮件对话!

brai Cancela

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

Shinuk金

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

Zehua戴

谢谢你的工作。
我在使用这个工具箱时遇到了一些问题。
当我运行Demo时。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提供的补丁更新Demo(2018年12月26日)是在最近的Matlab上运行的必要条件。如果源代码可以更新就好了。

乔治•

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

Marc Youcef

嗨,我相信后面的工作是伟大的,但我真的面临很多问题得到test_toolbox。M才能正常运行。我得到多个错误,像:
------------
位置2的索引超过数组边界(不能超过3)。
警告:使用CorrDim进行内在维度估计失败!
-------------
它着眼于某一点:
\MATLAB\Add-Ons\Toolboxes\功能选择库\ fslib_v6.2.1 1_2018\lib\drtoolbox\techniques\ sddp .exe
请问我怎么才能买到这个?

除此之外,我还试着运行drgui。m和使用散点绘图时,我得到了num2str错误在第112行散点。M它试图使num2str(hs,'%20.20f')和hs是一个句柄。
我已经非常感谢你了。

高科技人

@Giorgio非常感谢
我有个问题,我不能理解
在我的数据上运行Demo文件(使用FSV方法或fisher),它给了我85%的准确性..然后我试着运行Demo_InfFs文件,但它给了我57%的准确率!!我的错在哪里?
谢谢问候;

王濛

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

力平黄

@Giorgio谢谢你的帮助!

乔治•

如果你的数据是非数字的
标签={'蓝','绿','红'};
有些函数不起作用。你需要的数字数据如下:
标签=(1、2、3)

乔治•

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

力平黄

我有以下错误,谁能帮助这
未定义函数'isnan'用于'标称'类型的输入参数。

乔治•

@samar ragab谢谢你的帮助!

@wenyan曹
注意:你必须有“visual studio”和“x86_64-w64-mingw32”
只需下载这个库和这个库“大型线性分类库”,你可以在这里下载:https://www.csie.ntu.edu.tw/~cjlin/liblinear/
然后运行make。M文件。如果效果很好,那就可以了。另一方面,您应该遵循自述文件才能运行它。
最好的祝愿

闻堰曹

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

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

Ananya Dutta

如何找出哪两个特征得到了第1和第2个,也就是哪个特征被选中了。

Ananya Dutta

正在获取mex文件错误。不知道该怎么办

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

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

你好,乔治,你真的做得很好。我一直在寻找一个机会的代码像这样使用。我提取过特征,当我应用支持向量机时,得分很低,我相信这可以帮助提高提取特征的性能。我对代码有问题。我试图使用make代码首先构建,我有这个错误。已经添加了所有必要的功能到垃圾箱。

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

make123forfeatuselection中的错误(第5行)
cd(“自由”);

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

七张

乔治•

你好!
@Muhammed:可能sigma_ij和corr_ij已经颠倒了,如果你设置alpha=05,这两个公式是一样的,就不会造成这么多问题。
文中的0.2,在本例中对应于=0.8。如果你在训练集中使用交叉验证来找到最好的alpha,就不会有任何问题。我试着把它修好,把它和纸对齐。
@Samar: Demo_InfFS只包含交叉验证的结构,在那里你可以学到最好的alpha参数。你不能像现在这样经营它,但它就是这样。试试这个演示。M可以轻松地运行代码。

你好,我不太明白A矩阵的计算方法,它和论文中提出的方法不一样。
论文指出
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;

Demo_InfFS中的错误(第41行)
cv = train(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脚本,因为当我运行它时,我得到以下错误:
"未定义用于'double'类型输入参数的'train'函数。
Demo_InfFS中的错误(第41行)
cv = train(Y_train, X_train_, cmd);"
我在Windows 10上使用Matlab2016a。
有什么建议吗?
谢谢
埃琳娜

陈化

乔治•

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

布莱德

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

使用线性支持向量机分类器万博1manbetx
svmStruct = fitcsvm(X_train(:,ranking(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(:,rank (1:k)));
err_rate = sum(Y_test~= C)/P.TestSize;错误分类率
conMat = confusmat (Y_test,C);%混淆矩阵

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

我在文件交换中发现的最好的完美的工具箱之一!出色的工作!荣誉!

V RAJINIKANTH

优秀的工作。

frankjk

不错的

郑彭

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

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

F.Y.I.
新特刊《特征选择遇上深度学习》
本期特刊的主要焦点将是特征选择和深度学习,即深度学习模型如何被注入特征选择和排序策略的问题。
详情请参阅提交网页(https://www.mdpi.com/journal/informatics/special_issues/FSMDL

太棒了,非常感谢!

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

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

谢谢楼主分享!
有些方法使用"nClass"变量来选择类的数量。你工具箱里的其他方法呢?你知道它们是否适用于多类范式吗?
另外,如果您能提供实现方法的引用,那就太好了!

谢谢!!

固定的。谢谢。

我“l检查. .对不起

嗨。我相信新版本包含错误的infFS功能。演示失败,因为infFS给出了太多参数。infFS。M说它来自4.0版本。

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

失踪libsvm_classifier_spider

乔治•

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

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

Hello-Caihua

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

Jinya苏

Hello-Caihua

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

对于matlab2018a
% svmStruct = svmtrain(X_train(:,ranking(1:k)),Y_train,'showplot',true);
% C = svmStruct (X_test(:,rank (1:k)),'showplot',true);
svmClassifier = fitcsvm(X_train(:,ranking(1:k)),Y_train);
[C, scores] = predict(svmClassifier, X_test(:,rank (1:k)));

你好,

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

乔治•

嗨@dongyang !不幸的是,工具箱提供了一组排序方法,您应该预先确定您的子集的基数。如果你想要一个提供特征子集的方法,你可以使用Lasso方法,它们是用来去除冗余特征的估计器,通过将它们的权重降为零,在这个过程的最后,你可以选择系数为> 0的特征子集。希望对大家有所帮助!最好的

东阳市

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

京华熊

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

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

rfe/training>评估中的错误(第122行)
如果~ isa (a.test_on_the_fly。Result, 'group'), a.t test_on_the_fly。结果=组;结束

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

谢谢,
尼克

Ioannis

亲爱的乔治,

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

小民曰

嗨,乔治,

这个工具箱很棒。似乎无论我输入什么数据,rfe算法的排序总是从1到N。我错过什么了吗?是否应该根据功能的重要性来排序?

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

omid eghbali

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

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


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

谢谢你Giorgio为这个难以置信的有用和容易使用的库…

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

这是运行make时的完整错误集。m文件
使用mex出错
libsvm_classifier_spider.cpp
E:\FSLib_v5.2_2017 (1)\FSLib_v5.2_2017\lib\libsvm_classifier_spider.cpp(11):致命的
无法打开包含文件:'mexarg.h':没有这样的文件或目录

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

特征选择方法:rfe
训练rfe(支持向量机核线性)feat=43 output_rank=1…
while 1中的训练
训练支持向量机核线性....
未定义函数或变量'libsvm_classifier_spider'。

支持向量机/训练中的错误(第225行)
[α,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, dset);

rfe_rf中的错误(第16行)
rank = spider_wrapper(TrainFeatures,TrainClass,numF, lower('rfe'));
请帮助

乔治•

谢谢你的反馈。我修复了这个bug,可能在之前的上传中介绍过。很抱歉。
@liliin: FSV是一个包装方法。对不起,你在哪里找到关于FSV和过滤器的参考文献?

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

liliinChina

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

这个错误是通过运行“make.m”发现的。那怎么办呢?

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

make中的错误(第17行)
墨西哥人([列表(我). name]);

优秀的工作

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

+特征选择方法:l0
训练l0(支持向量机核线性)feat=648 output_rank=1....
训练支持向量机核线性....
由于依赖性,约束1被移除

没有平等约束…

使用+错误
矩阵维数必须一致。
quadsolve中的错误(第414行)
Y = Y +fd*dy;
支持向量机/训练中的错误(第50行)
[alpha,bias] = quadsolve(KerMa,-ones(size(KerMa,1),1),y',0,算法. c);
算法/训练错误(第103行)
(dat,寒冷)=培训(藻类,dat);
l0/training中的错误(第30行)
[r, alg.child] =火车(alg.child datTemp);
算法/训练错误(第103行)
(dat,寒冷)=培训(藻类,dat);
spider_wrapper中的错误(第55行)
(tr) =火车(a, dset);
feat_selec中的错误(第205行)
排序= spider_wrapper(X_train,Y_train,numF,lower(selection_method));
你有什么建议吗?

乔治•

这就跟你问声好!
为了编译工具箱,您只需要运行“make。M”从主文件夹。
请打开包装。m文件and check the paths separator: addpath(genpath('./compiletools'));
/在Linux操作系统下使用,如果你在MS Windows上运行代码,你可能需要用\替换它,例如:addpath(genpath('.\compiletools'));

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

你好,乔治,我和理查德有同样的问题。一开始我跑墨西哥。-file并得到以下输出:
编译…
用'gcc'构建。
MEX成功完成。
用'gcc'构建。
MEX成功完成。
用'gcc'构建。
MEX成功完成。
用“g++”构建。
MEX成功完成。
编译完成。

之后,我想运行make。m文件,但得到错误:未知的文件扩展名”。make中的错误(第20行)。
我做错了什么?先谢谢你了。

你好,这个下载不能使用make.m构建。我需要做什么?目录/lib/compiletools未找到/丢失。运行make时,第20行出现错误。m文件。谢谢你!

乔治•

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

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

你好,排名(1)是最具鉴别力的特征。排名(结束)最糟糕的功能。最好的

你好乔治,

我想知道调用后特征的排序方向是怎样的

[排序,权重,子集]= ILFS(X_train, Y_train, 0);

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

提前谢谢

乔治•

你好,
请确保您已正确编译工具箱:
./FSLib_v5.0_2017/lib/drtoolbox——> run mexall.m . in ./FSLib_v5.0_2017/lib/drtoolbox

你应该有这样的输出:

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

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

pca错误(第170行)
[valgalgorithm, vcentric, vEconomy, vNumComponents, vRows,vWeights,…

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

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

yap林

乔治•

根据我们在ICCV 2017“无限潜在特征选择:基于概率潜在图的排序方法”上的实验,我们的ILFS结果是最稳定、鲁棒的监督FS技术。
在这里查看论文结果:https://goo.gl/WiDmu2
要执行多类FS,您总是可以使用1对所有策略。
假设我们有4个类。
通过相应地设置类标签,我们可以获得代表每个类的最佳子集:
标签1到1班标签-1到2、3、4班
Sub2)标签1到类2标签-1到类1,3,4
子3)标签1到类别3,标签-1到1,2,4
子4)将1标记到4类,将-1标记到2、3、4类
之后,我们可以提取最大公共子集(相交sub1 sub2 sub3 sub4)。

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

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

>> fea,score] = mRMR(M,L,10) %其中M是x线列车,L是y线列车,我想选择10个特征。
------------------------------------------------------------------------
在2017年8月13日太阳21:38:47检测到访问违规
------------------------------------------------------------------------


提前谢谢!

rabbasi

谢谢你的贡献,我有一个关于LaplacianScore的问题。当我使用您的代码的例子,包括在您的代码,关于constructW函数它给我一个警告:“警告:此函数已被更改和度量不再被支持”,在继续,它给我一个错误在LaplacianScore(fea,W)函数:万博1manbetx
下标索引必须是实数正整数或符合逻辑的。正如我所说,实现是在rand数据上完成的,这是你们的代码解释中的一个例子。如果你能解释一下原因,我会很感激。

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

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

X_train是一个矩阵,标准的“设计矩阵”(参见Bishop, 2006)每一行是一个样本,每列是一个特征。
Y_train是一个标签列向量,如果您有两个类,这个向量将看起来像这样:[1,1,1,-1,-1,1,-1,等等。]]“
Alpha是混合参数,你可以设置=0.9通常工作得很好。

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

前N个特性可能是对分类做出最好贡献的
最好!

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

朱利安

嗨,很抱歉问了这么基本的问题。在二值分类任务中,这种方法可以用来识别哪些(视觉)特征对给定图像的分类最有帮助吗?谢谢。朱利安

Eliya苏丹

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

乔治•

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

乔治•

****抱歉"检查你的Y向量中是否缺少标签如[1 1 1 1 1 3 3 3 3 3 4 4 4 4 5 5 5 5]<-这里没有4,也许这会产生一个异常"
我是说标签2不见了…在这种情况下,你应该像这样重新分配标签:
[1 1 1 1 1 3 3 3 4 4 4 4 4 5 5 5 5 5]—> [1 1 1 1 1 2 2 2 2 3 3 3 3 3 4 4 4 4 4]
最好的

你好,亲爱的Giorgio Roffo

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

%函数SR=SVMRFEOzone(训练数据)
%%演示文件
fprintf('\nFEATURE SELECTION TOOLBOX v 4.0 2016 - For Matlab \n');

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

[methodID] = readInput(listFS);
selection_method = listFS{methodID};%选择
%包含依赖项
目录(' / lib。');%的依赖性
目录(' /方法。');% 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);
rank = spider_wrapper(X_train,Y_train,60,lower('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,lower('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);
ranking2 = spider_wrapper(X_train2,Y_train2,40,lower('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 = TrainData (600:801, 40);
Y_train3 = TrainData (600:801, 41);
ranking3 = spider_wrapper(X_train3,Y_train3,30,lower('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 = TrainData (802:1000, 1:30);
Y_train4 = TrainData (802:1000 31);
ranking4 = spider_wrapper(X_train4,Y_train4,25,lower('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_train = TrainData1 (1:201, 73);
rank = spider_wrapper(X_train,Y_train,60,lower('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,lower('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 = TrainData1 (401:600, 51);
ranking2 = spider_wrapper(X_train2,Y_train2,40,lower('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,lower('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 = TrainData1 (802:1000 31);
ranking4 = spider_wrapper(X_train4,Y_train4,25,lower('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等人定义的“简单”fisher选择。2012。对吗?

乔治•

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

Zafer COMERT

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

jae baak

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

jae baak

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

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

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

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

EDIT2:找到了让fisher至少多职业工作的方法。其他感兴趣的:
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行。M查询详情)
3.不要尝试使用支持向量机绘制结果,这对多类数据不起作用。在特性选择之后停止(Demo.m的第149行)。

乔治•

嗨,Davide,路径的'\'和'/'与你的操作系统(Linux或Windows)相关,所以也许你需要切换到另一个基于它的,不客气:)

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

乔治•

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

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

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

支持向量机/训练中的错误(第225行)
[α,xSV, bias0] = libsvm_classifier_spider ({X, X}, {Y, Y},…

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

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

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

spider_wrapper中的错误(第12行)
(tr) =火车(a, dset);

你能建议我怎么解决吗?

乔治•

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

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

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

谢谢你的问题,
希望这能有所帮助!

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

YJXia

日前杨

Afsoon

这个工具箱在多类数据上工作吗?我有1320个特征和3个类的数据,我需要特征选择阶段。但是这个工具箱不能用于我的数据。

安德里亚

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

大卫

乔治•

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

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

太好了!谢谢你!

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

frankjk

黄海

更新

7.0.2020.3

拼写错误

7.0.2020.2

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

7.0.2020.1

根据Brais Cancela的评论,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]董继玲女士
[2] InfFS
[3] ecf
[4] mrmr
[5] relieff
[6] mutinffs
[7] fsv
[8]拉普拉斯算子
[9] mcf
[10] rfe
[11] L0
[12]费舍尔
[13] udf
[14] llcfs
[15]慢性疲劳综合症
[16] fsasl
[17] dgufs
[18] ufsol
[19]套索

6.1.2018.0

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

6.0.2018.0

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

MATLAB版本兼容性
使用R2017b创建
与任何版本兼容
平台的兼容性
窗户 macOS Linux

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 /方法