机器学习第三回——正则化

1.过拟合问题

例1:线性回归问题
在这里插入图片描述
第一个模型是一个线性模型,欠拟合,不能很好地适应我们的训练集;第三个模型是一个四次方的模型,过于强调拟合原数据,而丢失了算法的本质:预测新数据。我们可以看出,若给出一个新的值使之预测,它将表现的很差,是过拟合,而中间的模型似乎最合适。
例2:分类问题
在这里插入图片描述
显然,图一是欠拟合的,不能很好的适应训练集,而图三过度拟合原数据,使其在预测新数据时表现很差,所以中间的模型最适合。
解决过拟合问题的方法:1.丢弃一些不能帮助我们正确预测的特征。可以是手工选择保留哪些特征,或者使用一些模型选择 的算法来帮忙(例如 PCA)
2.正则化。 保留所有的特征,但是减少参数的大小(magnitude)

2. 正则化

⑴ 修改代价函数

由于高次项导致了过拟合的产生,我们就通过使高次项系数接近0的方法来时函数更好的拟合
在一定程度上减小这些参数𝜃 的值,这就是正则化的基本方法。
修改后的代价函数为:
在这里插入图片描述
其中,λ为正则化参数,即对参数的正则化程度。
根据惯例,我们不对参数θ0进行正则化。
若λ过大,,那么𝜃(不包括𝜃0)都会趋近于 0,这样我们所得到的只能是一条平行于𝑥轴的直线。
在这里插入图片描述
所以对于正则化,我们要取一个合理的 𝜆 的值,这样才能更好的应用正则化。

⑵ 线性回归的正则化

正则化线性回归的代价函数为:
在这里插入图片描述

使用梯度下降法

由于θ0不需要正则化,故分为两种情形
在这里插入图片描述
对上面的算法中𝑗 = 1,2, . . . , 𝑛 时的更新式子进行调整可得:
在这里插入图片描述
可以看出,正则化线性回归的梯度下降算法的变化在于,每次都在原有算法更新规则的基础上令𝜃值减少了一个额外的值。

使用正规方程

在这里插入图片描述
图中的矩阵尺寸为 (𝑛 + 1) ∗ (𝑛 + 1)。当λ>0时,该矩阵一定是可逆矩阵。

⑶ 逻辑回归模型的正则化

逻辑回归模型正则化后的代价函数为:
在这里插入图片描述
Python 代码:

import numpy as np
def costReg(theta, X, y, learningRate):
 theta = np.matrix(theta)
 X = np.matrix(X)
 y = np.matrix(y)
 first = np.multiply(-y, np.log(sigmoid(X*theta.T)))
 second = np.multiply((1 - y), np.log(1 - sigmoid(X*theta.T)))
 reg = (learningRate / (2 * len(X))* np.sum(np.power(theta[:,1:the
ta.shape[1]],2))
 return np.sum(first - second) / (len(X)) + reg

要最小化该代价函数,通过求导,得出梯度下降算法为:
在这里插入图片描述
注:看上去同线性回归一样,但是知道 ℎ𝜃(𝑥) = 𝑔(𝜃𝑇𝑋),所以与线性回归不同。

### L1正则化的原理 L1正则化是一种通过在损失函数中引入权重系数的绝对值之和来约束模型复杂度的技术。其核心在于通过对权重施加惩罚,促使部分权重变为零,从而实现稀疏解的效果[^1]。 具体而言,在线性回归或其他监督学习任务中,L1正则化的优目标可表示为: \[ \text{minimize } \text{MSE} + \lambda \sum_{j=1}^{p} |w_j| \] 这里的 \( w_j \) 表示第 \( j \) 个特征对应的权重,\( \lambda \) 是控制正则强度的超参数[^2]。 --- ### L1正则化的作用 #### 1. **特征选择** 由于L1正则化倾向于使一些权重精确等于0,这实际上起到了自动特征选择的功能。只有那些对预测结果贡献显著的特征会被保留下来,其余不重要的特征被赋予零权重。 #### 2. **防止过拟合** 通过减少有效参与建模的特征数量以及降低各权重的数值范围,L1正则化能够有效地缓解模型的过拟合现象[^3]。 #### 3. **提高解释性** 因为最终模型仅依赖少数几个重要特征,所以相比未经过正则化的模型更加易于理解和分析[^4]。 --- ### 几何视角下的稀疏性原因 从几何角度看,L1正则化之所以能产生稀疏解是因为它定义了一个具有尖角形状(如二维情况下的菱形)的可行域边界。相比于圆形边界的L2正则化,这种特殊的结构更有可能让最优解落在坐标轴上——此时对应维度上的权值恰好为零。 此外需要注意的是,并不是所有的初始条件都能导致完全意义上的稀疏解;当不同方向上的梯度变幅度相近时,则可能只是单纯缩小了所有参数规模而不至于彻底消除某些特定项[^5]。 --- ### 实现方法 以下是基于Python语言的一个简单例子展示如何利用Scikit-Learn库实现带L1正则化的逻辑斯蒂回归分类器: ```python from sklearn.linear_model import LogisticRegression import numpy as np # 创建数据集 (假设二元分类问题) X = np.array([[0, 0], [1, 1]]) y = np.array([0, 1]) # 初始带有L1正则化的Logistic Regression对象 clf = LogisticRegression(penalty='l1', solver='liblinear') # 训练模型 clf.fit(X, y) print("Coefficients:", clf.coef_) ``` 上述代码片段展示了设置`penalty='l1'`即可启用L1正则化机制,同时指定合适的求解算法比如`liblinear`支持该功能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值