罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已存档,不会更新。

子集选择与正则化(2)

本周,来自技术营销的Richard Willey将完成关于子集选择和正则化的两部分演示。

在一个最近的帖子,我们研究了在建模具有高度相关变量的广泛数据集时,如何使用顺序特征选择来提高预测精度。本周,我们将使用正则化算法解决同样的问题,如套索、弹性网和岭回归。在数学上,这些算法通过惩罚模型中回归系数的大小来工作。

标准线性回归的工作原理是估计一组系数,使观测值和模型拟合值之间的误差平方和最小化。正则化技术,如脊回归、套索和弹性网,为这个最小化问题引入了一个额外的术语。

  • 岭回归确定了一组回归系数,该回归系数使误差平方和加上回归系数平方和乘以权重参数的和最小化可以取0到1之间的任何值。一个0的值相当于一个标准的线性回归。作为随着规模的增加,回归系数会缩小到零。
  • Lasso最小化误差平方和加上回归系数绝对值的和。
  • 弹性网是套索解和脊解的加权平均。万博 尤文图斯

这个附加项的引入迫使回归系数趋近于零,生成一个更简单的模型,具有更高的预测精度。

让我们通过使用lasso来解决我们上周看到的相同问题来看看正则化的实际应用。

内容

从上一篇文章中重新创建数据集1

清晰的所有clc rng (1998);Mu = [0 0 0 0 0 0 0 0 0];I = 1:8;矩阵= abs(bsxfun(@minus,i',i));协方差= repmat(.5,8,8).^矩阵;X = mvnrnd(mu,协方差,20);Beta = [3;1.5;0;0; 2; 0; 0; 0]; ds = dataset(Beta); Y = X * Beta + 3 * randn(20,1); b = regress(Y,X); ds.Linear = b;

使用套索来适应模型

的语法。套索命令与线性回归使用的命令非常相似。在这行代码中,我要估计一组系数B这个模型Y作为函数X.为了避免过度拟合,我将应用五倍交叉验证。

[B Stats] = lasso(X,Y, c, c, c, c, c)“简历”5);

当我们执行线性回归时,我们生成一组回归系数。默认情况下套索将创造出100种不同的模型。每个模型都使用略大的估算值.所有的模型系数都存储在数组中B.关于模型的其余信息存储在名为统计数据

我们来看看里面的前五组系数B.当你遍历这些行时,你可以看到增加时,值模型系数通常缩小到零。

disp (B (: 1:5) disp(统计)
3.9147 3.9146 3.9145 3.9143 3.9142 0.13502 0.13498 0.13494 0.13488 0.13482 0.85283 0.85273 0.85262 0.85247 0.85232 -0.92775 -0.92723 -0.9267 -0.926 -0.92525 3.9415 3.9409 -2.294 -2.2936 -2.293 -2.2924 1.3566 1.3567 1.3568 1.3569 1.3571 -0.14796 -0.14803 [1x100 double] Alpha: 1 DF: [1x100 double] MSE: [1x100 double] PredictorNames: {} SE: [1x100 double] LambdaMinMSE: 0.585 Lambda1SE: 1.6278 IndexMinMSE:78 Index1SE: 89

创建一个显示均方误差与Lambda的图表

在这个时候很自然的问题是“好吧,我应该使用这100个不同的模型中的哪一个?”我们可以用lassoPlotlassoPlot之间的关系生成一个图交叉验证所得模型的均方误差(MSE)。每个红点显示结果模型的MSE。从每个点延伸出来的垂直线段是每个估计的误差条。

您还可以看到一对垂直虚线。右边的线表示使交叉验证的MSE最小化的值。的最大值其均方误差在最小均方误差的一个标准误差之内。一般来说,人们会选择使MSE最小。有时,如果一个更节俭的模型被认为特别有利,用户可能会选择其他模型位于两个线段之间的值。

lassoPlot (B,统计数据,“PlotType”“简历”

使用统计结构提取一组模型系数。

使MSE最小的值存储在统计数据结构。您可以使用这些信息进行索引β并提取最小化MSE的系数集。

就像在特征选择的例子中一样,我们可以看到套索算法已经从结果模型中消除了五个干扰因素中的四个。这个新的,更简洁的模型将比标准的线性回归预测更准确。

ds。Lasso = B(:,Stats.IndexMinMSE);disp (ds)
Beta线性套索3 3.5819 3.0591 1.5 0.44611 0.3811 0 0.92272 0.024131 0 -0.84134 02 4.7091 1.5654 0 -2.5195 0 0 0.17123 1.3499 0 -0.42067 0

运行模拟

在这里,再一次,把任何分析建立在单一的观察上都是非常危险的。让我们用一个模拟来比较线性回归和套索的准确性。我们将从预分配一些变量开始。

MSE = 0 (100,1);Mse = 0 (100,1);Coeff_Num = 0 (100,1);贝塔=零(8,100);cv_Reg_MSE = 0 (1100);

接下来,我们将生成100个不同的模型,并估计套索模型中包含的系数数量,以及标准线性回归和套索模型之间交叉验证的MSE的差异。

可以看到,平均而言,lasso模型只包含4.5项(标准线性回归模型包含8项)。更重要的是,交叉验证的线性回归模型的MSE比由套索.这是一个非常强大的结果。的套索算法与标准线性回归一样容易应用,然而,与回归相比,它在预测准确性方面有显著改进。

rng (1998);i = 1: 100 X = mvnrnd(mu,协方差,20);Y = X * Beta + randn(20,1);[B Stats] = lasso(X,Y, c, c, c, c, c)“简历”5);Betas(:,i) = B(:,Stats.IndexMinMSE) > 0;Coeff_Num(i) = sum(B(:,Stats.IndexMinMSE) > 0);MSE(i) =统计数据。MSE (:, Stats.IndexMinMSE);regf = @(XTRAIN, ytrain, XTEST)(XTEST* return (ytrain,XTRAIN));cv_Reg_MSE(i) = crossval(mse的, X, Y,“predfun”regf,“kfold”5);结束Number_Lasso_Coefficients = mean(Coeff_Num);disp(Number_Lasso_Coefficients) MSE_Ratio = median(cv_Reg_MSE)/median(MSE);disp (MSE_Ratio)
4.57 - 1.2831

选择最好的技术

正则化方法和特征选择技术都有各自的优点和缺点。让我们以一些关于各种技术优缺点的实际指导来结束这篇博客文章。

与特征选择相比,正则化技术有两个主要优势。

  • 正则化技术能够在比特征选择方法大得多的数据集上操作。套索和岭回归可以应用于包含数千-甚至数万个变量的数据集。即使是连续的特征选择通常也太慢,无法应对这么多可能的预测因子。
  • 正则化算法通常比特征选择生成更准确的预测模型。正则化操作在连续空间上,而特征选择操作在离散空间上。因此,正则化通常能够对模型进行微调,并产生更准确的估计。

然而,特征选择方法也有其优点

  • 正则化技术仅适用于少量的模型类型。值得一提的是,正则化可以应用于线性回归和逻辑回归。然而,如果您正在使用其他建模技术——比如增强决策树——您通常需要应用特征选择技术。
  • 特性选择更容易理解,也更容易向第三方解释。永远不要低估在分享成果时描述方法的重要性。

综上所述,三种正则化技术中的每一种都有其独特的优点和缺点。

  • 因为套索使用L1范数,它倾向于迫使个别系数值完全趋近于零。因此,lasso作为一种特征选择算法效果非常好。它能快速识别出少量的关键变量。
  • 相比之下,岭回归使用L2范数作为系数(您正在最小化误差平方和)。脊回归倾向于将系数收缩分散到更大数量的系数上。如果你认为你的模型应该包含大量的系数,岭回归可能是一个比套索更好的选择。
  • 最后,但并非最不重要的,我们有弹性网,它能够弥补套索的一个非常具体的限制。Lasso无法识别比你拥有的系数更多的预测因子。

让我们假设您正在进行一项癌症研究。

  • 你有500个不同癌症患者的基因序列
  • 你要试着确定15000个不同的基因中哪一个对疾病的发展有重大影响。

有这么多不同的变量,顺序特征选择是完全不切实际的。你不能使用山脊回归,因为它不能足够快地迫使系数完全归零。与此同时,你不能使用套索,因为你可能需要识别500多个不同的基因。弹性网是一种可能的解决方案。

结论

如果你想了解更多关于这个主题的信息,可以在MathWork的名为“计算统计:特征选择、正则化和收缩”的网络研讨会上获得更多关于这些主题的详细信息。

最后,我想问你们中是否有人有在工作中应用特征选择或正则化算法的实际例子?

  • 你曾经使用过功能选择吗?
  • 你认为在你的工作中应用套索回归或岭回归有机会吗?

如果有,请在这里发帖在这里




使用MATLAB®7.13发布

|