lasso线性模型python代码_手写算法-python代码实现Lasso回归

本文介绍了Lasso回归的原理及其在防止过拟合中的作用。通过Python代码展示了如何用坐标轴下降法实现Lasso回归,并通过不同Lambda值比较其参数变化。此外,还使用sklearn库验证了自定义代码的正确性。
摘要由CSDN通过智能技术生成

Lasso回归简介

上一篇文章我们详细介绍了过拟合和L1、L2正则化,Lasso就是基于L1正则化,它可以使得参数稀疏,防止过拟合。其中的原理都讲的很清楚,详情可以看我的这篇文章。

链接: 原理解析-过拟合与正则化

本文主要实现python代码的Lasso回归,并用实例佐证原理。

Lasso回归分析与python代码实现

我们先生成数据集,还是用sklearn生成。

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个噪声数据)

#加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()

这个时候,数据表现为这个样子,由于这几个数据是异常数据,所以我们的线性回归模型应该拟合下面的样本点,即最终的参数应该比较小,不应该因为加入了几个很异常的数据,导致参数发生很大的偏移,以这个图为例,就是不应该变得很大。

,下面用我们之前写好的线性回归类(python代码实现),来展示效果:

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值