主要内容

基于NCA的稳健回归特征选择

使用NCA中的自定义稳健损失函数执行对异常值稳健的特征选择。

生成带有异常值的数据

生成回归的样本数据,其中响应取决于三个预测值,即预测值4、7和13。

rng(123,“龙卷风”)%的再现性n = 200;X = randn (n, 20);y = cos (X (:, 7)) + sin (X(:, 4)。* X (:, 13)) + 0.1 * randn (n, 1);

给数据添加异常值。

numoutliers=25;outlieridx=floor(linspace(10,90,numoutliers));y(outlieridx)=5*randn(numoutliers,1);

图数据。

图绘制(y)

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

使用非鲁棒损耗函数

特征选择算法的性能在很大程度上取决于正则化参数的值。一个很好的做法是调整正则化参数,以获得在特征选择中使用的最佳值。使用五重交叉验证调整正则化参数。使用均方误差(MSE):

微卫星 = 1. N = 1. N ( Y - Y J ) 2.

首先,将数据分成五个部分。在每个部分中,软件使用五分之四的数据进行培训,五分之一的数据进行验证(测试)。

cvp=cvp分区(长度(y),“kfold”,5);numtestsets=cvp.numtestsets;

计算要测试的lambda值,并创建一个数组来存储损失值。

lambdavals = linspace(50 0 3) *性病(y) /长度(y);lossvals = 0(长度(lambdavals), numtestsets);

执行NCA并计算每种情况下的损失 λ 价值和每一次折叠。

对于i = 1:长度(lambdavals)对于Xtrain = X(cvp.training(k),:);ytrain = y (cvp.training (k):);Xtest = X (cvp.test (k):);欧美= y (cvp.test (k):);nca = fsrnca (Xtrain ytrain,“FitMethod”,“准确”,...“规划求解”,“lbfgs”,“冗长”,0,“拉姆达”lambdavals(我),...“失去功能”,mse的);lossvals (i (k) =损失(nca, Xtest,欧美,“失去功能”,mse的);终止终止

绘制每个λ值对应的平均损失。

figure meanloss=平均值(lossvals,2);绘图(lambdavals,meanloss,“ro-”)包含(“拉姆达”) ylabel (‘损失(MSE)’)网格

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

找到 λ 产生最小平均损失的值。

[~, idx] = min(意味着(lossvals, 2));bestlambda = lambdavals (idx)
bestlambda = 0.0231

使用最好的方法进行特征选择 λ 价值和MSE。

nca = fsrnca (X, y,“FitMethod”,“准确”,“规划求解”,“lbfgs”,...“冗长”1.“拉姆达”bestlambda,“失去功能”,mse的);
o Solver = LBFGS, HessianHistorySize = 15,LineSearchMethod = weakwolfe  |====================================================================================================| | ITER | |娱乐价值规范研究生| |规范一步曲线|γ|α|接受  | |====================================================================================================| | 0 e + 00 | 6.414642 | 8.430 e-01 |e-01 0.000 e + 00 | | 7.117 | 0.000 e + 00 |是| | 1 | 6.066100 e + 00 e-01 | 9.952 | 1.264 e + 00 |好| 3.741 e-01 | 1.000 e + 00 |是| | 2 | 5.498221 e + 00 e-01 | 4.267 | 4.250 e-01 | e-01好| 4.016 | 1.000 e + 00 |是| | 3 | 5.108548 e + 00 e-01 | 3.933 | 8.564 e-01 | e-01好| 3.599 | 1.000 e + 00 |是| | 4 | 4.808456 e + 00 e-01 | 2.505 | 9.352 e-01 |好| 8.798 e-01 |1.000 e + 00 |是| | 5 | 4.677382 e + 00 e-01 | 2.085 | 6.014 e-01 |好| 1.052 e + 1.000 e + 00 00 | |是| | 6 | 4.487789 e + 00 e-01 | 4.726 | 7.374 e-01 | e-01好| 5.593 | 1.000 e + 00 |是| | 7 | 4.310099 e + 00 e-01 | 2.484 | 4.253 e-01 |好| 3.367 e-01 | 1.000 e + 00 |是| | 8 e + 00 | 4.258539 | 3.629 e-01 e-01 4.521 | |好| 4.705 e-01 e-01 | 5.000 |是| | |e-01 4.175345 e + 00 | 1.972 | 2.608 e-01 |好| 4.018 e-01 | 1.000 e + 00 |是| | 10 e + 00 | 4.122340 | 9.169 e-02 e-01 2.947 | |好| 3.487 e-01 | 1.000 e + 00 |是| | 11 | 4.095525 e + 00 e-02 | 9.798 | 2.529 e-01 |好| 1.188 e + 1.000 e + 00 00 | |是| | 12 | 4.059690 e + 00 e-01 | 1.584 | 5.213 e-01 | e-01好| 9.930 | 1.000 e + 00 |是| | 13 e + 00 | 4.029208 | 7.411 e-02 |2..076e-01 | OK | 4.886e-01 | 1.000e+00 | YES | | 14 | 4.016358e+00 | 1.068e-01 | 2.696e-01 | OK | 6.919e-01 | 1.000e+00 | YES | | 15 | 4.004521e+00 | 5.434e-02 | 1.136e-01 | OK | 5.647e-01 | 1.000e+00 | YES | | 16 | 3.986929e+00 | 6.158e-02 | 2.993e-01 | OK | 1.353e+00 | 1.000e+00 | YES | | 17 | 3.976342e+00 | 4.966e-02 | 2.213e-01 | OK | 7.668e-01 | 1.000e+00 | YES | | 18 | 3.966646e+00 | 5.458e-02 | 2.529e-01 | OK | 1.988e+00 | 1.000e+00 | YES | | 19 | 3.959586e+00 | 1.046e-01 | 4.169e-01 | OK | 1.858e+00 | 1.000e+00 | YES | |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 20 | 3.953759e+00 | 8.248e-02 | 2.892e-01 | OK | 1.040e+00 | 1.000e+00 | YES | | 21 | 3.945475e+00 | 3.119e-02 | 1.698e-01 | OK | 1.095e+00 | 1.000e+00 | YES | | 22 | 3.941567e+00 | 2.350e-02 | 1.293e-01 | OK | 1.117e+00 | 1.000e+00 | YES | | 23 | 3.939468e+00 | 1.296e-02 | 1.805e-01 | OK | 2.287e+00 | 1.000e+00 | YES | | 24 | 3.938662e+00 | 8.591e-03 | 5.955e-02 | OK | 1.553e+00 | 1.000e+00 | YES | | 25 | 3.938239e+00 | 6.421e-03 | 5.334e-02 | OK | 1.102e+00 | 1.000e+00 | YES | | 26 | 3.938013e+00 | 5.449e-03 | 6.773e-02 | OK | 2.085e+00 | 1.000e+00 | YES | | 27 | 3.937896e+00 | 6.226e-03 | 3.368e-02 | OK | 7.541e-01 | 1.000e+00 | YES | | 28 | 3.937820e+00 | 2.497e-03 | 2.397e-02 | OK | 7.940e-01 | 1.000e+00 | YES | | 29 | 3.937791e+00 | 2.004e-03 | 1.339e-02 | OK | 1.863e+00 | 1.000e+00 | YES | | 30 | 3.937784e+00 | 2.448e-03 | 1.265e-02 | OK | 9.667e-01 | 1.000e+00 | YES | | 31 | 3.937778e+00 | 6.973e-04 | 2.906e-03 | OK | 4.672e-01 | 1.000e+00 | YES | | 32 | 3.937778e+00 | 3.038e-04 | 9.502e-04 | OK | 1.060e+00 | 1.000e+00 | YES | | 33 | 3.937777e+00 | 2.327e-04 | 1.069e-03 | OK | 1.597e+00 | 1.000e+00 | YES | | 34 | 3.937777e+00 | 1.959e-04 | 1.537e-03 | OK | 4.026e+00 | 1.000e+00 | YES | | 35 | 3.937777e+00 | 1.162e-04 | 1.464e-03 | OK | 3.418e+00 | 1.000e+00 | YES | | 36 | 3.937777e+00 | 8.353e-05 | 3.660e-04 | OK | 7.304e-01 | 5.000e-01 | YES | | 37 | 3.937777e+00 | 1.412e-05 | 1.412e-04 | OK | 7.842e-01 | 1.000e+00 | YES | | 38 | 3.937777e+00 | 1.277e-05 | 3.808e-05 | OK | 1.021e+00 | 1.000e+00 | YES | | 39 | 3.937777e+00 | 8.614e-06 | 3.698e-05 | OK | 2.561e+00 | 1.000e+00 | YES | |====================================================================================================| | ITER | FUN VALUE | NORM GRAD | NORM STEP | CURV | GAMMA | ALPHA | ACCEPT | |====================================================================================================| | 40 | 3.937777e+00 | 3.159e-06 | 5.299e-05 | OK | 4.331e+00 | 1.000e+00 | YES | | 41 | 3.937777e+00 | 2.657e-06 | 1.080e-05 | OK | 7.038e-01 | 5.000e-01 | YES | | 42 | 3.937777e+00 | 7.054e-07 | 7.036e-06 | OK | 9.519e-01 | 1.000e+00 | YES | Infinity norm of the final gradient = 7.054e-07 Two norm of the final step = 7.036e-06, TolX = 1.000e-06 Relative infinity norm of the final gradient = 7.054e-07, TolFun = 1.000e-06 EXIT: Local minimum found.

打印选定的要素。

图表(nca.FeatureWeights,“罗”)网格包含(“功能索引”) ylabel (“功能重量”)

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

使用以下公式预测响应值:nca建模并绘制拟合(预测)响应值和实际响应值。

图拟合=预测(nca,X);图(y,“r.”)举行情节(安装,“b -”)包含(“索引”) ylabel (“拟合值”)

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

fsrnca尝试拟合数据中的每个点,包括异常值。因此,除了预测值4、7和13外,它还为许多特征分配非零权重。

使用内置的鲁棒损失函数

重复优化正则化参数的相同过程,这次使用内置的 ϵ -不敏感损失函数:

L ( Y , Y J ) = 最大值 ( 0 , | Y - Y J | - ϵ )

ϵ -与均方误差相比,不敏感损失函数对异常值的鲁棒性更强。

lambdavals = linspace(50 0 3) *性病(y) /长度(y);cvp=cvp分区(长度(y),“kfold”,5);numtestsets=cvp.numtestsets;lossvals = 0(长度(lambdavals), numtestsets);对于i = 1:长度(lambdavals)对于Xtrain = X(cvp.training(k),:);ytrain = y (cvp.training (k):);Xtest = X (cvp.test (k):);欧美= y (cvp.test (k):);nca = fsrnca (Xtrain ytrain,“FitMethod”,“准确”,...“规划求解”,“新加坡元”,“冗长”,0,“拉姆达”lambdavals(我),...“失去功能”,‘ε敏感’,“ε”, 0.8);lossvals (i (k) =损失(nca, Xtest,欧美,“失去功能”,mse的);终止终止

这个 ϵ 要使用的值取决于数据,最佳值也可以通过交叉验证确定 ϵ 值超出此示例的范围。选择 ϵ 在本例中,主要是为了说明该方法的鲁棒性。

绘制每个λ值对应的平均损失。

figure meanloss=平均值(lossvals,2);绘图(lambdavals,meanloss,“ro-”)包含(“拉姆达”) ylabel (‘损失(MSE)’)网格

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

找到产生最小平均损失的lambda值。

[~, idx] = min(意味着(lossvals, 2));bestlambda = lambdavals (idx)
最佳λ=0.0187

使用拟合邻域分量分析模型 ϵ -不敏感的损失函数和最佳lambda值。

nca = fsrnca (X, y,“FitMethod”,“准确”,“规划求解”,“新加坡元”,...“拉姆达”bestlambda,“失去功能”,‘ε敏感’,“ε”, 0.8);

打印选定的要素。

图表(nca.FeatureWeights,“罗”)网格包含(“功能索引”) ylabel (“功能重量”)

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

绘制拟合值。

图拟合=预测(nca,X);图(y,“r.”)举行情节(安装,“b -”)包含(“索引”) ylabel (“拟合值”)

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

ϵ -不敏感损失似乎对异常值更为稳健。它识别出的相关特征少于MSE。拟合表明,它仍然受到一些异常值的影响。

使用自定义鲁棒损失函数

定义对异常值具有鲁棒性的自定义鲁棒损失函数,用于回归的特征选择:

F ( Y , Y J ) = 1. - 经验 ( - | Y - Y J | )

customlosscn=@(yi,yj)1-exp(-abs(yi-yj'));

使用自定义的鲁棒损失函数调整正则化参数。

lambdavals = linspace(50 0 3) *性病(y) /长度(y);cvp=cvp分区(长度(y),“kfold”,5);numtestsets=cvp.numtestsets;lossvals = 0(长度(lambdavals), numtestsets);对于i = 1:长度(lambdavals)对于Xtrain = X(cvp.training(k),:);ytrain = y (cvp.training (k):);Xtest = X (cvp.test (k):);欧美= y (cvp.test (k):);nca = fsrnca (Xtrain ytrain,“FitMethod”,“准确”,...“规划求解”,“lbfgs”,“冗长”,0,“拉姆达”lambdavals(我),...“失去功能”,香港海关(sfcn);损失(i,k)=损失(nca、Xtest、ytest、,“失去功能”,mse的);终止终止

绘制每个λ值对应的平均损失。

figure meanloss=平均值(lossvals,2);绘图(lambdavals,meanloss,“ro-”)包含(“拉姆达”) ylabel (‘损失(MSE)’)网格

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

找到 λ 产生最小平均损失的值。

[~, idx] = min(意味着(lossvals, 2));bestlambda = lambdavals (idx)
最佳λ=0.0165

使用自定义的鲁棒损失函数和最佳 λ 价值

nca = fsrnca (X, y,“FitMethod”,“准确”,“规划求解”,“lbfgs”,...“冗长”1.“拉姆达”bestlambda,“失去功能”,香港海关(sfcn);
o解算器=LBFGS,HessianHistorySize=15,第二个月第二个月第二个月第二个月第二个月第二个月第第二个月第第二个月第第二个月第第二个月第第二个月第第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二个月第二方方方方方方方方方方方方将将将将将为为为第二周周周周周周周周周周周周周周周周周第第第二方方方方方方方方方方方方方方方方方方方第第第第第1 1 1 1 1 1 7 7 7 7周周周周周周周周周周周周周周周周周第第第第第第第第第第第第第第第第第第第第第第第=======================================================================================================================================================================================================================================0 | 8.610073e-01 | 4.921e-02 |0.000e+0 0 0.0 0 0 0.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01244124;1244124; 1.0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 677090e-01 | 2.666e-02 | 7.583e-01 |正常| 1.092e+01 | 1.000e+00 |是| 4 | 5.620806e-01 | 5.524e-03 | 3.335e-01 |正常| 9.973e+00 |1.428e-03 12401.0255 E-03号E-01 0.0255 E-01 12400 0 0 0 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 E-03 12400 0 0 5 5 5 5 5 5 5 5 5.0 5 5 5 5 5 5 5 5 5 5 0 0 0 E-0 0 0 0 0 0 0 0 5 5 5 5 5 5 0 0 0 0 0 E-01“OK \1244”1.736 6 5 5 5 5 5 5 0 0 0 0 0 0 0 0 0\\\\1244\124四四四四四四四四四四四四四四四四四四四四四四不不不不不不不\\\\\\\\\\124四四四四四四四四2.466e-02 | OK | 2.105e+01 | 1.000e+00 |是| 8 | 5.614620e-01 | 1.307e-04 | 1.373e-02 | OK | 2.002e+01 | 1.000e+00 |是| 9 |5.6.3 E+0.3 E+0.3 E+0 0.3 E+0.6 6.3 E+0.3 E+0 0 0 0 0 0 0 0 0 0 0 01244124;是| 4.6.6 6.6 6.6 6 6.6 6 6.6 6 6.6 6 6.6 6 6.6 6 6.6 6 6.3 E-3 E-3 E-0 0 0 0 0 0 E-0 0 0 0 0 0 0 E+0 0 0 0 0 0 0 0 0 0 0 E+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 E+0 0 0 0 0 0 0 0 0 0 0 0 0\\\1244””1.0 0 0 0 0 0 0 0 0\\1244”1.0 0 0 0 0 0 0 0 0 0 0 0\\12445\1244124; 5.000e-01 |是| 12 | 5.614610e-01 | 3.174e-06 | 4.742e-04 |好| 2.510e+01 | 1.000e+00 |是| 13 | 5.614610e-01 | 7.896e-07|1.683e-04 | OK | 2.959e+01 | 1.000e+00 | YES |最终坡度的无穷大范数=7.896e-07最后一步的两个范数=1.683e-04,TolX=1.000e-06最终坡度的相对无穷大范数=7.896e-07,TolFun=1.000e-06出口:找到局部最小值。

打印选定的要素。

图表(nca.FeatureWeights,“罗”)网格包含(“功能索引”) ylabel (“功能重量”)

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

绘制拟合值。

图拟合=预测(nca,X);图(y,“r.”)举行情节(安装,“b -”)包含(“索引”) ylabel (“拟合值”)

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

在这种情况下,损失不受异常值的影响,结果基于大多数观测值。fsrnca检测预测因子4、7和13作为相关特征,不选择任何其他特征。

为什么损失函数的选择会影响结果?

首先,计算两个观测值之差的一系列值的损失函数。

deltay=linspace(-10,101000)';

计算自定义损失函数值。

customlossvals=CustomLossCn(deltay,0);

计算ε不敏感损失函数和值。

ε=@(yi,yj,E)max(0,abs(yi-yj')-E);epsinsenvals=epsinsensitive(deltay,0,0.5);

计算MSE损失函数和值。

mse=@(yi,yj)(yi-yj')。^2;msevals=mse(deltay,0);

现在,画出损失函数,看看它们之间的差异,以及它们为什么会以这种方式影响结果。

图形绘图(德尔泰、customlossvals、,“g-”,德尔泰,爱普森瓦尔斯,“b -”,德尔泰,姆塞瓦尔,“r-”)包含("(yi-yj)") ylabel (‘损失(yi,yj)’)传奇(“海关损失”,‘ε敏感’,mse的)ylim([0 20])

图中包含一个Axis对象。Axis对象包含3个line类型的对象。这些对象表示customloss、EpsilonsSensitive、mse。

当两个响应值之间的差值增加时,MSE二次增加,这使得它对异常值非常敏感fsrnca为了尽量减少这种损失,它最终确定了更多相关的特征。ε不敏感损失比MSE更能抵抗离群值,但最终它确实开始随着两个观测值之间的差值增加而线性增加。随着两个观测值之间的差值增加,稳健损失函数确实接近1和即使观测值之间的差异不断增大,它仍保持在该值。在三个值中,它对异常值最为稳健。

另见

||||

相关的话题