fscnca
使用邻域成分分析进行特征选择分类
描述
例子
利用NCA检测数据中的相关特征进行分类
生成玩具数据,其中响应变量依赖于第3、第9和第15个预测因子。
rng (0,“旋风”);%用于再现性N = 100;X = rand(N,20);y = -ones(N,1);y(X(:,3).*X(:,9)./X(:,15) < 0.4) = 1;
拟合邻域成分分析模型进行分类。
mdl = fscnca(X,y,“规划求解”,“sgd”,“详细”1);
o调整初始学习率:NumTuningIterations = 20,TuningSubsetSize = 100 |===============================================| | | |调子集学习| | ITER | |娱乐价值率 | |===============================================| | 1 | -3.755936 e-01 e-01 | 2.000000 | | 2 | -3.950971 e-01 e-01 | 4.000000 | | 3 | -4.311848 e-01 e-01 | 8.000000 | | 4 | -4.903195 e-01 | 1.600000 e + 00 | | 5 | -5.630190 e-01 | 3.200000 e + 00 | | 6 | -6.166993 e-01 | 6.400000 e + 00 | | 7 | -6.255669 e-01 | 1.280000 e + 01 | | 8 | -6.255669 e-01 | 1.280000 e + 01 | | |e-01 -6.255669 | 1.280000 e + 01 | | 10 | -6.255669 e-01 | 1.280000 e + 01 | | 11 | -6.255669 e-01 | 1.280000 e + 01 | | 12 | -6.255669 e-01 | 1.280000 e + 01 | | 13 | -6.255669 e-01 | 1.280000 e + 01 | | 14 | -6.279210 e-01 | 2.560000 e + 01 | | 15 | -6.279210 e-01 | 2.560000 e + 01 | | 16 | -6.279210 e-01 | 2.560000 e + 01 | | 17 | -6.279210 e-01 | 2.560000 e + 01 | | | 18 -6.279210 e-01 | 2.560000 e + 01 | | e-01 19 | -6.279210 | 2.560000 e + 01 | | 20 e-01 | -6.279210 | 2.560000 e + 01 | o解决= SGD MiniBatchSize = 10,PassLimit = 5 |==========================================================================================| | 通过| ITER | AVG MINIBATCH | AVG MINIBATCH |规范一步学习| | | | | |娱乐价值规范研究生| |率 | |==========================================================================================| | 0 | 9 e-01 | -5.658450 | 4.492407 e-02 e-01 | 9.290605 | 2.560000 e + 01 | | 1 | 19 e-01 | -6.131382 | 4.923625 e-02 e-01 | 7.421541 | 1.280000 e + 01 | | 2 | 29 e-01 | -6.225056 | 3.738784 e-02 |3.277588e-01 | 8.533333e+00 | | 3 | 39 | -6.233366e-01 | 4.947901e-02 | 5.431133e-01 | 6.400000e+00 | | 4 | 49 | -6.238576e-01 | 3.445763e-02 | 2.946188e-01 | 5.120000e+00 | final step的相对两个norm = 2.946e-01, TolX = 1.000e-06 EXIT: Iteration or pass limit reached。
绘制选定的特征图。不相关特征的权重应该接近于零。
图()图(mdl。FeatureWeights,“罗”网格)在包含(“功能指数”) ylabel (“功能重量”)
fscnca
正确检测相关特征。
识别相关特征进行分类
加载样例数据
负载ovariancancer;谁
名称大小字节类属性grp 216x1 25056 cell obs 216x4000 3456000 single
本例使用使用WCX2蛋白阵列生成的高分辨率卵巢癌数据集。经过一些预处理步骤后,数据集有两个变量:奥林匹克广播服务公司
而且grp
.的奥林匹克广播服务公司
变量由216个观测值和4000个特征组成。中的每个元素grp
的对应行定义所属的组奥林匹克广播服务公司
属于。
将数据分为训练集和测试集
使用cvpartition
将数据分为大小为160的训练集和大小为56的测试集。训练集和测试集都有大致相同的组比例grp
.
rng (1);%用于再现性CVP = cvpartition(grp,“坚持”56)
cvp =保留交叉验证分区NumObservations: 216 NumTestSets: 1 TrainSize: 160 TestSize: 56
Xtrain = obs(cvp.training,:);Ytrain = grp(cvp.training,:);Xtest = obs(cvp.test,:);Ytest = grp(cvp.test,:);
确定是否有必要进行特征选择
计算泛化误差不拟合。
nca = fscnca(Xtrain,ytrain,“FitMethod”,“没有”);L =损失(nca,Xtest,ytest)
L = 0.0893
该选项使用中提供的初始特征权重(在本例中为默认特征权重)计算邻域成分分析(NCA)特征选择模型的泛化误差fscnca
.
拟合无正则化参数的NCA (Lambda = 0)
nca = fscnca(Xtrain,ytrain,“FitMethod”,“准确”,“λ”0,...“规划求解”,“sgd”,“标准化”,真正的);L =损失(nca,Xtest,ytest)
L = 0.0714
损失值的改善表明特征选择是一个好主意。调优 价值通常会改善结果。
使用五倍交叉验证优化NCA的正则化参数
调优 意味着找到 产生最小分类损失的值。调优 使用交叉验证:
1.将训练数据划分为5个折叠,并提取验证(测试)集的数量。对于每一次折叠,cvpartition
将五分之四的数据分配为训练集,五分之一的数据分配为测试集。
CVP = cvpartition(ytrain,“kfold”5);numvalidsets = cvp.NumTestSets;
分配 值并创建一个数组来存储损失函数值。
N = length(ytrain);Lambdavals = linspace(0,20,20)/n;Lossvals = 0(长度(lambdavals),numvalidsets);
2.训练每一个的NCA模型 值,在每个折叠中使用训练集。
3.使用NCA模型计算折叠中相应测试集的分类损失。记录损失值。
4.重复这个过程的所有折叠和所有 值。
为I = 1:长度(lambda)为k = 1:numvalidsets X = Xtrain(cvp.training(k),:);Y = ytrain(cvp.training(k),:);Xvalid = Xtrain(cvp.test(k),:);Yvalid = ytrain(cvp.test(k),:);nca = fscnca(X,y,“FitMethod”,“准确”,...“规划求解”,“sgd”,“λ”lambdavals(我),...“IterationLimit”30岁的“GradientTolerance”1的军医,...“标准化”,真正的);lossvals(i,k) = loss(nca,Xvalid,yvalid,“LossFunction”,“classiferror”);结束结束
计算从每个折叠中获得的平均损失 价值。
Meanloss = mean(lossvals,2);
画出平均损失值与 值。
图()图(lambdavals meanloss,“ro - - - - - -”)包含(“λ”) ylabel (“损失(MSE)”网格)在
找出与最小平均损失对应的最佳lambda值。
[~,idx] = min(meanloss)查找索引
Idx = 2
Bestlambda = lambdavals(idx)找到最好的lambda值
Bestlambda = 0.0066
最佳损失=平均损失(idx)
Bestloss = 0.0313
在所有数据上使用最佳拟合nca模型 然后画出特征权值
使用解算器lbfgs并标准化预测值。
nca = fscnca(Xtrain,ytrain,“FitMethod”,“准确”,“规划求解”,“sgd”,...“λ”bestlambda,“标准化”,真的,“详细”1);
o调整初始学习率:NumTuningIterations = 20,TuningSubsetSize = 100 |===============================================| | | |调子集学习| | ITER | |娱乐价值率 | |===============================================| | 1 e + 01 | 2.403497 | 2.000000 e-01 | | 2 | 2.275050 e + 01 | 4.000000 e-01 | | 3 | 2.036845 e + 01 | 8.000000 e-01 | | 4 | 1.627647 e + 01 | 1.600000 e + 00 | | 5 | 1.023512 e + 01 | 3.200000 e + 00 | | 6 | 3.864283 e + 6.400000 e + 00 00 | | | 7 e-01 | 4.743816 | 1.280000 e + 01 | | 8 | -7.260138 e-01 | 2.560000 e + 01 | | 9 | -7.260138 e-01 |e-01 10 2.560000 e + 01 | | | -7.260138 | 2.560000 e + 01 | | 11 | -7.260138 e-01 | 2.560000 e + 01 | | 12 | -7.260138 e-01 | 2.560000 e + 01 | | 13 | -7.260138 e-01 | 2.560000 e + 01 | | 14 | -7.260138 e-01 | 2.560000 e + 01 | | 15 | -7.260138 e-01 | 2.560000 e + 01 | | 16 | -7.260138 e-01 | 2.560000 e + 01 | | 17 | -7.260138 e-01 | 2.560000 e + 01 | | 18 e-01 | -7.260138 | 2.560000 e + 01 | | e-01 19 | -7.260138 | 2.560000 e + 01 | | 20 e-01 | -7.260138 | 2.560000 e + 01 | o解决= SGD MiniBatchSize = 10,PassLimit = 5 |==========================================================================================| | 通过| ITER | AVG MINIBATCH | AVG MINIBATCH |规范一步学习| | | | | |娱乐价值规范研究生| |率 | |==========================================================================================| | 0 | 9 e + 00 | 4.016078 | 2.835465 e-02 e + 00 | 5.395984 | 2.560000 e + 01 | | 1 | 19 e-01 | -6.726156 | 6.111354 e-02 e-01 | 5.021138 | 1.280000 e + 01 | | 1 | 29 e-01 | -8.316555 | 4.024186 e-02 |1.196031 e + 00 | 1.280000 e + 01 | | 2 | 39 e-01 | -8.838656 | 2.333416 e-02 e-01 | 1.225834 | 8.533333 e + 00 | | 3 | 49 e-01 | -8.669034 | 3.413162 e-02 e-01 | 3.421902 | 6.400000 e + 00 | | 3 | 59 e-01 | -8.906936 | 1.946295 e-02 e-01 | 2.232511 | 6.400000 e + 00 | | 4 | 69 | -8.778630 e-01 e-02 | 3.561290 | 3.290645 e-01 | 5.120000 e + 00 | | 4 | 79 | -8.857135 e-01 e-02 | 2.516638 | 3.902979 e-01 | 5.120000 e + 00 |最后一步= 3.903的两个规范e-01相对最后一步= 6.171 e 03的两个标准,TolX = 1.000e-06 EXIT:达到迭代或通过限制。
绘制特征权重。
图()(nca情节。FeatureWeights,“罗”)包含(“功能指数”) ylabel (“功能重量”网格)在
使用特征权重和相对阈值选择特征。
Tol = 0.02;Selidx = find(nca。FeatureWeights> tol*max(1,max(nca.FeatureWeights)))
selidx =72×1565 611 654 681 737 743 744 750 754 839
使用测试集计算分类损失。
L =损失(nca,Xtest,ytest)
L = 0.0179
利用选定的特征对观测数据进行分类
从训练数据中提取出特征权重大于0的特征。
features = Xtrain(:,selidx);
将使用所选特征的金宝app支持向量机分类器应用于缩减的训练集。
svmMdl = fitcsvm(特征,ytrain);
评估训练分类器在未用于选择特征的测试数据上的准确性。
L = loss(svmMdl,Xtest(:,selidx),ytest)
L =单0
输入参数
X
- - - - - -预测变量值
n——- - - - - -p矩阵
预测变量值,指定为n——- - - - - -p矩阵,n观察的次数和p是预测变量的数量。
数据类型:单
|双
Y
- - - - - -类标签
分类向量|逻辑向量|数值向量|字符串数组|长度字符向量的单元格数组n|字符矩阵n行
类标签,指定为类别向量、逻辑向量、数字向量、字符串数组、长度字符向量的单元格数组n,或字符矩阵与n行,n是观测的数量。元素我或行我的Y
类标签是否对应于行我的X
(观察我).
数据类型:单
|双
|逻辑
|字符
|字符串
|细胞
|分类
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名称-值参数必须出现在其他参数之后,但对的顺序无关紧要。
在R2021a之前,使用逗号分隔每个名称和值,并将其括起来的名字
在报价。
例子:“规划求解”,“sgd”、“重量”,0.0003 W,“λ”
指定解算器为随机梯度下降,观测权重为向量中的值W
,并将正则化参数设置为0.0003。
FitMethod
- - - - - -模型拟合方法
“准确”
(默认)|“没有”
|“平均”
拟合模型的方法,指定为逗号分隔的对,由“FitMethod”
和以下其中之一:
“准确”
-使用所有数据进行拟合。“没有”
-不合身。使用此选项可使用调用fscnca时提供的初始特征权重来评估NCA模型的泛化错误。“平均”
-将数据划分为多个分区(子集),使用确切的
方法,并返回特征权重的平均值。属性指定分区的数量NumPartitions
名称-值对参数。
例子:“FitMethod”、“没有”
NumPartitions
- - - - - -分区数
马克斯(2分钟(10,n))
(默认)|2和n
用于分割数据的分区数“FitMethod”、“平均”
选项,指定为逗号分隔的对,由“NumPartitions”
和一个介于2和之间的整数值n,在那里n是观测的数量。
例子:“NumPartitions”,15
数据类型:双
|单
λ
- - - - - -正则化参数
1 /n(默认)|负的标量
正则化参数以防止过拟合,指定为由逗号分隔的对组成“λ”
一个非负标量。
作为观察的数量n增加,过拟合的机会减少,所需的正则化量也减少。看到识别相关特征进行分类而且调整正则化参数,使用NCA进行分类了解如何调优正则化参数。
例子:“λ”,0.002
数据类型:双
|单
LengthScale
- - - - - -核的宽度
1
(默认)|正实标量
内核的宽度,指定为逗号分隔的对,由“LengthScale”
和一个正的实标量。
当所有预测器都在同一尺度上时,长度尺度值1是合理的。如果预测器在X
是非常不同的大小,然后考虑标准化预测值使用“标准化”,真的
和设置“LengthScale”,1
.
例子:“LengthScale”,1.5
数据类型:双
|单
InitialFeatureWeights
- - - - - -初始特征权重
的(p, 1)
(默认)|p-by-1向量的实正标量
初始特征权重,由逗号分隔的对组成“InitialFeatureWeights”
和一个p-by-1向量的实正标量,其中p是训练数据中预测器的数量。
优化特征权值的正则化目标函数是非凸的。因此,使用不同的初始特征权重可以得到不同的结果。将所有初始特征权重设置为1通常效果很好,但在某些情况下,随机初始化使用兰特(p, 1)
能给出更好的质量解决方案。金宝搏官方网站
数据类型:双
|单
权重
- - - - - -观察权重
n-乘1的1s向量(默认)|n-by-1向量的实正标量
观察权重,由逗号分隔的对组成“ObservationWeights”
和一个n-by-1向量的实正标量。使用观测权重来指定某些观测值比其他观测值更重要。默认权重赋予所有观察值同等重要。
数据类型:双
|单
之前
- - - - - -每个类的先验概率
“经验”
(默认)|“统一”
|结构
每个类的先验概率,由逗号分隔的对组成“之前”
和以下其中之一:
“经验”
- - - - - -fscnca
从类频率中获取先验类概率。“统一”
- - - - - -fscnca
设置所有类概率相等。结构,包含两个字段:
ClassProbs
-职业概率向量。如果这些数值的总和大于1,fsnca
使它们加起来等于1。一会
中类概率对应的类名ClassProbs
.
例子:“前”、“制服”
标准化
- - - - - -用于标准化预测器数据的指标
假
(默认)|真正的
详细的
- - - - - -详细级别指示器
0(默认)|1|> 1
收敛摘要显示的详细级别指示器,指定为由逗号分隔的对组成“详细”
和以下其中之一:
0 -没有收敛摘要
1 -收敛总结,包括梯度范数和目标函数值
> 1 -更多的收敛信息,取决于拟合算法
当使用
“minibatch-lbfgs”
求解器和详细级别> 1,收敛信息包括迭代日志从中间小批量LBFGS拟合。
例子:“详细”,1
数据类型:双
|单
解算器
- - - - - -解算器类型
“lbfgs”
|“sgd”
|“minibatch-lbfgs”
用于估计特征权重的求解器类型,指定为逗号分隔的对,由“规划求解”
和以下其中之一:
“lbfgs”
-有限内存Broyden-Fletcher-Goldfarb-Shanno (LBFGS)算法“sgd”
-随机梯度下降(SGD)算法“minibatch-lbfgs”
随机梯度下降与LBFGS算法应用于小批量
默认是“lbfgs”
为n≤1000,且“sgd”
为n> 1000。
例子:“规划求解”、“minibatch-lbfgs”
LossFunction
- - - - - -损失函数
“classiferror”
(默认)|函数处理
损失函数,指定为逗号分隔的对,由“LossFunction”
下面是其中之一。
“classiferror”
-分类错误@
-自定义丢失函数句柄。损失函数是这样的。lossfun
函数L = lossfun(Yu,Yv)损失百分比计算...
余
是一个u-by-1向量和青年志愿
是一个v1的向量。l
是一个u——- - - - - -v矩阵的损失值L (i, j)
损失的价值是什么Yu(我)
而且青年志愿(j)
.
最小化的目标函数包括损失函数l(y我,yj)如下:
在哪里w是特征权向量,n是观察数,和p是预测变量的数量。pij概率是xj参考点是什么x我.详细信息请参见分类的NCA特征选择.
例子:LossFunction, @lossfun
CacheSize
- - - - - -内存大小
1000 mb
(默认)|整数
内存大小(以MB为单位),用于目标函数和梯度计算,指定为逗号分隔的对,由“CacheSize”
一个整数。
例子:“CacheSize”,1500 mb
数据类型:双
|单
HessianHistorySize
- - - - - -黑森近似的历史缓冲区大小
15
(默认)|正整数
的Hessian近似的历史缓冲区大小“lbfgs”
求解器,指定为逗号分隔的对,由“HessianHistorySize”
一个正整数。在每次迭代中,函数使用最新的HessianHistorySize
迭代来建立逆黑森的近似。
例子:“HessianHistorySize”,20
数据类型:双
|单
InitialStepSize
- - - - - -初始步长
“汽车”
(默认)|正实标量
的初始步长“lbfgs”
求解器,指定为逗号分隔的对,由“InitialStepSize”
和一个正的实标量。缺省情况下,该函数自动确定初始步长。
数据类型:双
|单
LineSearchMethod
- - - - - -直线搜索法
“weakwolfe”
(默认)|“strongwolfe”
|“回溯”
行搜索方法,指定为由逗号分隔的对组成“LineSearchMethod”
和以下其中之一:
“weakwolfe”
-弱沃尔夫线搜索“strongwolfe”
-强沃尔夫线搜索“回溯”
—回溯线搜索
例子:“LineSearchMethod”、“回溯”
MaxLineSearchIterations
- - - - - -最大行搜索迭代次数
20.
(默认)|正整数
行搜索迭代的最大次数,指定为逗号分隔的对,由“MaxLineSearchIterations”
一个正整数。
例子:“MaxLineSearchIterations”,25岁
数据类型:双
|单
GradientTolerance
- - - - - -相对收敛公差
1 e-6
(默认)|正实标量
求解器在梯度范数上的相对收敛公差lbfgs
,指定为逗号分隔的对,由“GradientTolerance”
和一个正的实标量。
例子:“GradientTolerance”,0.000002
数据类型:双
|单
InitialLearningRate
- - - - - -初始学习率“sgd”
解算器
“汽车”
(默认)|正实标量
的初始学习率“sgd”
求解器,指定为逗号分隔的对,由“InitialLearningRate”
和一个正的实标量。
使用求解器类型时“sgd”
时,学习率从指定的值开始在迭代中衰减“InitialLearningRate”
.
默认的“汽车”
意味着初始学习率是通过在小数据子集上的实验确定的。使用NumTuningIterations
参数指定用于自动调优初始学习率的迭代次数。使用TuningSubsetSize
名称-值对参数指定用于自动调优初始学习率的观察数。
求解器类型“minibatch-lbfgs”
,您可以设置“InitialLearningRate”
到一个很高的值。在这种情况下,该函数将LBFGS分别应用于每个小批,初始特征权重来自前一个小批。
为了确保所选择的初始学习率在每次迭代中都会降低目标值,请绘制迭代
兑客观的
保存在mdl。FitInfo
财产。
您可以使用改装
方法“InitialFeatureWeights”
等于mdl。FeatureWeights
从当前的解决方案开始并运行额外的迭代
例子:“InitialLearningRate”,0.9
数据类型:双
|单
MiniBatchSize
- - - - - -每批所使用的观察数“sgd”
解算器
分钟(10,n)(默认)|正整数值,从1到n
每批所使用的观察数“sgd”
求解器,指定为逗号分隔的对,由“MiniBatchSize”
从1到的正整数n.
例子:“MiniBatchSize”,25岁
数据类型:双
|单
PassLimit
- - - - - -求解器的最大通过数“sgd”
5
(默认)|正整数
通过所有通道的最大次数n求解器的观察“sgd”
,指定为逗号分隔的对,由“PassLimit”
一个正整数。每一次通过所有数据被称为一个epoch。
例子:“PassLimit”,10
数据类型:双
|单
NumPrint
- - - - - -显示收敛摘要的批量频率
10(默认)|正整数值
用于显示收敛摘要的批的频率“sgd”
求解器,指定为逗号分隔的对,由“NumPrint”
一个正整数。此论点适用于“详细”
Value大于0。NumPrint
对于显示在命令行上的收敛摘要的每一行,都将处理小批量。
例子:“NumPrint”,5
数据类型:双
|单
NumTuningIterations
- - - - - -调优迭代次数
20.(默认)|正整数
的调优迭代次数“sgd”
求解器,指定为逗号分隔的对,由“NumTuningIterations”
一个正整数。此选项仅适用于“InitialLearningRate”、“汽车”
.
例子:“NumTuningIterations”,15
数据类型:双
|单
TuningSubsetSize
- - - - - -用于调整初始学习率的观察数
分钟(100n)(默认)|正整数值,从1到n
用于调优初始学习率的观察数,指定为由逗号分隔的对组成“TuningSubsetSize”
从1到的正整数n.此选项仅适用于“InitialLearningRate”、“汽车”
.
例子:“TuningSubsetSize”,25岁
数据类型:双
|单
IterationLimit
- - - - - -最大迭代次数
正整数
最大迭代次数,指定为由逗号分隔的对组成的“IterationLimit”
一个正整数。SGD的默认值是10000,LBFGS和小批量LBFGS的默认值是1000。
每一次批处理都是一次迭代。每次通过所有数据都是一个epoch。如果将数据划分为k小批量,那么每个epoch都等价于k迭代。
例子:“IterationLimit”,250年
数据类型:双
|单
StepTolerance
- - - - - -步长上的收敛容差
1 e-6(默认)|正实标量
步长上的收敛容差,指定为由逗号分隔的对组成“StepTolerance”
和一个正的实标量。的“lbfgs”
求解器使用绝对步长公差,并且“sgd”
求解器使用相对步长公差。
例子:“StepTolerance”,0.000005
数据类型:双
|单
MiniBatchLBFGSIterations
- - - - - -每个小批量LBFGS步骤的最大迭代次数
10(默认)|正整数
每个小批LBFGS步骤的最大迭代次数,指定为由逗号分隔的对组成“MiniBatchLBFGSIterations”
一个正整数。
例子:“MiniBatchLBFGSIterations”,15
小批量LBFGS算法是SGD和LBFGS方法的结合。因此,适用于SGD和LBFGS求解器的所有名值对参数也适用于小批量LBFGS算法。
数据类型:双
|单
输出参数
mdl
-邻域成分分析模型进行分类
FeatureSelectionNCAClassification
对象
邻域成分分析模型进行分类,返回为FeatureSelectionNCAClassification
对象。
版本历史
Abrir比如
Tiene una versión modificada de este ejemplo。¿Desea abrir este ejemplo con sus modificaciones?
MATLAB突击队
Ha hecho clic en unenlace que对应一个este commando de MATLAB:
弹射突击队introduciéndolo en la ventana de commandos de MATLAB。Los navegadores web no permission comandos de MATLAB。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。