l2正则化代码
L2正则化是一种常用的正则化方法,用于降低模型复杂度,防止过拟合。下面给出一个简单的L2正则化的代码实现。
假设我们的模型是一个线性回归模型:y = wx + b,其中w是权重,b是偏置。
我们的损失函数为均方误差(MSE):L = 1/n * Σ(y_i - (wx_i + b))^2。
我们引入L2正则化,将损失函数修改为:L = 1/n * Σ(y_i - (wx_i + b))^2 + λ * Σ(w_i^2),其中λ是正则化系数,w_i是第i个权重。
我们的优化目标是最小化L,可以使用梯度下降法来求解。其梯度为:L/w = -2/n * Σ(y_i - (wx_i + b)) * x_i + 2λw,L/b = -2/n * Σ(y_i - (wx_i + b))。
接下来是Python代码实现:
```
import numpy as np
class LinearRegression():
def __init__(self, lr=0.01, lambda_=0.1, n_iter=1000):
self.lr = lr
self.lambda_ = lambda_
self.n_iter = n_iter
self.w = None
self.b = None
def fit(self, X, y):
n_samples, n_features = X.shape
self.w = np.zeros(n_features)
self.b = 0
for i in range(self.n_iter):
y_pred = self.predict(X)
dw = (-2/n_samples) * (X.T.dot(y - y_pred)) + 2*self.lambda_*self.w
db = (-2/n_samples) * np.sum(y - y_pred)
self.w -= self.lr * dw
self.b -= self.lr * db
def predict(self, X):
return X.dot(self.w) + self.b
```
其中,lr是学习率,lambda_是正则化系数,n_iter是迭代次数。在fit方法中,我们初始化权重和偏置为0,然后使用梯度下降法更新权重和偏置。在每次更新权重时,我们需要加上正则化项。
使用该模型进行拟合时,我们需要将输入特征加上偏置项,即X = [1, x]。具体实现如下:
```
X_train = np.array([[1, 1], [1, 2], [1, 3], [1, 4], [1, 5]])
y_train = np.array([2, 3, 4, 5, 6])
lr = LinearRegression()
lr.fit(X_train, y_train)
print(lr.predict(X_train))
```
运行结果如下:
```
[2.10408163 2.98673469 3.86938776 4.75204082 5.63469388]
正则化最小二乘问题 ```
以上就是L2正则化的代码实现,可以用于线性回归等模型的正则化处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论