机器学习第6天:线性回归模型正则化

news2024/10/6 6:48:44

文章目录

机器学习专栏 

正则化介绍

岭回归

岭回归成本函数

核心代码

示例

Lasso回归

Lasso回归损失函数

核心代码

弹性网络

弹性网络成本函数

核心代码

结语


机器学习专栏 

机器学习_Nowl的博客-CSDN博客

正则化介绍

作用:正则化是为了防止模型过拟合

原理:在损失函数中加入一个正则项,使模型减少损失的同时还要降低模型复杂度

它往往给模型约束,来使它无法完全迎合训练集数据

在本文中我们将看到三种正则化方法

三种方法思想差不多,只是约束模型复杂度的方法不同


岭回归

岭回归成本函数

J(w)=MSE(w)+a*\frac{1}{2}*\sum_{i=1}^{n}w^{2}

我们先前已经知道MSE损失函数,这个公式后面加的项就叫作正则项,岭回归的正则项是l2范数的平方的一半

a*\frac{1}{2}*\sum_{i=1}^{n}w^{2}

此时模型训练时就不能只考虑MSE函数的损失了,还必须减小w参数的大小(降低模型复杂度,减少过拟合的可能性)

核心代码

以下是sklearn库使用岭回归的基本代码

from sklearn.preprocessing import PolynomialFeatures


model = Ridge(alpha=1)
model.fit(x, y)

alpha就是公式中的a参数,越小则代表正则程度越小  

我们来看几种不同alpha的情况

 该图参数从左到右逐渐增大(岭回归越强),可以看到模型的复杂度也逐渐降低了

示例

我们已经清楚一点,正则化能让模型变得更简单,考虑以下情景

我们有这样一组数据

可以看到,开始的点排列的还是很有规律的,但是右上角的点显得非常突兀,那么如果进行普通的预测 

可能得到以下结果

而使用岭回归可能得到更好的结果,如下

再一次体现了正则化的作用(防止模型过拟合而降低泛化能力) 

我们也可以看一个代码示例

分别用线性模型和加入正则的模型拟合数据

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

x = np.random.rand(100, 1)
y = 4 * x + np.random.rand(100, 1)


model1 = LinearRegression()
model1.fit(x, y)
print(model1.coef_)

model = Ridge(alpha=1)
model.fit(x, y)
print(model.coef_)

看看它们拟合的参数 

可以看到岭回归拟合的模型更简单(在这个实例中当然效果不好,这里只是为了演示它的作用,在实际情况中我们应该用指标测试模型是否过拟合了,再尝试使用岭回归)


Lasso回归

Lasso回归损失函数

Lasso回归公式和岭回归类似,只不过它的正则项是l1范数,它与岭回归的一个区别是它倾向于完全消除掉最不重要的特征

J(w)=MSE(w)+a*\sum_{i=1}^{n}\left | w \right |

则正则项为

a*\sum_{i=1}^{n}\left | w \right |

效果与岭回归相同

核心代码

以下是sklearn库使用Lasso回归的基本代码

from sklearn.linear_model import Lasso

model = Lasso(alpha=1)
model.fit(x, y)

alpha就是公式中的a参数,越小则代表正则程度越小 


弹性网络

弹性网络成本函数

弹性网络是岭回归于Lasso回归的中间地带,你可以控制r来控制其他两种正则化方法的混合程度,r为0时,弹性网络就是岭回归,为1时,弹性网络就是Lasso回归

J(w)=MSE(w)+ra\sum_{i=1}^{n}\left | w \right |+\frac{1-r}{2}a\sum_{i=1}^{n}w^{2}

正则项为

ra\sum_{i=1}^{n}\left | w \right |+\frac{1-r}{2}a\sum_{i=1}^{n}w^{2}

核心代码

以下是sklearn库使用弹性网络的基本代码

from sklearn.linear_model import ElasticNet

model = ElasticNet(alpha=0.1, l1_radio=0.5)
model.fit(x, y)

alpha对应公式中的a参数,l1_radio对应公式中的r 

结语

在具体任务中,我们应该用学习曲线或其他性能判断模型是否过拟合后再考虑使用正则化,同时根据不同特征选取不同的正则化方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1222621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32-0.96寸OLED通过低功耗蓝牙BLE通信显示出ESP32-BME280读取到的温湿度值

ESP32-0.96寸OLED通过低功耗蓝牙BLE通信显示出ESP32-BME280读取到的温湿度值 简介ESP32-BME280作为BLE Server手机作为BLE Client与ESP32-BME280 BLE Server通信ESP32-0.96寸OLED作为BLE Client与ESP32-BME280 BLE Server通信总结 简介 两个ESP32开发板,一个ESP32挂…

【Hello Go】Go语言复合类型

复合类型 分类指针基本操作new函数指针作为函数的参数 数组概述操作数据数组初始化数组比较在函数之间传递数组 slice概述切片的创建和初始化切片操作切片和底层数组关系内建函数appendcopy 切片作为函数传参 map概述创建和初始化常用操作赋值遍历 删除map作函数参数 结构体结构…

C语言青蛙爬井(ZZULIOJ1072:青蛙爬井)

题目描述 有一口深度为high米的水井,井底有一只青蛙,它每天白天能够沿井壁向上爬up米,夜里则顺井壁向下滑down米,若青蛙从某个早晨开始向外爬,对于任意指定的high、up和down值(均为自然数)&…

《rPPG》——(1)PyTorch——Windows环境配置

《rPPG》——(1)PyTorch——Windows环境配置 如何查看电脑是否已安装Python环境以及Python版本 anaconda对应python3.8的版本号是多少? 截止到我的知识截止日期(2022年1月),Anaconda支持Python 3.8的版本号是Anacond…

【数字人】7、GeneFace++ | 使用声音和面部运动系数的关系作为 condition 来指导 NeRF 重建说话头

文章目录 一、背景二、相关工作2.1 唇形同步的 audio-to-motion2.2 真实人像渲染 三、方法3.1 对 GeneFace 的继承3.2 GeneFace 的结构3.2.1 Pitch-Aware Audio-to-Motion Transform3.2.2 Landmark Locally Linear Embedding3.2.3 Instant Motion-to-Video Rendering 四、效果 …

C语言百钱买百鸡(ZZULIOJ1074:百钱买百鸡)

题目描述 百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用100文钱买100只鸡,公鸡、母鸡、小鸡各买多少只? 本程序要求解的问题是:给定一个正整数n,用n文钱买n只鸡&…

CentOS Linux release 7.9.2009 (Core)中安装配置Tomcat

一、安装JDK 部分内容可以参考我这篇文章:Windows11与CentOS7下配置与检测JDK与Maven环境变量 中的 2.2 安装jdk-8u371-linux-x64.tar.gz和配置环境变量/etc/profile //1、安装redhat-lsb yum install -y redhat-lsb//2、查看系统版本信息 lsb_release -a //3、查…

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

文章目录 最终效果前言简单绘制一下环境显示当前波数生成不同的敌人控制游戏运行速度游戏结束最终效果扩展源码完结最终效果 前言 本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。 简单绘制一下环境 环境可以按自己喜好,去找一些瓦片,想怎么配置怎…

ExoPlayer架构详解与源码分析(9)——TsExtractor

系列文章目录 ExoPlayer架构详解与源码分析(1)——前言 ExoPlayer架构详解与源码分析(2)——Player ExoPlayer架构详解与源码分析(3)——Timeline ExoPlayer架构详解与源码分析(4)—…

智能驾驶汽车虚拟仿真视频数据理解(一)

赛题官网 datawhale 赛题介绍 跑通demo paddle 跑通demo torch 提交的障碍物取最主要的那个?不考虑多物体提交。障碍物,尽可能选择状态发生变化的物体。如果没有明显变化的,则考虑周边的物体。车的状态最后趋于减速、停止,时序…

python→函数曲线

CSDN中公式一栏,亦可以插入Latex函数。 以函数 为例 也可以用Latex写如下代码: \documentclass{article} \usepackage{amsmath} \begin{document} \[ y \frac{n}{n30} \] \end{document} 如下: 那么,该函数图像如何呢&#xf…

vue+element实现多级表头加树结构

标题两种展示方式 方式一 完整代码: <template><div class"box"><el-tableref"areaPointTable":data"tableData"border:span-method"objectSpanMethod":header-cell-style"tableHeaderMerge"><el-ta…

数据库编程sqlite3库安装及使用

数据库编程 数据库的概念 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库是存放数据的仓库。它的存储空间很大&#xff0c;可以存放百万条、千万条、上亿条数据。但是数据库并不是…

一起学docker系列之五docker的常用命令--操作容器的命令

目录 前言1 启动容器2 查看容器3 退出容器4 启动已经停止的容器5 重启容器6 停止容器7 删除已经停止的容器8 启动容器说明和举例9 查看容器日志10 查看容器内运行的进程11 查看容器内部细节12 进入正在运行的容器并进行交互13 导入和导出容器结语 前言 当涉及到容器化技术&…

Java学习之路 —— 网络通信

文章目录 1. InetAddress2. UDP3. TCP4. 总结 1. InetAddress InetAddress的常用方法如下&#xff1a; public class InetAddressDemo {public static void main(String[] args) throws Exception{// 1. 获取本机IP地址对象InetAddress ip1 InetAddress.getLocalHost();Sys…

飞熊领鲜参加「第十届中国产业数字化大会」获创新企业数字化百强

11月16日至17日&#xff0c;托比网“第十届中国&#xff08;南京&#xff09;产业数字化大会”在南京举行。作为“中国&#xff08;南京&#xff09;电子商务大会”的一部分&#xff0c;本次会议由江苏省商务厅、南京市人民政府指导&#xff0c;南京市商务局、南京市鼓楼区人民…

Windows安装Java环境(OracleJDK)

在下载之前&#xff0c;我们先了解一下java的前世今生 1991年&#xff1a;Java 的前身 Oak 由 James Gosling 和他的团队在 Sun Microsystems 公司开发。1995年&#xff1a;Oak 更名为 Java&#xff0c;并在同年发布。Java 1.0 版本正式推出。1996年&#xff1a;Sun Microsyst…

wpf devexpress 添加GanttControl到项目

这个教程示范如何添加GanttControl 到你的项目使用内置GanttControl数据类。 要求 添加 Devexpress.Wpf.Gantt Nuget包到你的项目使用GanttControl. 数据模型 GanttControl携带和内置数据对象&#xff0c;可以使用创建视图模型&#xff1a; GanttTask 呈现甘特图任务 Gan…

web服务器练习---配置nginx三种虚拟主机

在做实验之前&#xff0c;大家先安装nginx服务&#xff0c;有两种安装方法&#xff1a; 1、rpm包安装&#xff08;安装过程简单&#xff0c;适用于学习阶段&#xff0c;方便测试&#xff09; 2、源码安装&#xff08;安装过程较为复杂&#xff0c;适用于生产环境&#xff09;…

每天一点python——day69

#字符串的比较操作使用的符号&#xff1a; >[大于]&#xff0c;>[大于等于]&#xff0c;<[小于]&#xff0c;<[小于等于]&#xff0c;[等于]&#xff0c;![不等于]#如图&#xff1a; #例子&#xff1a;比较原理释义&#xff1a;每个字符在计算机里面都有一个原始值…