L1 逻辑回归的正则化路径

Machine LearningMachine LearningBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

L1 逻辑回归模型是一种二元分类方法,它使用 L1 正则化来促使模型产生稀疏性。该模型的正则化路径展示了随着正则化强度增加时模型的系数。在本实验中,我们将使用鸢尾花数据集来训练 L1 惩罚逻辑回归模型,并绘制它们的正则化路径。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会立即为你解决问题。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/CoreModelsandAlgorithmsGroup(["Core Models and Algorithms"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/CoreModelsandAlgorithmsGroup -.-> sklearn/svm("Support Vector Machines") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/svm -.-> lab-49204{{"L1 逻辑回归的正则化路径"}} ml/sklearn -.-> lab-49204{{"L1 逻辑回归的正则化路径"}} end

加载鸢尾花数据集

我们将从 scikit-learn 库中加载鸢尾花数据集。该数据集包含四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度。我们将仅使用前两个特征进行二元分类。

from sklearn import datasets

iris = datasets.load_iris()
X = iris.data
y = iris.target

X = X[y!= 2] ## 仅使用前两个特征进行二元分类
y = y[y!= 2]

X /= X.max() ## 对 X 进行归一化以加速收敛

计算正则化路径

我们将通过使用不同正则化强度训练 L1 惩罚逻辑回归模型来计算正则化路径。我们将使用 liblinear 求解器,它能够有效地针对带有 L1 惩罚的逻辑回归损失进行优化。我们将设置一个较低的容差值,以确保在收集系数之前模型已经收敛。我们还将使用 warm_start=True,这意味着模型的系数将被重新用于初始化下一次模型拟合,以加速完整路径的计算。

import numpy as np
from sklearn import linear_model
from sklearn.svm import l1_min_c

cs = l1_min_c(X, y, loss="log") * np.logspace(0, 10, 16)

clf = linear_model.LogisticRegression(
    penalty="l1",
    solver="liblinear",
    tol=1e-6,
    max_iter=int(1e6),
    warm_start=True,
    intercept_scaling=10000.0,
)
coefs_ = []
for c in cs:
    clf.set_params(C=c)
    clf.fit(X, y)
    coefs_.append(clf.coef_.ravel().copy())

coefs_ = np.array(coefs_)

绘制正则化路径

我们将使用训练模型的系数来绘制正则化路径。系数将相对于正则化强度的对数进行绘制。在图的左侧(强正则化器),所有系数都恰好为 0。当正则化逐渐变宽松时,系数会相继变为非零值。

import matplotlib.pyplot as plt

plt.plot(np.log10(cs), coefs_, marker="o")
ymin, ymax = plt.ylim()
plt.xlabel("log(C)")
plt.ylabel("Coefficients")
plt.title("Logistic Regression Path")
plt.axis("tight")
plt.show()

总结

在本实验中,我们学习了如何在鸢尾花数据集上训练 L1 惩罚逻辑回归模型,并绘制它们的正则化路径。正则化路径展示了模型的系数如何随不同的正则化强度而变化。这种方法在特征选择中很有用,因为它可以识别哪些特征对模型有最显著的影响。