正则化是一种常见的技术,用于控制Logistic回归模型的复杂度,防止过拟合。常用的正则化方法有L1正则化和L2正则化

什么是正则化?

正则化是一种常见的技术,用于控制Logistic回归模型的复杂度,防止过拟合。过拟合是指模型在训练集上表现得很好,但在测试集或实际应用中表现很差的情况。正则化通过添加一个正则化项到损失函数中,限制模型权重的大小,从而减小模型的复杂度。

正则化方法有很多种,其中最常用的有L1正则化和L2正则化。下面我们将分别介绍这两种方法及其原理。

L1正则化

L1正则化是指在损失函数中添加L1范数的项。L1范数是指向量中各个元素绝对值的和。对于一个具有n个特征的样本x,L1正则化的损失函数可以表示为:

$$L(w) = L(w_0, w_1, …, w_n) + \lambda\sum_{i=1}^n|w_i|$$

其中,L(w)是带有L1正则化项的损失函数,L(w_0, w_1, …, w_n)是未添加正则化项的损失函数,w_i是第i个特征的权重,λ是正则化参数。L1正则化项采用绝对值的形式,它的作用是使得部分特征的权重变为0,从而实现特征的选择,达到模型的简化和降维。

L2正则化

L2正则化是指在损失函数中添加L2范数的项。L2范数是指向量中各个元素的平方和的开方。对于一个具有n个特征的样本x,L2正则化的损失函数可以表示为:

$$L(w) = L(w_0, w_1, …, w_n) + \lambda\sum_{i=1}^nw_i^2$$

其中,L(w)是带有L2正则化项的损失函数,L(w_0, w_1, …, w_n)是未添加正则化项的损失函数,w_i是第i个特征的权重,λ是正则化参数。L2正则化项采用平方的形式,它的作用是使得所有特征的权重都变得较小,但不为0,从而实现更平滑和稳定的模型。

计算步骤

对于Logistic回归模型,在使用L1或L2正则化方法时,通常需要进行以下步骤:

  1. 导入数据集:将数据集导入到Python环境中,可以使用开源数据集或者虚拟数据集。

  2. 数据预处理:对数据进行缩放、归一化、填充缺失值等预处理操作,使得数据具备可行性和可用性。

  3. 拆分数据集:将数据集划分为训练集和测试集,通常按照70%的比例进行划分。

  4. 特征工程:根据实际问题选择合适的特征,可以使用特征选择、特征转换等方法来提取和构建特征。

  5. 模型训练:使用Logistic回归模型对训练集进行拟合,得到初始模型参数。

  6. 正则化处理:根据选择的正则化方法(L1或L2),对模型的权重进行限制。

  7. 模型评估:使用测试集对正则化后的模型进行评估,比较模型在训练集和测试集上的性能。

下面我们将展示一段用Python实现的示例代码,演示如何使用L2正则化。

Python代码示例

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 生成虚拟数据集
X, y = make_classification(n_samples=100, n_features=2, n_informative=2, n_redundant=0, 
 n_classes=2, random_state=42)

# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 定义正则化强度
C = 1.0

# 创建Logistic回归模型
model = LogisticRegression(penalty='l2', C=C, solver='liblinear')

# 训练模型
model.fit(X_train, y_train)

# 模型评估
train_acc = model.score(X_train, y_train)
test_acc = model.score(X_test, y_test)

print("训练集准确率:", train_acc)
print("测试集准确率:", test_acc)

# 绘制决策边界
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, 0.1),
 np.arange(x2_min, x2_max, 0.1))

Z = model.predict(np.c_[xx1.ravel(), xx2.ravel()])
Z = Z.reshape(xx1.shape)

plt.contourf(xx1, xx2, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='RdBu')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Logistic Regression with L2 Regularization')
plt.show()

在这个示例代码中,我们首先生成了一个虚拟的二分类数据集。然后进行了数据预处理,包括对特征进行标准化。接下来,将数据集拆分成训练集和测试集。然后,我们定义了正则化强度C,并使用L2正则化(penalty=’l2’)创建了Logistic回归模型。最后,我们训练了模型,并评估了在训练集和测试集上的准确率。最后,我们绘制了决策边界来可视化模型的分类结果。

通过运行以上代码,我们可以得到Logistic回归模型在L2正则化下的分类效果,并对模型的复杂度进行控制,防止过拟合的问题。

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/824187/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球