18.【进阶】模型正则化--L1&L2范数正则化

#-*- coding:utf-8 -*-

#模型正则化:目的是提高模型在未知测试数据上的泛化力,避免参数过拟合
#常用方法:在原模型优化目标的基础上,增加对参数的惩罚(penalty)项
#拓展一下L0范数、L1范数、L2范数的概念
#L0范数是指向量中非0的元素的个数,如果我们用L0范数来规则化一个参数矩阵W的话,就是希望W的大部分元素都是0,实现稀疏但是NP-hard。
#L1范数是指向量中各个元素绝对值之和,也有个美称叫“稀疏规则算子”(Lasso regularization),通常用来实现稀疏
#L2范数是指向量各元素的平方和然后求平方根。我们让L2范数的规则项||W||2最小,可以使得W的每个元素都很小,都接近于0,
#但与L1范数不同,它不会让它等于0,而是接近于0,这里是有很大的区别的。而越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象。
#接下来分别以L1范数正则化和L2范数正则化进行讨论


#继续以上一讲的数据进行研究(代码与上一讲相同)
import numpy as np
X_train = [[6],[8],[10],[14],[18]]
y_train = [[7],[9],[13],[17.5],[18]]
X_test = [[6],[8],[11],[16]]
y_test = [[8],[12],[15],[18]]
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
poly4 = PolynomialFeatures(degree=4)
X_train_poly4 = poly4.fit_transform(X_train)
X_test_poly4 = poly4.transform(X_test)

#*************************************************************************************
#1.L1范数正则化
#目标:让参数(权重)向量中的许多元素趋向于0,使得大部分特征失去对优化目标的贡献
#这种让有效特征变得稀疏对L1正则化模型,通常被称为Lasso模型
from sklearn.linear_model import Lasso
#使用默认配置的lasso
lasso_poly4 = Lasso()
lasso_poly4.fit(X_train_poly4,y_train)
#对Lasso模型在测试样本上的回归功能进行评估
print lasso_poly4.score(X_test_poly4,y_test)
#输出:0.83889268736
#输出Lasso模型的参数列表
print lasso_poly4.coef_
#[0.00000000e+00   0.00000000e+00   1.17900534e-01   5.42646770e-05  -2.23027128e-04]

#小结:
#1.默认配置的Lasso模型(L1范数正则化的模型)性能比普通的多项式回归模型更好一些;
#2.相较于普通的多项式回归模型,Lasso模型拟合后对参数列表中,4次与3次特征的参数均为0.0,使得特征更加稀疏。

#*************************************************************************************
#2.L2范数正则化
#目标:让参数(权重)向量中的大部分元素 都 变得很小,<压制了参数之间对差异性>
#这种压制参数之间差异性的L2正则化模型,通常被称为Ridge模型
from sklearn.linear_model import Ridge
ridge_poly4 = Ridge()
ridge_poly4.fit(X_train_poly4,y_train)
print ridge_poly4.score(X_test_poly4,y_test)
#输出:0.837420175937
#输出Ridge模型拟合后参数的平方和
print np.sum(ridge_poly4.coef_**2)
#0.0154989652036

#小结:
#1.默认配置的Ridge模型(L2范数正则化的模型)性能比普通的多项式回归模型更好一些;
#2.相较于普通的多项式回归模型,Ridge模型拟合后参数之间的差异非常小

#最后值得一提的是,不论是L1范数正则化,还是L2范数正则化,惩罚项都有一个调节因子λ,在模型优化中扮演重要的角色,留待后续研究。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值