手写算法-python代码实现Ridge回归
Ridge简介
前面2篇文章,我们介绍了过拟合与正则化,比较全面的讲了L1、L2正则化的原理与特点;
链接: 原理解析-过拟合与正则化
以及python代码实现Lasso回归;
链接: 手写算法-python代码实现Lasso回归
今天,我们在这基础上,讲一讲Ridge回归,就比较简单了,
本文主要实现python代码的Ridge回归(带L2正则项),并用实例佐证原理。
Ridge回归分析与python代码实现
引用上篇文章的生成的数据集:
import numpy as np
from matplotlib import pyplot as plt
import sklearn.datasets
#生成100个一元回归数据集
x,y = sklearn.datasets.make_regression(n_features=1,noise=5,random_state=2020)
plt.scatter(x,y)
plt.show()
#加5个异常数据,为什么这么加,大家自己看一下生成的x,y的样子
a = np.linspace(1,2,5).reshape(-1,1)
b = np.array([350,380,410,430,480])
#生成加入异常数据后新的数据集
x_1 = np.r_[x,a]
y_1 = np.r_[y,b]
plt.scatter(x_1,y_1)
plt.show()


以上分别是正常数据集和加入了5个异常数据的图像,如果直接用线性回归拟合:
class normal():
def __init__(self):
pass
def fit(self,x,y):
m=x.shape[0]
X = np.concatenate((np.ones((m,1)),x),axis=1)
xMat=np.mat(X)
yMat =np.mat(y.reshape(-1,1))
xTx=xMat.T*xMat
#xTx.I为xTx的逆矩阵
ws=xTx.I*xMat.T*yMat
#返回参数
return ws
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
clf1 =normal()
#拟合原始数据
w1 = clf1.fit(x,y)
#预测数据
y_pred = x * w1[1] + w1[0]
#拟合新数据

最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



