主要内容

fscnca

利用邻域成分分析进行特征选择分类

描述

例子

mdl= fscnca (XY中的预测器执行分类的特征选择X和回应Y

fscnca通过使用带有正则化的邻域分量分析(NCA)对角自适应来学习特征权重。

例子

mdl= fscnca (XY名称,值使用由一个或多个名称-值对参数指定的附加选项执行分类的特征选择。

例子

全部折叠

生成玩具数据,其中响应变量依赖于第3、第9和第15个预测器。

rng (0,“旋风”);%用于重现性N = 100;X =兰特(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 | 5.431133e-01 | 6.400000e+00 | 4 | 49 | -6.238576e-01 | 3.445763e-02 | 2.946188e-01 | 5.120000e+00 |最后一步两个norm = 2.946e-01最后一步两个Relative Two norm = 6.588e-02, TolX = 1.000e-06 EXIT:迭代或通过极限达到。

绘制选定的特征。不相关特征的权重应该接近于零。

图()图(mdl。FeatureWeights,“罗”网格)包含(“功能指数”) ylabel (“功能重量”

图中包含一个axes对象。axis对象包含一个类型为line的对象。

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 = hold out交叉验证分区NumObservations: 216 NumTestSets: 1 TrainSize: 160 TestSize: 56
Xtrain = obs(cvv .training,:);Ytrain = grp(cvv .training,:);Xtest = obs(cvv .test,:);Ytest = grp(cvv .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.将训练数据分成五层,提取验证(测试)集的数量。对于每一次折叠,cvpartition指定五分之四的数据作为训练集,五分之一的数据作为测试集。

CVP = cvpartition(ytrain,“kfold”5);numvalidsets = cvv . numtestsets;

分配 λ 值,并创建一个数组来存储损失函数值。

N = length(ytrain);Lambdavals = linspace(0,20,20)/n;Lossvals = 0 (length(lambdavals),numvalidsets);

2.训练每个NCA模型 λ 值,在每个折叠中使用训练集。

3.使用NCA模型计算折叠中对应测试集的分类损失。记录损失值。

4.对所有的折叠和所有的 λ 值。

I = 1:长度(lambdavals)k = 1:numvalidsets X = Xtrain(cvv .training(k),:);Y = ytrain(cvv .training(k),:);Xvalid = Xtrain(cvv .test(k),:);Yvalid = ytrain(cvv .test(k),:);nca = fscnca(X,y,“FitMethod”“准确”...“规划求解”“sgd”“λ”lambdavals(我),...“IterationLimit”30岁的“GradientTolerance”1的军医,...“标准化”,真正的);lossvals(i,k) = loss(nca,Xvalid,yvalid,“LossFunction”“classiferror”);结束结束

计算每个折叠的平均损失 λ 价值。

meanloss = mean(loss,2);

绘制平均损失值与 λ 值。

图()图(lambdavals meanloss,“ro - - - - - -”)包含(“λ”) ylabel (“损失(MSE)”网格)

图中包含一个axes对象。axis对象包含一个类型为line的对象。

找出与最小平均损失相对应的最佳λ值。

[~,idx] = min(meanloss)%查找索引
Idx = 2
Bestlambda = lambdavals(idx)找到最佳的lambda值
Bestlambda = 0.0066
Bestloss = meanloss(idx)
最佳损失= 0.0313

在所有数据上用best拟合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 (“功能重量”网格)

图中包含一个axes对象。axis对象包含一个类型为line的对象。

使用特征权重和相对阈值选择特征。

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);

应用支持向量机分类器使用所选特征的简化训练集。

svmMdl = fitcsvm(features,ytrain);

在没有被用于选择特征的测试数据上评估训练分类器的准确性。

L = loss(svmMdl,Xtest(:,selidx),ytest)
L =0

输入参数

全部折叠

预测器变量值,指定为n——- - - - - -p矩阵,n观察的次数和p是预测变量的数量。

数据类型:|

类标签,指定为类别向量、逻辑向量、数字向量、字符串数组、长度的字符向量单元格数组n,或字符矩阵与n行,n是观察数。元素或行Y类标签是否对应于行X(观察).

数据类型:||逻辑|字符|字符串|细胞|分类

名称-值参数

指定可选参数对为Name1 = Value1,…,以=家,在那里的名字参数名称和价值对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。

在R2021a之前,名称和值之间用逗号隔开,并括起来的名字在报价。

例子:“规划求解”,“sgd”、“重量”,0.0003 W,“λ”将求解器指定为随机梯度下降,将观测权值指定为向量中的值W,并将正则化参数设置为0.0003。

合适的选项

全部折叠

模型拟合的方法,指定为逗号分隔的对,由“FitMethod”和以下其中之一:

  • “准确”-使用所有数据进行拟合。

  • “没有”-不合身。使用此选项,使用调用fscnca时提供的初始特征权重来评估NCA模型的泛化误差。

  • “平均”-将数据划分为分区(子集),使用确切的方法,并返回特征权重的平均值。方法可以指定分区的数量NumPartitions名称-值对参数。

例子:“FitMethod”、“没有”

要分割用于使用的数据的分区数量“FitMethod”、“平均”选项,指定为逗号分隔的对,由“NumPartitions”和一个介于2和之间的整数值n,在那里n是观察数。

例子:“NumPartitions”,15

数据类型:|

正则化参数以防止过拟合,指定为逗号分隔的对,由“λ”一个非负的标量。

作为观察数n增加,过拟合的机会减少,所需的正则化量也减少。看到识别分类的相关特征而且调整正则化参数,利用NCA检测特征进行分类学习如何调优正则化参数。

例子:“λ”,0.002

数据类型:|

内核的宽度,指定为逗号分隔的对,由“LengthScale”和一个正实标量。

当所有预测器都在同一范围内时,长度刻度值为1是合理的。如果预测器在X是非常不同的量级,那么考虑标准化预测值使用“标准化”,真的和设置“LengthScale”,1

例子:“LengthScale”,1.5

数据类型:|

初始特征权重,指定为逗号分隔的对,由“InitialFeatureWeights”和一个p-乘1的实正标量向量,其中p是训练数据中预测因子的数量。

优化特征权重的正则化目标函数是非凸的。因此,使用不同的初始特征权重可以得到不同的结果。将所有初始特征权重设置为1通常效果很好,但在某些情况下,随机初始化使用兰特(p, 1)能提供更好的解决方案。

数据类型:|

观察权值,用逗号分隔的对表示“重量”和一个n-乘1的实正标量向量。使用观测权重来指定某些观测值比其他观测值更重要。默认的权重赋予所有观察结果同等的重要性。

数据类型:|

每个类的先验概率,指定为逗号分隔的对,由“之前”和以下其中之一:

  • “经验”- - - - - -fscnca从类频率中获取先验类概率。

  • “统一”- - - - - -fscnca设置所有类的概率相等。

  • 具有两个字段的结构:

    • ClassProbs-类概率的向量。如果这些数值的总数大于1,fsnca将它们归一化,使其加起来为1。

    • 一会中类概率对应的类名ClassProbs

例子:“前”、“制服”

用于标准化预测器数据的指标,指定为逗号分隔的对,由“标准化”,要么真正的.有关更多信息,请参见标准化的影响

例子:“标准化”,真的

数据类型:逻辑

收敛摘要显示的冗长级别指示器,指定为逗号分隔的对,由“详细”和以下其中之一:

  • 0 -没有收敛摘要

  • 1 -收敛总结,包括梯度范数和目标函数值

  • > 1 -更多的收敛信息,取决于拟合算法

    当使用“minibatch-lbfgs”求解器和冗余级别> 1,收敛信息包括迭代从中间小批量LBFGS的日志拟合。

例子:“详细”,1

数据类型:|

用于估计特征权重的求解器类型,指定为逗号分隔的对,由“规划求解”和以下其中之一:

  • “lbfgs”—有限内存Broyden-Fletcher-Goldfarb-Shanno (LBFGS)算法

  • “sgd”-随机梯度下降(SGD)算法

  • “minibatch-lbfgs”-随机梯度下降与LBFGS算法应用于小批次

默认是“lbfgs”n≤1000,且“sgd”n> 1000。

例子:“规划求解”、“minibatch-lbfgs”

损失函数,指定为逗号分隔的对,由“LossFunction”下面是其中之一。

  • “classiferror”-分类错误

    l y y j { 1 如果 y y j 0 否则

  • @lossfun-自定义丢失功能句柄。损失函数有这种形式。

    函数L = lossfun(Yu,Yv)损失百分比计算...
    是一个u-by-1向量和青年志愿是一个v1的向量。l是一个u——- - - - - -v损失值的矩阵L (i, j)损失的价值是多少Yu(我)而且青年志愿(j)

最小化的目标函数包括损失函数lyyj如下:

f w 1 n 1 n j 1 j n p j l y y j + λ r 1 p w r 2

在哪里w为特征权向量,n是观察的次数,和p是预测变量的数量。pij是概率xj是参考点吗x.详情请参见分类的NCA特征选择

例子:LossFunction, @lossfun

内存大小,以MB为单位,用于目标函数和梯度计算,指定为逗号分隔的对,由“CacheSize”一个整数。

例子:“CacheSize”,1500 mb

数据类型:|

LBFGS选项

全部折叠

的Hessian近似的历史缓冲区的大小“lbfgs”求解器,指定为逗号分隔的对,由“HessianHistorySize”一个正整数。在每次迭代中,函数都使用最近的HessianHistorySize迭代来建立逆黑森函数的近似。

例子:“HessianHistorySize”,20

数据类型:|

的初始步长“lbfgs”求解器,指定为逗号分隔的对,由“InitialStepSize”和一个正实标量。缺省情况下,该函数自动确定初始步长。

数据类型:|

行搜索方法,指定为逗号分隔的对组成“LineSearchMethod”和以下其中之一:

  • “weakwolfe”-弱沃尔夫线搜索

  • “strongwolfe”-强沃尔夫线搜索

  • “回溯”-回溯线搜索

例子:“LineSearchMethod”、“回溯”

行搜索迭代的最大次数,指定为逗号分隔的对,由“MaxLineSearchIterations”一个正整数。

例子:“MaxLineSearchIterations”,25岁

数据类型:|

求解器梯度范数上的相对收敛公差lbfgs,指定为逗号分隔的对,由“GradientTolerance”和一个正实标量。

例子:“GradientTolerance”,0.000002

数据类型:|

SGD选项

全部折叠

的初始学习率“sgd”求解器,指定为逗号分隔的对,由“InitialLearningRate”和一个正实标量。

当使用求解器类型时“sgd”,学习率在从指定的值开始的迭代中衰减“InitialLearningRate”

默认的“汽车”表示初始学习率是通过在小数据子集上进行实验确定的。使用NumTuningIterations参数指定自动调优初始学习率的迭代次数。使用TuningSubsetSize名称-值对参数指定用于自动调优初始学习率的观察数。

对于求解器类型“minibatch-lbfgs”,您可以设置“InitialLearningRate”到一个非常高的值。在这种情况下,该函数将LBFGS分别应用到每个小批,使用前一个小批的初始特征权重。

为了确保所选择的初始学习率在每次迭代中都使目标值下降,绘制迭代客观的保存在mdl。FitInfo财产。

您可以使用改装方法“InitialFeatureWeights”等于mdl。FeatureWeights从当前的解决方案开始,并运行额外的迭代

例子:“InitialLearningRate”,0.9

数据类型:|

在每批中使用的观察数“sgd”求解器,指定为逗号分隔的对,由“MiniBatchSize”从1到的正整数n

例子:“MiniBatchSize”,25岁

数据类型:|

通过所有的最大数量n求解器的观察结果“sgd”,指定为逗号分隔的对,由“PassLimit”一个正整数。所有数据的每一遍都称为一个历元。

例子:“PassLimit”,10

数据类型:|

用于显示收敛汇总的批的频率“sgd”求解器,指定为逗号分隔的对,由“NumPrint”一个正整数。这个论点适用于“详细”值大于0。NumPrint对显示在命令行上的收敛摘要的每一行进行小批量处理。

例子:“NumPrint”,5

数据类型:|

的调优迭代的次数“sgd”求解器,指定为逗号分隔的对,由“NumTuningIterations”一个正整数。此选项仅适用于“InitialLearningRate”、“汽车”

例子:“NumTuningIterations”,15

数据类型:|

用于调优初始学习率的观察数,指定为逗号分隔的对,由“TuningSubsetSize”和一个从1到的正整数n.此选项仅适用于“InitialLearningRate”、“汽车”

例子:“TuningSubsetSize”,25岁

数据类型:|

SGD或LBFGS选项

全部折叠

最大迭代次数,指定为逗号分隔的对,由“IterationLimit”一个正整数。SGD的默认值是10000,LBFGS和小批量LBFGS的默认值是1000。

每一次批处理都是一次迭代。所有数据的每一遍都是一个历元。如果数据被分成k小批量,那么每个历元就相当于k迭代。

例子:“IterationLimit”,250年

数据类型:|

步长上的收敛公差,指定为逗号分隔的对,由“StepTolerance”和一个正实标量。的“lbfgs”求解器使用绝对步进公差,并且“sgd”求解器使用相对步长公差。

例子:“StepTolerance”,0.000005

数据类型:|

小批量LBFGS选项

全部折叠

每个小批LBFGS步骤的最大迭代次数,指定为逗号分隔的对,由“MiniBatchLBFGSIterations”一个正整数。

例子:“MiniBatchLBFGSIterations”,15

数据类型:|

请注意

小批LBFGS算法是SGD和LBFGS方法的结合。因此,适用于SGD和LBFGS求解器的所有名值对参数也适用于小批LBFGS算法。

输出参数

全部折叠

邻域分量分析模型进行分类,返回为FeatureSelectionNCAClassification对象。

版本历史

在R2016b中引入

Baidu
map