(Ridge-Regression) (Lasso) (Elastic Net)三种线性回归

Ridge-Regression

就是给损失函数加了个惩罚项(L2正则)

在这里插入图片描述
复杂度参数 α≥0 控制收缩量:α值越大 ,收缩量越大,系数对共线性的鲁棒性越强。

大家看上面这个损失函数嘛,左侧是最小二乘法,右侧是惩罚项,为啥要加惩罚项呢?
为了防止过拟合嘛
最小二乘法的目标就是拟合输入
惩罚项目的就是增加泛化性
这两个互相敌对,最后我们的ω拟合的结果就既有泛化性又有正确性。

代码

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressor


X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)
"""
ridge_reg = Ridge(alpha=1, solver='sag')
ridge_reg.fit(X, y)
print(ridge_reg.predict(1.5))
print(ridge_reg.intercept_)
print(ridge_reg.coef_)
"""
sgd_reg = SGDRegressor(penalty='l2', max_iter=1000)
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict([[1.5]]))
print("W0=", sgd_reg.intercept_)
print("W1=", sgd_reg.coef_)

Lasso

Lasso的损失函数(L1正则)

在这里插入图片描述
L1导致w趋近于1和0,以及一部分就是0。(现在很少用了,毕竟w=0这几乎就是废掉了w)(可以用来降维,w=0的就弃掉)
L2导致w整体偏小。

代码

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.linear_model import SGDRegressor

__author__ = 'yasaka'

X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

lasso_reg = Lasso(alpha=0.15, max_iter=10000)
lasso_reg.fit(X, y)
print(lasso_reg.predict(1.5))
print(lasso_reg.coef_)

sgd_reg = SGDRegressor(penalty='l1', n_iter=10000)
sgd_reg.fit(X, y.ravel())
print(sgd_reg.predict(1.5))
print(sgd_reg.coef_)

Elastic Net

Elastic Net的损失函数(L1正则和L2正则)

在这里插入图片描述

根据损失函数我们自己定义各部分所占权重(这几设计α和ρ)。

总结:

算法选择顺序:Ridge Regression (L2正则化) --> ElasticNet (即包含L1又包含L2) --> Lasso Regression (L1正则化)

Q:正则化L1和L2有什么区别?
A:L1是w绝对值加和,L2是w平方加和。L1的有趣的现象是会使得w有的接近于0,有的接近于1,
L1更多的会用在降维上面,因为有的是0有的是1,我们也称之为稀疏编码。
L2是更常用的正则化手段,它会使得w整体变小

超参数alpha 在Rideg类里面就直接是L2正则的权重
超参数alpha 在Lasso类里面就直接是L1正则的权重
超参数alpha 在ElasticNet和SGDRegressor里面是损失函数里面的alpha
超参数l1_ration 在ElasticNet和SGDRegressor里面是损失函数的p

正则化是对损失函数进行操作,在训练阶段。
归一化是对输入数据进行操作,在数据预处理阶段。

Q:什么是过拟合?
A:拟合过度,用算法生成的模型,很好的拟合了你以有的数据,训练集数据,但是当来新的数据的时候,
比如测试集的数据,预测的准确率反而降低了很多,那这个时候就是发生了过拟合现象

Q:如何防止过拟合呢?
A:防止过拟合,等价于提高模型的泛化能力,或者推广能力,或者说白了就是举一反三的能力!
提高了模型的容错能力!
学霸:有监督的机器学习!
学神:有很强的学习能力,能自己找到学习的方法!无监督的机器学习!
学渣:你的算法压根就没选对,数据预处理也没对,学习方法不对!
学痴:做练习题都会,考试稍微一变化,就挂!过拟合了!没有泛化能力!

Q:如何在机器学习里面防止过拟合呢?
A:模型参数W个数,越少越好,无招胜有招
模型参数W的值越小越好,这样如果X输入有误差,也不会太影响y预测结果
通过正则化惩罚项人为的修改已有的损失函数,比如使用L1、L2正则添加到loss func里面去
L1 = n个维度的w绝对值加和
L2 = n个维度的w平方和
让我们的SGD,在找最优解的过程中,考虑惩罚项的影响

Q:当使用惩罚项,会产生什么影响?
A:使用惩罚项,会提高模型的泛化能力,但是因为人为的改变了损失函数,所有在一定程度上牺牲了
正确率,即对训练集已有数据的拟合效果
,但是没关系,因为我们的模型目的是对未来新的数据进行预测
在惩罚项里面,会有个alpha,即惩罚项的权重,我们可以通过调整alpha超参数,根据需求来决定
是更看重模型的正确率还是模型的泛化能力!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值