现在,我们使用弹性网络。弹性网络将我们的 lambda(即 alpha)值分配一部分给岭回归的系数平方惩罚,一部分给套索回归的系数绝对值惩罚。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_127.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_128.png

这里,我们将为 l1_ratio 参数取 0.1 到 0.9 之间的 9 个值。l1_ratio=0.1 表示大部分权重在岭回归部分,而 l1_ratio=0.9 表示大部分权重在套索回归部分。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_130.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_131.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_132.png

我们调用 ElasticNetCV,传入之前定义的 alphas 数组和 l1_ratios 列表。由于需要遍历更多参数组合,拟合可能需要一些时间。拟合完成后,我们可以计算其在测试集上的预测值和均方根误差。弹性网络与岭回归和套索回归类似,只是多了一个 l1_ratio 超参数。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_134.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_135.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_136.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_138.png

6. 模型性能对比 📈

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_140.png

现在,我们将比较所创建的所有模型的均方根误差:线性回归、岭回归、套索回归和弹性网络。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_141.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_142.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_143.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_144.png

我们将创建一个包含这些均方根误差的序列,索引为对应的模型标签(‘linear‘, ‘ridge‘, ‘lasso‘, ‘elastic net‘),然后将其转换为 DataFrame 并重命名列。通过对比,我们可以看到正则化显著改善了均方根误差,使其大幅降低。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_146.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_147.png

在本例中,弹性网络的表现略优于岭回归,而两者都优于套索回归。具体选择哪种模型取决于你的需求和目标:如果你想大幅减少系数并进行特征选择,套索回归可能更合适;如果你希望模型运行非常快,岭回归是更好的选择;如果你想找到最优的平衡点,则可以使用弹性网络。


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_149.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_150.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_151.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_152.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_153.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_154.png

7. 可视化预测结果 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_156.png

最后,我们将为每个正则化模型绘制预测值与实际值的散点图,这与之前对线性回归所做的类似。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_157.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_158.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_159.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_161.png

我们的标签列表是 [‘Ridge‘, ‘Lasso‘, ‘Elastic Net‘],模型列表是对应已拟合好的模型对象(ridge_cvlasso_cvelastic_net_cv)。通过 zip 函数将模型和标签配对,然后遍历每个组合,使用相同的坐标轴绘制测试集实际值 (y_test) 与模型预测值的散点图,并添加图例。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_163.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_164.png

这个图表本身可能不提供太多额外信息。要评估每个模型的预测能力,查看均方根误差更有价值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_165.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_166.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_168.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_170.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_171.png

总结 🎓

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_173.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_174.png

本节课中,我们一起学习了三种核心的正则化技术:岭回归 (L2)套索回归 (L1)弹性网络 (混合)。我们了解了它们如何通过向损失函数添加惩罚项来控制模型复杂度、防止过拟合。通过 scikit-learn 中的 RidgeCVLassoCVElasticNetCV,我们实践了如何利用交叉验证自动选择最佳的正则化强度参数 (alpha),并对比了不同模型在测试集上的性能。结果表明,适当地使用正则化可以显著提升模型的泛化能力。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_176.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_177.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_178.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bc5a947b5483bb7a89139cb197a71fd_179.png

本节关于正则化演示的内容到此结束。接下来,我们将有一节更深入的讲座来探讨正则化的工作原理,之后还会有使用正则化的练习。

084:正则化深入解析(第一部分)🔍

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_1.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_3.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_6.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_7.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_9.png

在本节课中,我们将深入探讨正则化的细节,旨在建立对其工作原理的直观理解。我们将从多个视角审视正则化,使其不再像一个“黑箱”。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_11.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_13.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_14.png

概述 📋

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_16.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_17.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_18.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_22.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_23.png

正则化是防止机器学习模型过拟合的关键技术。本节课程将介绍三种理解正则化的视角:解析视角几何视角概率视角。通过这些视角,我们将清晰地看到L1正则化(Lasso)倾向于将某些系数缩减为零,而L2正则化(Ridge)则主要进行系数收缩。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_25.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_26.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_28.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_29.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_31.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_33.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_35.png

解析视角 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_37.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_38.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_40.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_42.png

上一节我们介绍了正则化的基本概念,本节中我们首先从解析视角来理解其逻辑。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_44.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_45.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_47.png

解析视角的核心观点是:通过施加L1或L2惩罚项,我们迫使模型系数变小,从而限制其可能的取值范围。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_49.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_50.png

  • 系数范围与模型复杂度:系数取值范围较小的模型,其复杂度必然低于系数取值范围无限的模型,因此方差也更低。

  • 特征消除:当我们完全消除某些特征(即将其系数设为零)时,可以直观地理解为减少了模型的解空间。例如,将 y 视为 x 的函数,与将其视为 x 的函数相比,后者的解空间更复杂。

  • 系数大小与影响:系数的大小直接决定了特征对输出变量 y 的影响程度。

    • 如果系数接近零,意味着该特征几乎无效。

    • 如果系数很大,则该特征的微小变化会对 y 产生巨大影响,导致模型对该特征的变化高度敏感,从而方差更高。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_53.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_55.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_56.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_57.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_59.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_61.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_62.png

几何视角 📐

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_64.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_65.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_66.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_68.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_70.png

解析视角帮助我们理解了正则化的目标,本节中我们来看看几何视角如何更形象地展示优化过程,并解释Lasso和Ridge的不同行为。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_72.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_73.png

首先,我们回顾一下带正则化的优化问题。对于Ridge回归,我们试图最小化以下目标函数(即带L2惩罚的误差):

最小化 {残差平方和},且满足 β₁² + β₂² + ... ≤ S

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_75.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_76.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_77.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_78.png

对于Lasso回归,优化问题类似,但惩罚项是L1范数:

最小化 {残差平方和},且满足 |β₁| + |β₂| + ... ≤ S

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_80.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_81.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_82.png

在这种形式下,最优解必须位于传统OLS(普通最小二乘)损失函数的等高线正则化惩罚边界的交点处。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_83.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_84.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_85.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_87.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_88.png

以下是理解几何视角的关键点:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_90.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_91.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_93.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_94.png

  • OLS损失等高线:图中的红色同心椭圆(或圆)代表传统OLS损失函数的等高线。同心椭圆的中心点(β̂)是无正则化时的最优解。同一椭圆上的所有点(β₁, β₂组合)产生的OLS误差相同。

  • 正则化惩罚边界

    • 对于Lasso(L1),惩罚边界是一个菱形(在高维空间是菱形体)。这个菱形代表了所有满足 |β₁| + |β₂| = S 的系数组合。

    • 对于Ridge(L2),惩罚边界是一个圆形(在高维空间是球体)。这个圆形代表了所有满足 β₁² + β₂² = S 的系数组合。

  • 寻找交点:由于我们需要同时最小化OLS误差和正则化惩罚,最优解就是OLS等高线与惩罚边界首次接触的点。

  • 为何Lasso产生稀疏解:菱形的顶点位于坐标轴上(例如 β₁=0β₂=0)。除非OLS等高线与菱形边平行,否则最优解通常会落在某个顶点上,这就使得一个系数恰好为零。在高维空间中,这一特性使得Lasso能够进行特征选择。

  • 为何Ridge不产生稀疏解:圆形的边界是平滑的,没有突出的顶点。OLS等高线与圆形边界相切时,切点很可能不在坐标轴上,因此所有系数通常只是被缩小,而不会被精确地设为零。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_96.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_98.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_99.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_101.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_103.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_105.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_106.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_107.png

总结 🎯

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_109.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_111.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_113.png

本节课中我们一起学习了理解正则化的三种视角:

  1. 解析视角:从逻辑上解释了缩小系数范围可以降低模型复杂度和方差。

  2. 几何视角:通过可视化优化问题,清晰地揭示了Lasso回归倾向于产生稀疏解(系数为零)而Ridge回归主要进行系数收缩的根本原因——即源于L1惩罚的菱形边界与L2惩罚的圆形边界在几何形状上的差异。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_114.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_116.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_117.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_119.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/f415ad0916271c6a084657315c9f3c8b_120.png

下一部分我们将继续探讨概率视角,它将把Lasso和Ridge回归重新诠释为一个贝叶斯估计问题,其中系数具有特定的先验分布。

085:正则化深入解析(第二部分)📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_1.png

在本节课中,我们将从概率论的视角深入探讨正则化,理解岭回归(Ridge)和套索回归(Lasso)背后的先验分布假设,并总结正则化的核心目标与不同理解方式。

概述:从概率视角看正则化

上一节我们从几何角度理解了正则化,本节我们将从概率论的贝叶斯视角来审视它。正则化本质上是对回归系数施加了某种先验分布。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_3.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_4.png

我们试图找出回归系数,并假设这些系数服从某个先验分布。我们将基于数据来更新这个先验,得到系数的后验分布。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_1.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_7.png

这意味着,在建立系数与X、Y值之间的实际关系之前,我们已对系数的分布有了一定的先验认知。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_7.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_9.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_11.png

最终,我们的目标是在给定X和Y数据的情况下,找到最优的系数。

贝叶斯框架下的正则化

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_13.png

在贝叶斯框架下,这个问题可以重新表述为:在给定系数 β 的情况下,得到结果变量 Y 的概率。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_15.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_9.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_16.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_17.png

乘以我们对 β 的先验理解。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_19.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_11.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_21.png

换句话说,如果我们试图找到给定数据下系数的概率,可以使用贝叶斯公式重新校准。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_22.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_13.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_24.png

这样,我们就是在寻找在给定一组参数(即系数)的情况下得到目标值的概率,乘以我们系数的先验分布。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_26.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_15.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_16.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_17.png

因此,我们的解决方案将取决于如何定义系数所服从的先验分布。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_19.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_28.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_29.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_30.png

L2与L1正则化的先验分布

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_31.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_32.png

当我们选择正则化的形式时,无论是岭回归还是套索回归,本质上都是在定义那个先验分布函数 G

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_34.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_21.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_22.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_36.png

以下是两种正则化对应的先验分布:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_38.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_39.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_41.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_42.png

先验分布的行为差异

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_44.png

观察这些先验分布再次揭示了它们行为上的差异。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_34.png

对于两者,我们都施加了一个以零为中心的分布。这意味着我们认为零是系数最可能的值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_48.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_49.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_36.png

但是,套索回归在零处有一个更尖锐、更高的峰值,因为它更倾向于将某些系数完全设为零。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_51.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_38.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_39.png

超参数 λ 与先验分布方差

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_54.png

现在,将这一点与我们引入的超参数 λ 联系起来。λ 实际上意味着先验分布的方差更小

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_55.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_57.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_41.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_42.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_44.png

如果你想象这个分布被压缩,方差变小意味着值更可能接近零。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_59.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_60.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_61.png

因此,一个更高的 λ 值(它缩小了方差)意味着系数更小,因为这些系数更可能接近零。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_48.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_49.png

正则化核心要点总结 🎯

现在,让我们回顾一下关于正则化我们所理解的一切。正则化的目标始终是优化复杂度权衡,以便在留出数据集或外部数据集上最小化误差。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_63.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_64.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_65.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_51.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_66.png

以下是实现这一目标的关键点:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_68.png

我们通过在成本函数中施加惩罚来降低模型复杂度。我们可以调整正则化项 λ 的值,以改变惩罚力度,并微调我们想要减少多少复杂度。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_54.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_55.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_70.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_71.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_72.png

引入正则化会增加偏差,但会减少方差。这个权衡通常是值得的。我们常常发现初始模型对微小变化过于敏感,因此增加偏差、减少方差有助于我们找到一个更平衡、更具泛化能力的模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_57.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_59.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_60.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_61.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_74.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_75.png

我们有两种主要选择:岭回归(Ridge/L2)或套索回归(Lasso/L1)。我们可以验证模型的选择以及 λ 值的强度。我们在 notebook 中看到过如何遍历超参数或模型的不同可能解。我们也讨论过一些优缺点,例如套索回归的特征选择和可解释性增强,以及岭回归如何更严厉地惩罚异常值,并且通常比套索回归运行得更快。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_63.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_64.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_65.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_66.png

正则化的终极目标

正则化的目标始终是关于找到正确的偏差-方差权衡。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_68.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_77.png

我们需要一个模型,它足够复杂以捕捉 X 和 Y 之间的真实关系(偏差不能太高),但也不能复杂到对训练集过拟合(方差不能太高)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_78.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_79.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_80.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_70.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_71.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_72.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_81.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_82.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_83.png

我们不能让方差太高,以至于 X 和 Y 之间呈现一种完美的关系,X 的微小变化就会对结果变量 Y 产生巨大影响。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_84.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_85.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_74.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_75.png

理解正则化的三种途径

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_87.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_88.png

为了清晰地理解这一切是如何运作的,我们讨论了三种途径:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_89.png

  1. 解析途径:我们知道更小的系数必然导致更简单的模型。小系数 -> 低复杂度模型

  2. 几何途径:它向我们展示了在正则化的约束下,我们如何找到最优解,以及这如何导致岭回归和套索回归产生不同的系数结果。回顾我们的几何示例,我们看到由于套索回归的约束区域有“尖角”,而岭回归的约束区域更“圆滑”,因此套索回归的解更可能落在坐标轴上,从而将系数设为零。

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_77.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_78.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_79.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_80.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_81.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_82.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_83.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_84.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_85.png

  3. 概率途径:在贝叶斯问题的框架下解释套索和岭回归,即我们对试图学习的系数分布施加了特定的先验。

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_87.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_88.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_89.png

    https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_91.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_91.png

课程总结

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_93.png

本节课中,我们一起深入探讨了正则化背后的细节,以及我们可以通过不同途径来理解正则化实际如何工作。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_94.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_93.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_94.png

正则化的概念将在你的整个机器学习旅程中至关重要,因为在几乎每一个模型中,我们都会使用某种形式的正则化,以在偏差和方差之间找到正确的平衡。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_96.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_97.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_96.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_97.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_98.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_99.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_98.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/9f31ba5dad2834e3a700b87acadd73c1_99.png

至此,第二门课程的内容结束。期待在第三门课程中与你相见,谢谢。

086:正则化详解(选修)第1部分 📚

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_0.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_2.png

在本节课中,我们将学习数据标准化(Standardization)的原理与实现,并回顾其在回归模型(特别是线性回归)中的应用。我们将通过手动计算和调用库函数两种方式来理解标准化过程,并探讨如何利用标准化后的系数来评估特征的重要性。


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_4.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_6.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_7.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_8.png

导入数据与库 📥

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_10.png

首先,我们需要导入必要的库并加载数据集。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_11.png

import numpy as np
import pandas as pd
from helper import boston_dataframe

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_13.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_14.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_15.png

我们将使用波士顿房价数据集。通过boston_dataframe函数,我们可以获取数据及其描述。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_17.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_18.png

boston = boston_dataframe()
boston_data = boston[0]  # 特征数据
boston_description = boston[1]  # 数据描述

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_21.png

boston_data现在是一个Pandas DataFrame,包含了所有特征变量。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_23.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_24.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_26.png

理解数据标准化 🎯

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_28.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_30.png

数据标准化是指对每个变量进行转换,使其更接近标准正态分布。标准正态分布的均值为0,标准差为1。转换公式为:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_32.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_33.png

z = (x - μ) / σ

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_35.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_36.png

其中,x是原始值,μ是均值,σ是标准差。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_38.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_40.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_41.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_43.png

准备特征与目标变量 🔧

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_45.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_46.png

我们首先需要从数据集中分离出特征(X)和目标变量(y)。

y_col = 'MEDV'  # 目标变量:房屋中位数价值
X = boston_data.drop(y_col, axis=1)  # 特征变量
y = boston_data[y_col]  # 目标变量

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_48.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_49.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_50.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_53.png

使用Scikit-learn进行标准化 ⚙️

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_55.png

Scikit-learn提供了StandardScaler类来方便地进行标准化。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_57.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_58.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_60.png

from sklearn.preprocessing import StandardScaler

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_61.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_63.png>

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

fit_transform方法会计算训练数据的均值和标准差,然后进行转换。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_65.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_66.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_67.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_68.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_70.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_71.png

手动实现标准化过程 🛠️

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_73.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_75.png

为了深入理解标准化的原理,我们可以使用NumPy手动实现这一过程。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_76.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_78.png

以下是手动标准化的步骤:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_80.png

  1. 计算每个特征列的均值。

  2. 计算每个特征列的标准差。

  3. 对每个数据点,执行 (值 - 均值) / 标准差

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_82.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_83.png

# 将DataFrame转换为NumPy数组
X_array = X.values

# 手动计算均值和标准差(沿列方向,即axis=0)
mean = X_array.mean(axis=0)
std = X_array.std(axis=0)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_85.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_86.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_87.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_88.png>

# 执行标准化
X_manual_scaled = (X_array - mean) / std

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_89.png

我们可以使用np.allclose函数来验证手动计算的结果与StandardScaler的结果是否一致(允许微小的浮点数误差)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_91.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_92.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_93.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_94.png

print(np.allclose(X_scaled, X_manual_scaled))  # 应输出 True

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_96.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_98.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_100.png

标准化对线性回归的影响 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_101.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_102.png

上一节我们实现了标准化,本节中我们来看看标准化如何影响线性回归模型系数的解释。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_104.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_105.png

首先,我们在未标准化的数据上拟合一个线性回归模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_106.png

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X, y)
print(lr.coef_)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_108.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_109.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_110.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_111.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_112.png

此时,系数的大小差异很大,因为它们依赖于原始特征的不同尺度。虽然这便于解释“一个单位的变化对目标的影响”,但无法直接比较哪个特征更重要。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_114.png

接下来,我们在标准化后的数据上拟合另一个线性回归模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_115.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_116.png

lr_scaled = LinearRegression()
lr_scaled.fit(X_scaled, y)
print(lr_scaled.coef_)

现在,所有特征都处于同一尺度(均值为0,标准差为1)。系数的绝对值大小可以直接反映该特征对目标变量的影响程度(重要性)。正值表示正相关,负值表示负相关。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_118.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_119.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_120.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_121.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_122.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_123.png

识别最重要的特征 🏆

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_125.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_126.png

为了清晰地看到哪个特征影响力最大,我们可以将特征名与标准化后的系数对应起来。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_128.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_129.png

以下是创建特征重要性表格的步骤:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_131.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_132.png

  1. 使用zip函数将特征名和系数配对。

  2. 将其转换为DataFrame以便于查看和排序。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_134.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_136.png

# 将特征名与系数配对
coef_df = pd.DataFrame(zip(X.columns, lr_scaled.coef_), columns=['feature', 'coefficient'])

# 按系数绝对值排序,找出最重要的特征
coef_df['abs_coef'] = coef_df['coefficient'].abs()
print(coef_df.sort_values('abs_coef', ascending=False))

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_138.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_139.png

例如,结果可能显示RM(房间数量)具有最大的正系数,而LSTAT(低收入人口比例)具有最大的负系数,这与我们的直觉相符。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_140.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_141.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_143.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_145.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_146.png

总结 📝

本节课中我们一起学习了数据标准化的核心概念与实现方法。我们了解到:

  1. 标准化的目的是将数据转换为均值为0、标准差为1的分布。

  2. 可以使用Scikit-learn的StandardScaler快速实现,也可以通过NumPy手动计算来理解其原理。

  3. 在线性回归中,对标准化后的数据拟合模型,得到的系数可以直接用于评估特征的相对重要性,系数绝对值越大,特征影响力越强。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_148.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_149.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_150.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/2bfd6be60b4fc6c9f1dcc4b575b617d0_151.png

下一节,我们将把标准化流程与训练-测试集划分结合起来,并探索Lasso和Ridge等正则化回归方法,以防止模型过拟合。

087:Lasso回归详解与实践 🎯

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_0.png

在本节课中,我们将深入学习Lasso回归,理解其与普通线性回归的区别,并通过代码实践探索正则化参数alpha如何影响模型复杂度与性能。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_2.png

概述

上一节我们介绍了正则化的基本概念。本节我们将聚焦于Lasso回归,这是一种通过向成本函数添加系数绝对值惩罚项来实现特征选择和防止过拟合的技术。我们将通过对比不同alpha值下的模型表现,来直观理解正则化的作用。


Lasso回归与线性回归的区别

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_4.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_6.png

Lasso回归与普通线性回归的核心区别在于其成本函数。Lasso在普通最小二乘法的成本函数基础上,增加了一项对模型系数绝对值的惩罚。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_8.png

Lasso的成本函数公式可以表示为:

J(θ) = MSE(θ) + α * Σ|θ_i|

其中,α是控制正则化强度的超参数,Σ|θ_i|是所有模型系数绝对值的总和(L1范数)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_9.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_10.png

特征标准化的重要性

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_12.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_13.png

在Lasso回归中,特征标准化比在线性回归中更为重要。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_15.png

在线性回归中,系数大小不受惩罚,因此特征尺度主要影响系数的解释性。而在Lasso中,惩罚项直接作用于系数绝对值。如果特征尺度不同,系数大小会受原始特征尺度影响,导致尺度大的特征对应的系数更容易被惩罚(压缩至零),这并非基于特征重要性,而是基于其数值尺度。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_17.png

因此,在使用Lasso前,必须将所有特征标准化到相同尺度,以确保公平的惩罚。


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_19.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_22.png

Lasso回归实践:数据准备

以下是构建Lasso回归模型前的数据准备步骤,包括生成多项式特征和标准化。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_24.png

首先,我们导入必要的库并创建多项式特征。

# 导入Lasso模型和多项式特征生成器
from sklearn.linear_model import Lasso
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_26.png>

# 初始化多项式特征对象,设置度为2,不包含偏置项(截距)
poly = PolynomialFeatures(degree=2, include_bias=False)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_27.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_29.png

我们不包含偏置项(include_bias=False),因为Lasso模型会自动处理截距项。如果包含,会生成一列全为1的特征,并学习其系数,但这是多余的。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_31.png

接着,我们生成多项式特征并进行标准化。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_33.png

# 对原始特征X生成多项式特征
X_poly = poly.fit_transform(X)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_34.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_35.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_36.png>

# 初始化标准化器并对多项式特征进行标准化
scaler = StandardScaler()
X_poly_scaled = scaler.fit_transform(X_poly)

变量X_poly_scaled就是我们准备好的、经过标准化处理的多项式特征。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_38.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_40.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_41.png

探索正则化强度:Alpha参数的影响

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_43.png

现在,我们使用默认参数的Lasso模型进行拟合,并观察其系数。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_45.png

# 使用默认alpha值(1.0)初始化Lasso模型
lasso_default = Lasso()
lasso_default.fit(X_poly_scaled, y)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_47.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_48.png>

# 查看模型系数
coefficients = lasso_default.coef_

默认情况下,alpha值为1.0。这是一个相对较大的值,意味着较强的正则化,会导致许多系数被压缩为零,从而得到一个更简单的模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_50.png

为了量化模型复杂度,我们通常关注两个指标:

  1. 系数总幅度:所有系数绝对值的和。总和越大,模型可能越复杂。

  2. 非零系数数量:未被正则化压缩至零的特征数量。数量越少,模型越稀疏。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_53.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_54.png

以下是计算这两个指标的代码逻辑:

# 计算系数总幅度
magnitude = np.sum(np.abs(coefficients))
# 计算非零系数数量
non_zero_count = np.sum(coefficients != 0)

接下来,我们通过对比alpha=0.1(弱正则化)和alpha=1.0(强正则化)来验证其影响。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_56.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_57.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_58.png

理论预期alpha值越大,正则化越强,会导致系数总幅度越小,非零系数数量越少(更多系数被置零)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_60.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_62.png

实践验证

我们分别用alpha=0.1alpha=1.0训练Lasso模型,并计算上述指标。

  • alpha=0.1时,我们可能得到总幅度为26.13,非零系数为23个。

  • alpha=1.0时,我们可能得到总幅度为8.4,非零系数仅为7个。

结果符合预期:更强的正则化(更高的alpha)产生了幅度更小、更稀疏的系数向量,即更简单的模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_64.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_65.png


模型评估与泛化能力

现在,我们评估默认模型(alpha=1.0)在训练数据上的R²分数。

from sklearn.metrics import r2_score
y_pred_train = lasso_default.predict(X_poly_scaled)
r2_train = r2_score(y, y_pred_train)
# 结果可能约为0.72

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_67.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_68.png

一个重要概念:正则化的目的是防止对训练数据过拟合,从而提升模型在未见过的数据(测试集)上的泛化能力。因此,在训练集上增加正则化强度,通常会降低模型在训练集上的表现分数(如R²)。性能提升应体现在测试集或验证集上。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_70.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_72.png

为了评估泛化能力,我们必须使用训练-测试集分割。

from sklearn.model_selection import train_test_split

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_74.png>

# 注意:这里使用未标准化的多项式特征进行分割
X_train, X_test, y_train, y_test = train_test_split(X_poly, y, test_size=0.3, random_state=42)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_76.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_78.png>

# 仅在训练集上拟合标准化器,并转换训练集和测试集
scaler_train = StandardScaler()
X_train_scaled = scaler_train.fit_transform(X_train)
X_test_scaled = scaler_train.transform(X_test) # 使用训练集的参数转换测试集

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_80.png>

# 在标准化后的训练集上训练Lasso模型
lasso_for_test = Lasso(alpha=1.0) # 使用强正则化
lasso_for_test.fit(X_train_scaled, y_train)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_82.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_84.png>

# 在测试集上进行预测并计算R²分数
y_pred_test = lasso_for_test.predict(X_test_scaled)
r2_test_alpha1 = r2_score(y_test, y_pred_test)
# 结果可能较低,例如0.33

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_85.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_87.png

测试集上的低分数(0.33)表明,alpha=1.0的正则化可能过强,导致模型过于简单(高偏差),无法捕捉数据中的真实关系。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_89.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_91.png

让我们尝试一个更弱的正则化(alpha=0.1):

lasso_weak = Lasso(alpha=0.1)
lasso_weak.fit(X_train_scaled, y_train)
y_pred_test_weak = lasso_weak.predict(X_test_scaled)
r2_test_alpha01 = r2_score(y_test, y_pred_test_weak)
# 结果可能会提高,例如0.65

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_93.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_94.png

测试集性能的提升说明,alpha=0.1的模型找到了更好的偏差-方差平衡点。而alpha=1.0的模型则因正则化过度,模型过于“愚笨”。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_96.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_98.png

总结

本节课我们一起深入学习了Lasso回归。

  • 我们理解了Lasso通过L1惩罚项(系数绝对值之和)在成本函数中实现正则化,既能防止过拟合,又能进行特征选择。

  • 我们认识到对特征进行标准化在Lasso中至关重要,以确保惩罚的公平性。

  • 我们通过实践验证了超参数 alpha 的作用:alpha越大,正则化越强,模型系数总幅度越小,非零特征越少,模型越简单。

  • 关键的一点是,正则化的优劣必须通过模型在测试集或验证集上的泛化性能来判断,而非训练集。我们的实验表明,找到合适的alpha值以获得最佳的偏差-方差平衡,是模型调优的核心。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_100.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_101.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/c5e77473cf60ceaa1a7e178c880358cb_103.png

在下一节课中,我们将尝试不同的alpha值,系统性地寻找最优的正则化强度,以最大化模型在测试集上的性能指标。

088:正则化详解(选修)第三部分 🧪

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_0.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_2.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_4.png

在本节课中,我们将学习如何应用Lasso回归与线性回归,并在一个保留测试集上比较它们的性能。我们将重点关注模型的R²分数、系数大小以及非零系数的数量,以理解正则化如何帮助模型更好地泛化。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_6.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_8.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_9.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_10.png

实验设置与目标

上一节我们介绍了正则化的基本概念。本节中,我们将通过一个具体的代码实验来观察Lasso回归的效果。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_12.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_13.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_15.png

实验的目标如下:

  • 使用一个较小的alpha值(0.001)训练Lasso回归模型。

  • 在保留测试集上评估其性能(R²分数)。

  • 将其与普通线性回归模型进行比较。

  • 比较两种模型系数的总绝对值和以及非零系数的数量。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_17.png

我们预期Lasso回归能够降低系数的幅度,并减少模型中非零系数的数量。


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_19.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_21.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_22.png

第一部分:训练与评估Lasso回归

首先,我们需要初始化Lasso回归对象。当alpha值较小时,模型可能需要更多迭代次数才能收敛到最优解,因此我们需要增加max_iter参数。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_24.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_25.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_26.png

以下是初始化并训练Lasso模型的代码步骤:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_28.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_29.png

# 初始化Lasso回归模型,alpha=0.001
lasso_001 = Lasso(alpha=0.001, max_iter=100000)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_31.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_33.png>

# 使用训练集拟合标准化器,并转换训练数据
X_train_s = s.fit_transform(X_train)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_35.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_37.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_38.png>

# 使用标准化后的训练数据拟合Lasso模型
lasso_001.fit(X_train_s, y_train)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_40.png>

# 使用拟合好的标准化器转换测试数据(注意:不是fit_transform)
X_test_s = s.transform(X_test)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_42.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_43.png>

# 使用训练好的模型进行预测
y_pred_lasso = lasso_001.predict(X_test_s)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_45.png>

# 计算并输出模型在测试集上的R²分数
r2_lasso = r2_score(y_test, y_pred_lasso)
print(f"Lasso R² Score: {r2_lasso}")

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_48.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_49.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_51.png

第二部分:训练与评估线性回归

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_53.png

接下来,我们对普通线性回归模型重复相同的过程,以便进行公平比较。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_55.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_56.png

以下是相应的代码步骤:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_58.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_59.png

# 初始化线性回归模型
lr = LinearRegression()

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_61.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_62.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_64.png>

# 使用相同的标准化训练数据拟合线性回归模型
lr.fit(X_train_s, y_train)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_66.png>

# 使用相同的标准化测试数据进行预测
y_pred_lr = lr.predict(X_test_s)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_68.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_70.png>

# 计算并输出线性回归的R²分数
r2_lr = r2_score(y_test, y_pred_lr)
print(f"Linear Regression R² Score: {r2_lr}")

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_71.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_73.png

为了比较模型的复杂度,我们还需要计算系数的总绝对值和以及非零系数的数量。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_75.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_76.png

以下是计算这些指标的代码:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_78.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_80.png

# 计算Lasso模型系数的总绝对值和
lasso_coeff_sum = np.abs(lasso_001.coef_).sum()
print(f"Sum of absolute Lasso coefficients: {lasso_coeff_sum}")

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_82.png>

# 计算Lasso模型中非零系数的数量
lasso_non_zero = np.sum(lasso_001.coef_ != 0)
print(f"Number of non-zero Lasso coefficients: {lasso_non_zero}")

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_84.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_85.png>

# 计算线性回归模型系数的总绝对值和
lr_coeff_sum = np.abs(lr.coef_).sum()
print(f"Sum of absolute Linear Regression coefficients: {lr_coeff_sum}")

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_86.png>

# 计算线性回归模型中非零系数的数量(通常全部非零)
lr_non_zero = np.sum(lr.coef_ != 0)
print(f"Number of non-zero Linear Regression coefficients: {lr_non_zero}")

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_88.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_89.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_90.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_91.png

第三部分:结果分析与比较

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_93.png

运行上述代码后,我们可以观察并分析结果。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_95.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_96.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_98.png

假设我们得到以下输出:

  • Lasso R² Score: 0.868

  • Linear Regression R² Score: 0.855

  • Sum of absolute Lasso coefficients: 436

  • Sum of absolute Linear Regression coefficients: 1185

  • Number of non-zero Lasso coefficients: 89

  • Number of non-zero Linear Regression coefficients: 104

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_99.png

从结果可以看出:

  1. 性能:在保留测试集上,Lasso回归(R²=0.868)比线性回归(R²=0.855)更好地解释了数据的变异,表明其泛化能力更强。

  2. 系数幅度:Lasso模型系数的总绝对值(436)远小于线性回归(1185),说明Lasso有效缩减了系数,降低了模型复杂度。

  3. 特征选择:Lasso模型将部分系数缩减为零(89个非零系数),实现了特征选择,而线性回归使用了所有特征(104个系数)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_101.png

这体现了正则化的核心思想:通过降低模型的方差,使其在未知数据上表现更稳定、更优。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_102.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_103.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_105.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_106.png

第四部分:引入岭回归(Ridge Regression)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_108.png

Lasso和岭回归的正则化形式相似。为了更全面地理解,我们快速引入岭回归进行比较。两者的代价函数主要区别在于惩罚项:Lasso使用系数的绝对值(L1范数),而岭回归使用系数的平方(L2范数)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_110.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_111.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_112.png

以下是使用相同alpha值(0.001)训练岭回归模型的代码:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_114.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_115.png

# 导入岭回归
from sklearn.linear_model import Ridge

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_116.png>

# 初始化岭回归模型
ridge_001 = Ridge(alpha=0.001)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_118.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_119.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_120.png>

# 使用相同的标准化数据拟合模型
ridge_001.fit(X_train_s, y_train)

# 进行预测并计算R²分数
y_pred_ridge = ridge_001.predict(X_test_s)
r2_ridge = r2_score(y_test, y_pred_ridge)
print(f"Ridge R² Score: {r2_ridge}")

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_122.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_123.png>

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_124.png>

# 比较系数
ridge_coeff_sum = np.abs(ridge_001.coef_).sum()
ridge_non_zero = np.sum(ridge_001.coef_ != 0)

<https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_125.png>

print(f"Sum of absolute Ridge coefficients: {ridge_coeff_sum}")
print(f"Number of non-zero Ridge coefficients: {ridge_non_zero}")

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_127.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_128.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_129.png

通常,对于相同的alpha值:

  • 岭回归倾向于缩小所有系数,但很少会将系数精确设置为零。

  • Lasso回归则更可能产生精确的零系数,从而实现特征选择。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_131.png

在本例中,我们可能会发现岭回归的系数总绝对值更高,且没有零系数,而Lasso则提供了一个更稀疏(更简单)的模型。对于这个特定的alpha,Lasso展现了更强的整体正则化效果。当然,最佳的正则化强度和类型(L1或L2)取决于具体数据和特征,需要通过交叉验证等技术来调优。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_133.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_135.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_137.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_138.png

第五部分:关于数据标准化的关键说明

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_140.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_141.png

在应用正则化模型时,数据标准化的步骤至关重要。正确的做法是:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_143.png

  1. 仅在训练集上 计算标准化所需的参数(如均值、标准差),即调用 fit_transform

  2. 然后使用这些从训练集学到的参数去转换测试集,即调用 transform

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_145.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_146.png

以下代码演示了错误与正确的做法:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_148.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_149.png

# ❌ 错误做法:在整个数据集上拟合标准化器(数据泄露)
s.fit(X_full) # X_full 包含训练和测试数据
X_train_s_wrong = s.transform(X_train)
X_test_s_wrong = s.transform(X_test)

# ✅ 正确做法:仅在训练集上拟合标准化器
s.fit(X_train) # 仅使用训练数据
X_train_s_correct = s.transform(X_train)
X_test_s_correct = s.transform(X_test) # 使用训练集学到的参数

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_151.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_152.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_153.png

对于普通的线性回归,错误做法可能不会导致R²分数变化,因为模型本身不受特征尺度影响。然而,对于Lasso、岭回归等将系数值直接纳入损失函数的模型,使用错误的标准化方法(即让测试集信息“泄露”到训练过程中)会导致得到有偏差的均值和标准差,从而影响正则化效果,最终得到不同的、不可靠的模型预测结果和评估分数。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_155.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_157.png

因此,为了保证评估的公正性和模型的有效性,必须始终坚持:只在训练集上进行 fitfit_transform 操作,然后对测试集仅进行 transform 操作。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_159.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_161.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_162.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_163.png

总结

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_165.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_167.png

本节课中,我们一起完成了一个完整的正则化对比实验。

我们学习了:

  1. 如何用代码实现Lasso回归和线性回归,并比较它们在测试集上的R²分数。

  2. 如何量化并比较模型的复杂度,包括系数总绝对值和非零系数数量。我们观察到Lasso回归能有效降低这两者。

  3. 引入了岭回归,并理解了L1正则化(Lasso)与L2正则化(Ridge)在系数缩减模式上的关键区别:Lasso倾向于产生稀疏解。

  4. 强调了在机器学习工作流中正确进行数据标准化的重要性,特别是对于涉及正则化的模型,必须防止数据泄露。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_169.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_170.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/176e1a59db003165d346401f94420beb_171.png

通过本实验,我们直观地看到了正则化如何通过控制模型复杂度来减少过拟合、提高泛化能力。这些知识是构建稳健机器学习模型的基础。

089:欢迎与课程概述 🎯

在本节课中,我们将简要介绍本课程的核心内容、学习目标以及将要涵盖的主要机器学习算法。课程旨在帮助初学者掌握数据探索、监督学习中的回归与分类方法,并构建高效的预测模型。


课程介绍

大家好,我是Miguel,我将担任本课程的一名讲师。

在本课程中,我们将回顾许多与回归相关的工具和技术,以及帮助您构建优秀分类器和预测模型的方法。

许多企业在开始数据科学与分析实践时,会首先采用逻辑回归,因为该模型易于解释,且能输出清晰的参数。


核心学习内容

在快速回顾逻辑回归之后,我们将学习更现代、预测能力更强的分类算法,例如支持向量机、K最近邻算法以及集成模型。

一种特别流行的集成模型是决策树集成,例如随机森林和梯度提升。

我们还将学习堆叠(stacking)和袋装(bagging)技术。

最后,我们将研究如何处理类别不平衡的数据集进行模型训练。您可能听说过通过分层抽样对某些类别进行欠采样或过采样,但我们也会介绍一些更现代的技术。


学习建议

请记住,如果您需要任何帮助,可以随时与我或您的同学交流。

期待在课程中与您相见!


总结

本节课我们一起了解了课程的整体安排与核心内容,包括逻辑回归、支持向量机、集成模型等关键算法,以及处理不平衡数据集的现代技术。接下来,我们将逐步深入这些主题,帮助您建立扎实的机器学习基础。

090:1_什么是分类简介 📊

在本节课中,我们将要学习分类问题的基本概念,并开始探讨如何利用机器学习来解决这类问题。

上一节我们介绍了机器学习的基本框架,本节中我们来看看监督学习中的一个重要分支——分类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_1.png

监督学习的两种类型

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_3.png

监督学习通常根据我们想要建模的数据类型分为两种。

在回归问题中,输出是一个连续的数字。回归用于需要预测或解释“多少”的商业问题。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_6.png

如果我们试图预测的是类别,即我们想要预测的是具体的类,那么这就是一个分类问题。分类用于需要预测某个结果是否会发生,或解释为什么某个结果会发生的商业问题。

回归与分类的示例

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_8.png

以下是回归问题的一些例子:

  • 房价

  • 票房收入

  • 活动出席人数

  • 网络负载

  • 投资组合损失

我们可以回想之前课程中关于使用线性回归预测房价或票房的例子,我们试图根据特征来预测这些数值的大小。

另一方面,分类问题的例子包括:

  • 检测欺诈交易(欺诈/非欺诈)

  • 客户流失预测(流失/不流失)

  • 预测活动出席人数或网络负载是否超过某个阈值(是/否)

  • 贷款违约预测(违约/不违约)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_10.png

需要指出的是,这里的分类示例是“是/否”或二元的。分类也可以有三个或更多个可能的结果,只要我们在预测一个具体的类别。这与回归预测“多少”不同。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_12.png

分类问题详解

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_14.png

让我们简要分析一下分类究竟是什么。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_16.png

假设我们经营一家花店,销售多种类型的花卉。我们拥有所有客户的历史数据,特别是他们之前购买过哪些花。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_18.png

我们假设客户的下一次购买会与他们最近一次购买相似,如下图所示。

我们将利用与最近这次购买的相似性,来确定他们下一次会购买什么花。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_20.png

我们店里还有其他可用的花,比如右边这朵。这朵花颜色相似,但花瓣可能不同。

还有这朵花,花瓣形状相似,但花瓣上的颜色图案不完全相同。

最后,我们会说这朵花很可能最相似,因为它颜色和花瓣都接近。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_22.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_23.png

进行分类所需的条件

为了对标签未知的新样本进行分类,我们需要利用已知样本来学习。

我们需要在特征空间中表示样本,并且这种表示是可以量化的。在我们的花卉例子中,我们可以用花瓣类型、花瓣颜色等特征来表示客户最近一次的花卉购买。回想一下,我们如何通过独热编码等方法,将这些标签和颜色最终量化。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_25.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_26.png

我们需要知道每个已知样本对应的实际标签。在花卉例子中,这就是每位老客户根据花瓣类型、颜色等特征实际购买了哪种花的数据。

我们需要一种方法来衡量历史购买记录与我们试图预测的新购买之间的相似性。机器学习算法将帮助我们识别这种相似性度量,并选择与历史购买最相似的那一个。

常用的分类模型概述

以下是一些监督学习模型。请注意,这些模型本身并非专属于回归或分类,它们可以且将会用于两者。这里我们首先重点介绍它们在实践中如何用于分类任务。

  • 逻辑回归:将我们学过的线性回归扩展到分类问题。

  • K近邻:一种非线性的、简单的方法,根据与待预测标签在特征空间中最相似的过去样本来进行分类。

  • 支持向量机:一种强大的线性分类器,将利用所谓的“核技巧”来允许复杂的决策边界。

  • 神经网络:当我们学习深度学习课程时会详细评估,该模型结合了非线性和线性的中间步骤,以得出复杂的决策边界。

  • 决策树:使用非线性的中间决策边界,以得出更复杂的最终决策边界。

  • 随机森林、提升法和集成方法:建立在决策树和其他分类器之上,展示了我们如何利用多个分类器来帮助减少最终模型的方差和偏差。

总结

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_28.png

本节课中我们一起学习了监督学习的两种类型:预测“多少”的回归和预测“哪个类别”的分类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_30.png

我们讨论了进行分类所需的条件,即量化过去数据以及衡量我们的特征与未标记数据特征之间相似性的方法。

最后,我们简要概述了分类中常用的模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_32.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/0c384fe5afe194738f34e80c91f5240f_33.png

至此,本视频内容结束。下一节我们将开始学习第一个分类模型——逻辑回归。

091:逻辑回归简介 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_1.png

在本节课中,我们将要学习第一个分类算法——逻辑回归。我们将介绍逻辑回归作为分类算法的基本概念,讨论线性回归在分类问题中的应用及其局限性,并探索逻辑回归如何改进这些不足。最后,我们将通过一个具体示例展示如何使用逻辑回归进行实际分类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_3.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_4.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_5.png

从线性回归到分类问题 🔄

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_7.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_8.png

上一节我们介绍了分类算法的概念,本节中我们来看看如何将回归思想应用于分类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_10.png

我们可以将二元分类问题视为一个回归问题来处理,具体步骤如下:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_11.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_12.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_13.png

以下是处理步骤:

  1. 首先,将类别编码为1和0。例如,将“流失”编码为1,将“未流失”编码为0。

  2. 然后,拟合一条最佳直线(即使用回归算法)。

  3. 当一个新的未标记记录出现时,我们将其特征值代入训练好的回归方程。

  4. 如果计算出的值大于0.5,则预测为类别1(例如“流失”);如果小于0.5,则预测为类别0(例如“未流失”)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_15.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_16.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_18.png

这个过程可以用一个简单的决策规则表示:

如果 y_hat > 0.5,则预测为 1
否则,预测为 0

其中 y_hat 是线性回归模型的预测值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_20.png

线性回归用于分类的局限性 ⚠️

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_21.png

然而,当数据分布不同时,线性回归用于分类会出现问题。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_23.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_24.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_25.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_26.png

假设我们的数据分布使得拟合的OLS(普通最小二乘)回归线倾斜度很大。此时,0.5的阈值在x轴上的对应点会向右偏移。由于我们的决策规则是固定的(以0.5为界),这会导致一些本应预测为1(流失)的客户,因为其对应的预测值小于0.5而被错误地预测为0(未流失)。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_28.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_29.png

问题的核心在于,线性回归的目标函数(如最小化平方误差)平等地对待所有样本点。对于分类问题,我们更关心在决策边界(如0.5附近)的样本能否被正确分类,而远离边界的样本点即使预测值误差较大,对分类结果的影响也较小。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_30.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_32.png

逻辑回归的引入 🎯

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_34.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_35.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_36.png

因此,我们需要一种方法,在目标函数中给予远离决策边界的样本较低的权重,而更关注边界附近的样本。这正是著名的逻辑函数(Logistic Function)发挥作用的地方。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_38.png

逻辑函数,也称为Sigmoid函数,能将任何实数映射到(0, 1)区间内,其公式如下:

P(Y=1|X) = 1 / (1 + e^(-z))

其中,z 可以是线性组合,例如 z = β0 + β1*x1 + ... + βn*xn

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_40.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_42.png

这个函数的输出可以被解释为样本属于类别1的概率。通过使用此函数,逻辑回归模型不再直接预测0或1,而是预测一个介于0和1之间的概率值,从而更自然地处理分类问题,并克服线性回归在分类中的一些缺陷。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_44.png

课程总结 📝

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_47.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_48.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bab4c29f2bbfadd5744f084c789ed6a1_49.png

本节课中我们一起学习了逻辑回归的引入。我们首先探讨了如何将线性回归应用于二元分类问题,并指出了其在数据分布不理想时可能导致的错误分类。接着,我们引出了逻辑回归的核心思想,即使用逻辑函数将线性输出转换为概率,从而更合理地进行分类决策。在下一节中,我们将深入探讨逻辑函数的具体形式和逻辑回归模型的训练过程。

092:使用逻辑回归进行分类 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_1.png

在本节课中,我们将学习逻辑回归,这是一种用于解决分类问题的核心算法。我们将从线性回归的局限性出发,引入Sigmoid函数,并详细解释逻辑回归如何将线性输出转换为概率,最终用于分类决策。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_3.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_4.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_6.png

从线性到非线性:引入Sigmoid函数 🔄

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_8.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_9.png

上一节我们介绍了线性回归在分类问题上的局限。本节中,我们来看看如何通过一个特殊的函数来解决这个问题。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_11.png

我们引入Sigmoid函数。它将我们原始的线性回归函数包裹进其自身的函数中。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_13.png

其公式为:

σ(x) = 1 / (1 + e^(-x))

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_14.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_15.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_16.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_17.png

其中,x 代表我们原始的线性函数。这个新函数的值域将始终在0和1之间,无论 x 取何值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_19.png

x 再次代表了完整的线性方程。它平滑了 x 值过高或过低的影响。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_21.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_22.png

这样,我们的算法就不会被这些更极端的样本所影响,从而能够找到明显的视觉阈值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_24.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_25.png


逻辑回归模型公式 📈

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_27.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_28.png

因此,与线性回归中尝试拟合 y = β₀ + β₁x 不同,我们可以尝试拟合 y = f(β₀ + β₁x)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_29.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_30.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_31.png

其中函数 f 就是我们之前提到的:

f(z) = 1 / (1 + e^(-z)),而 z = β₀ + β₁x

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_33.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_34.png

我们由此得到的算法将被称为逻辑回归。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_36.png

请注意,这并非一个回归算法。它的名字中虽有“回归”,但“回归”通常意味着“多少”,而这实际上是一个分类算法,用于选择“哪一个”类别。这只是一个不太恰当的命名。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_38.png

同时注意,y = f(x) 的输出将始终介于0和1之间。其值为0.5的位置具有重要意义,因为它真实地代表了在我们的模型下,两种结果各占50%的概率。与线性回归可以取任何值不同,这里我们只能取0到1之间的值。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_39.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_41.png

现在我们看到,我们可以正确地将决策边界左侧和右侧的所有值进行分类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_42.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_44.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_46.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_47.png

理解模型:概率与几率比 🧮

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_48.png

现在,我想将其与原始的线性回归问题联系起来,以便我们对所学模型有一个直观的理解。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_50.png

这里的 P(x) 将是我们逻辑回归的输出,可以被视为样本属于某个类别相对于另一个类别的概率。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_52.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_53.png

我们不会深入探讨代数细节,但 e^(-z)(其中 z = β₀ + β₁x)等于 1 / (e^z)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_54.png

所以我们的分母可以转换为 1 + 1/(e^z),然后分子分母同时乘以 e^z,最终会得到右侧的方程。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_56.png

如果你没有完全跟上代数推导,不必过于担心。你可以相信我们将得到右侧的这个方程。

然后我们可以自己做更多的代数运算,可以看到几率比正好等于 e 的线性函数次幂。这里的思路是,我们试图分离出线性函数实际所起的作用。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_58.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_59.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_60.png

因此,我们的线性预测不再是 y,而是 y 的一个函数。所以不是 P(x),而是 P(x) / (1 - P(x))

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_61.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_62.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_63.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_64.png

如果我们回想 P(x) 是一个概率,可以看到我们现在已将概率转换成了几率比。例如,如果我们从某个值有0.75的概率开始,这等同于说我们有3比1的几率。

然后我们可以对等式两边取对数,会看到我们的线性方程将只是 x 的一个线性函数,而这里的 y(现在是我们原始 y 的函数)可以被视为对数几率。因此,x 值的单位增加或减少,将根据我们学习到的 β₁ 值,以线性方式改变我们的对数几率。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_66.png

这就是你如何将其用于解释目的。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_67.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_68.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_69.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_70.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_72.png

可视化理解决策边界 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_74.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_75.png

现在让我们回到我们的可视化示例,以更深入地理解逻辑回归创建的边界。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_77.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_79.png

当只有一个特征时,边界只是一个对应于 y = 0.5 的点。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_80.png

然后我们有两个标签:“未流失”与“流失”,并且我们只有一个特征:使用量。

当有两个特征时,我们将使用一条直线作为边界。一般来说,当我们上升到更高维度时,该决策边界将只是一个超平面。其核心思想是,这将只是一个线性函数。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_82.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_83.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_84.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_85.png

有了新的决策边界,我们现在可以预测一个新样本。我们看到它落在电话使用量约为8、数据使用量约为20的位置。我们可以根据它落在决策边界的哪一侧来预测这个样本,并发现它将是蓝色标签所代表的类别,无论是“流失”还是“未流失”。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_86.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_88.png


https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_90.png

总结 ✨

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_91.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/de991714e6cc62406cba025e984782d9_92.png

本节课中,我们一起学习了逻辑回归的核心概念。我们从线性回归的局限性出发,引入了Sigmoid函数将线性输出映射到(0,1)区间,从而得到属于某个类别的概率。我们探讨了逻辑回归模型的公式、其概率解释以及与几率比和对数几率的联系。最后,我们通过可视化示例理解了逻辑回归如何在不同特征维度下形成决策边界(点、直线或超平面)来进行分类预测。尽管名字中带有“回归”,但逻辑回归是一种强大且广泛使用的分类算法。

093:4_多类逻辑回归 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_1.png

在本节课中,我们将要学习如何将二分类逻辑回归模型扩展到多类分类场景。我们将重点介绍一种称为“一对多”的技术,它允许我们使用多个二分类器来解决多类别预测问题。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_2.png

多类分类问题概述

上一节我们介绍了二分类逻辑回归。本节中我们来看看当目标变量包含两个以上类别时的情况。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_4.png

我们面临的问题不再是预测“流失”与“未流失”,而是需要预测三个标签:“未流失”、“已取消”和“转向竞争对手”。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_5.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_6.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_7.png

一对多方法原理

以下是“一对多”方法的核心思想。

该方法通过将多类问题分解为多个二分类问题来实现。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_9.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_10.png

第一步:构建第一个二分类器

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_11.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_12.png

首先,我们选取一个类别,例如“未流失”,将其标记为正类(蓝色点)。

然后,将所有其他类别(“已取消”和“转向竞争对手”)合并标记为负类。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_14.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_15.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_16.png

接着,我们可以拟合一个逻辑回归模型。

我们得到一个逻辑回归模型,它定义了“最可能属于未流失类”与“属于其他所有类”之间的决策边界。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_18.png

第二步:为其余类别重复此过程

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_21.png

接下来,我们为其他每个类别重复上述步骤。

对于每个类别,我们都将训练一个“该类 vs 所有其他类”的二分类逻辑回归模型。

例如,我们训练“已取消 vs 非已取消”的分类器。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_23.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_24.png

然后,我们对“转向竞争对手”这个类别(红色标签)进行同样的操作,即训练“转向竞争对手 vs 所有其他类”的分类器。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_25.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_26.png

最终,我们为三个不同的类别分别训练了“一对多”的逻辑回归模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_28.png

模型结果与预测

我们最终得到三个逻辑回归模型,每个模型输出一个概率值,分别对应一个类别。

对于每个样本,其预测类别将是这三个“一对多”模型中估计概率最高的那个类别。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_30.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_31.png

我们最终得到三条独立的决策边界,每条边界都对应一个二分类问题中概率最高的区域。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_32.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_33.png

如图所示,蓝色区域代表“转向竞争对手”,粉色区域代表“未流失”,右侧的紫色区域则代表“已取消”。

总结

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_35.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/61eb4aebfad64262d26b9a0ae8d89fe6_36.png

本节课中我们一起学习了“一对多”方法在多类逻辑回归中的应用。我们了解到,该方法通过为每个类别训练一个独立的二分类器,并将预测结果中概率最高的类别作为最终输出,从而有效地将二分类逻辑回归扩展到了多类分类场景。

094:5_实现逻辑回归模型 📊

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_1.png

在本节课中,我们将学习如何使用 Scikit-learn 库来构建和训练一个逻辑回归模型。我们将从导入模型开始,逐步完成模型的实例化、训练、预测和系数查看等步骤,并探讨逻辑回归在实际中的应用场景。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_3.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_4.png


模型导入与实例化 🧩

首先,我们需要从 Scikit-learn 的线性模型模块中导入逻辑回归类。

from sklearn.linear_model import LogisticRegression

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_6.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_7.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_8.png

导入模型后,下一步是实例化这个类,创建一个逻辑回归对象。在实例化时,我们可以设置一些超参数来控制模型。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_9.png

以下是实例化逻辑回归模型的关键步骤:

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_11.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_12.png

  • 创建对象:我们创建一个名为 lr 的对象。

  • 设置正则化:通过 penalty='l2' 参数指定使用 L2 正则化来防止过拟合。L2 正则化的惩罚项是系数平方和。

  • 设置正则化强度:通过 C 参数设置正则化强度。这里的 C 是之前学习过的正则化常数 λ 的倒数,因此 C 值越大,表示惩罚越轻

lr = LogisticRegression(penalty='l2', C=1.0)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_14.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_15.png


模型训练与预测 🚀

上一节我们完成了模型的初始化,本节中我们来看看如何使用数据对模型进行训练,并用它来做出预测。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_17.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_18.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_19.png

模型训练需要使用准备好的训练数据集,包括特征 X_train 和对应的标签 y_train

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_20.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_21.png

lr.fit(X_train, y_train)

模型训练完成后,我们就可以使用它来对新的数据(例如测试集 X_test)进行预测,得到分类结果。

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_23.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_24.png

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_25.png

y_pred = lr.predict(X_test)

https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ibm-ml-eda-sup/img/bb179f0d418b6227caabe4575ecbc566_26.png

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐