热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

机器学习(六)——l1,l2正则化以及ElasticNet

1.RidgeRegression上图的公式后面是惩罚项,用来保证泛化能力的;前面是我们的损失函数,用来保证我们的拟合效果的,

1. Ridge Regression

在这里插入图片描述
上图的公式 +后面是惩罚项,用来保证泛化能力的;+ 前面是我们的损失函数,用来保证我们的拟合效果的,而α是一个参数,用来让你决定更看重正确性还是泛化性,|| | |这个代表加和,即w0+w1+…
对于泛化性和正确性的评估:
当我们有数据时,把它分为两部分,训练集和测试集,一般训练集比较多
正确性:通过模型对训练集里的数据求一下正确性,看拟合程度怎么样
泛化性:通过模型对测试集里的数据来看正确性怎么样,

代码实现1:
官网:https://scikit-learn.org/stable/modules/linear_model.html#ridge-regression

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressorX = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)ridge_reg = Ridge(alpha=1, solver='auto')
ridge_reg.fit(X, y)
# 预测
print(ridge_reg.predict([[1.5]]))
# 截距
print(ridge_reg.intercept_)
# 参数
print(ridge_reg.coef_)

我们来看一下Ridge的参数:
在这里插入图片描述
alpha:就是惩罚项里的参数,用来决定更看重正确性还是泛化性
fit_intercept :截距,如果为true,则会产生w0
normalize: 是否归一化
max_inter:最大迭代次数
tol:阈值,就是用来控制梯度的,当梯度小于阈值后就收敛停止了,当到达最大迭代次数后,不管有没有小于阈值都会认为收敛了,停止了
solver:用什么方法

auto:根据你的数据自动为你选择最优的方法
svd:就是之前讲过的通过线性代数把答案解出来
sag:随机梯度下降
…还有几个方法,自己去看

结果:
在这里插入图片描述
从结果我们发现,这次没有x0,但是它还是把w0算出来了,这就是因为上面说的fit_intercept=True的作用

代码2:

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.linear_model import SGDRegressorX = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)# ridge_reg = Ridge(alpha=1, solver='auto')
# ridge_reg.fit(X, y)
ridge_reg = SGDRegressor(penalty='l2')
ridge_reg.fit(X, y.ravel())
# 预测
print(ridge_reg.predict([[1.5]]))
# 截距
print(ridge_reg.intercept_)
# 参数
print(ridge_reg.coef_)

我们来看一下SGDRegressor的参数:
在这里插入图片描述
loss=“squared_loss” 平方均值损失
SGDRegressor的方法可以做到和Ridge一样,只要指定penalty=" l2 ",它还可以做另三种,自己取源码中看啊

y.ravel()把列向量拉平变成行向量

结果:
在这里插入图片描述

2. Lasso

在这里插入图片描述
代码实现:也是有两种方法

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.linear_model import SGDRegressorX = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)ridge_reg = Lasso(alpha=0.15)
ridge_reg.fit(X, y)
# 预测
print(ridge_reg.predict([[1.5]]))
# 截距
print(ridge_reg.intercept_)
# 参数
print(ridge_reg.coef_)
ridge_reg = SGDRegressor(penalty='l1')
ridge_reg.fit(X, y.ravel())
# 预测
print(ridge_reg.predict([[1.5]]))
# 截距
print(ridge_reg.intercept_)
# 参数
print(ridge_reg.coef_)

3. Elastic-Net

在这里插入图片描述
它就是一个模型,既包含l1,又包含l2,当你不知道用里正则化还是l2的时候可以用Elastic Net,实际上用l1还是l2取决于你的需求。
有个有意思的特点:l1 会使w有的接近于0,有的接近于1;l2使w整体偏小

上图的公式我们也能看出来它结合了Ridge 和 Lasso两个公式,其中ap决定 l1 的权重,a(1-p)/2 决定l2 的权重

代码实现:

import numpy as np
from sklearn.linear_model import ElasticNet
from sklearn.linear_model import SGDRegressorX = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)elastic_net = ElasticNet(alpha=0.0001, l1_ratio=0.15)
elastic_net.fit(X, y)
# 预测
print(elastic_net.predict([[1.5]]))ridge_reg = SGDRegressor(penalty='elasticnet', n_iter=1000)
ridge_reg.fit(X, y.ravel())
# 预测
print(ridge_reg.predict([[1.5]]))

4. 总结

在这里插入图片描述


推荐阅读
  • 机器学习中的标准化缩放、最小-最大缩放及鲁棒缩放技术解析 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 通过使用Sqoop导入工具,可以精确控制并高效地将表数据的特定子集导入到HDFS中。具体而言,可以通过在导入命令中添加WHERE子句来指定所需的数据范围,从而在数据库服务器上执行相应的SQL查询,并将查询结果高效地存储到HDFS中。这种方法不仅提高了数据导入的灵活性,还确保了数据的准确性和完整性。 ... [详细]
  • 2018 HDU 多校联合第五场 G题:Glad You Game(线段树优化解法)
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6356在《Glad You Game》中,Steve 面临一个复杂的区间操作问题。该题可以通过线段树进行高效优化。具体来说,线段树能够快速处理区间更新和查询操作,从而大大提高了算法的效率。本文详细介绍了线段树的构建和维护方法,并给出了具体的代码实现,帮助读者更好地理解和应用这一数据结构。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 解决问题:1、批量读取点云las数据2、点云数据读与写出3、csf滤波分类参考:https:github.comsuyunzzzCSF论文题目ÿ ... [详细]
  • 通过使用 `pandas` 库中的 `scatter_matrix` 函数,可以有效地绘制出多个特征之间的两两关系。该函数不仅能够生成散点图矩阵,还能通过参数如 `frame`、`alpha`、`c`、`figsize` 和 `ax` 等进行自定义设置,以满足不同的可视化需求。此外,`diagonal` 参数允许用户选择对角线上的图表类型,例如直方图或密度图,从而提供更多的数据洞察。 ... [详细]
  • `chkconfig` 命令主要用于管理和查询系统服务在不同运行级别中的启动状态。该命令不仅能够更新服务的启动配置,还能检查特定服务的当前状态。通过 `chkconfig`,管理员可以轻松地控制服务在系统启动时的行为,确保关键服务正常运行,同时禁用不必要的服务以提高系统性能和安全性。本文将详细介绍 `chkconfig` 的各项参数及其使用方法,帮助读者更好地理解和应用这一强大的系统管理工具。 ... [详细]
  • 如何使用Python去除字符串中的非中文字符[Python编程技巧]
    在 Python 中,可以通过正则表达式来实现去除字符串中的非中文字符。具体方法是使用 `re` 模块中的 `re.sub()` 函数,配合正则表达式 `[^u4e00-u9fa5]` 来匹配并替换掉所有非中文字符,从而保留字符串中的中文部分。这种方法简洁高效,适用于多种文本处理场景。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 本文深入解析了Python在处理HTML过滤时的实现方法及其应用场景。通过具体实例,详细介绍了如何利用Python代码去除HTML字符串中的标签和其他无关信息,确保内容的纯净与安全。此外,文章还探讨了该技术在网页抓取、数据清洗等领域的实际应用,为开发者提供了宝贵的参考。 ... [详细]
author-avatar
天勤-科技
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有