有监督学习——线性回归

1. 线性模型

有监督学习是通过已知的样本产生预测模型的学习方法,任何有监督学习模型都可被想象成一个函数:

在这里插入图片描述

其中,\(x_1,x_2,x_3…x_n\)是模型的n维的特征值,\(y\)是要预测的目标值/分类,当\(y\)是可枚举的类型时,对应分类问题(classification);\(y\)为连续值时,该模型解决回归问题(regression)。

线性回归(Linear Regression)在机器学习中被用来解决学习特征和目标值都是连续值类型的问题,可定义为多项式函数:

在这里插入图片描述

线性模型学习的目标就是确定\(w_0 w_1…w_n\)的值,使\(y\)可以根据特征值直接通过函数计算得到,\(w_0\)成为截距,\(w_1…w_n\)被成为回归系数(coefficient)。

公式(2)可以有其他变体,注意:是否是线性模型取决于其被要求的系数\(w_0…w_n\)之间是否为线性关系,与样本特征变量\(x_0…x_n\)的形式无关。e.g.以下前者为线性模型,后者为非线性模型。

在这里插入图片描述

2. 最小二乘法

最简单的线性模型算法便是最小二乘法(Ordinary Least Squares, OLS),通过样本真值与预测值之间的方差和来达到计算出\(w_1,w_2…w_n\)的目的,即:

在这里插入图片描述

arg min就是使后面这个式子达到最小值时的变量的取值,其中\(\hat{y}\)是样本预测值,\(y\)是样本中的真值(ground truth)

在python使用

import numpy as np
from sklearn import linear_modelx = np.array([[0, 1], [3, -2], [2, 3]]) # 训练样本特征
y = np.array([0.5, 0.3, 0.9])   # 训练样本目标值reg = linear_model.LinearRegression()  # 最小二乘法回归对象
reg.fit(x, y)   # 训练、拟合print("intercept_:", reg.intercept_)    # 读取截距
# intercept_: 0.36666666666666686print("coef_:", reg.coef_)  # 读取回归参数
# coef_: [0.06666667 0.13333333]reg.predict([[1, 2], [-3, 9]]) # 预测
# array([0.7       , 1.36666667])

通过intercept_coef_属性可知道上述代码拟合的线性模型为:

在这里插入图片描述

最小二乘的不足

随着特征维度的增加,模型的求得的参数\(w_0 w_2…w_n\)的值显著增加,OLS始终试图最小化公式的值,因此为了拟合训练数据中很小的\(x\)的值差异产生的较大\(y\)值差异,必须使用较大的\(w\)值,结果是任何一个微小的变化都会导致最终预测目标值大幅度变化,即过拟合。请看:

# 测试数据
def make_data(nDim):x0 = np.linspace(1, np.pi, 50)  # 一个维度的特征x = np.vstack([[x0,], [i**x0 for i in range(2, nDim+1)]])   # nDim个维度的特征y = np.sin(x0) + np.random.normal(0, 0.15, len(x0)) # 目标值return x.transpose(), y
x, y = make_data(12)

使用最小二乘法拟合:

def linear_regression():dims = [1,3,6,12]   # 需要训练的维度for idx, i in enumerate(dims):plt.subplot(2, int(len(dims)/2), idx+1)reg = linear_model.LinearRegression()sub_x = x[:, 0:i]   # 取x中前i个维度的特征reg.fit(sub_x, y)   # 训练plt.plot(x[:,0], reg.predict(sub_x))    # 绘制模型plt.plot(x[:,0], y, '.')plt.title("dim %s"%i)print("dim %d :"%i)print("intercept_: %s"%(reg.intercept_))    # 查看截距参数print("coef_: %s"%(reg.coef_))  # 查看回归参数plt.show()linear_regression()
## 输出
# dim 1 :
# intercept_: 1.5190767802159115
# coef_: [-0.39131134]
# dim 3 :
# intercept_: 1.1976858427101735
# coef_: [ 1.91353693 -1.39387114  0.16182502]
# dim 6 :
# intercept_: -221.70126917849046
# coef_: [-104.46259453  520.30421899 -573.61812163  429.72658285 -181.37364277
#    32.5448376 ]
# dim 12 :
# intercept_: -7992016.158635169
# coef_: [-1.83126880e+06  5.87461130e+07 -2.99765476e+08  9.72248992e+08
#  -1.92913886e+09  2.18748658e+09 -8.81323910e+08 -1.12973621e+09
#   2.01475457e+09 -1.40758872e+09  4.94058411e+08 -7.17485861e+07]

在这里插入图片描述

可以明显看到dim=12已经过拟合了

3. 岭回归

岭回归(Ridge Regression 或称Tikhonov Regularization)由俄罗斯科学家Tikhonov提出,通过改变回归目标系数,达到了控制回归参数随着维度疯狂增长的目的。新的回归函数:

在这里插入图片描述

OLS的差别在于将\(\alpha\sum w^2\)加入最小化目标(也被称为L2惩罚项,即L2 Penalty),其中\(\alpha\)是一个可调节的超参数,\(w\)是线性模型中的所有参数。

Ridge与原来的LinearRegression类使用方法相似,只是在初始化对象需要超参数α

def ridge_regression():alphas = [1e-15, 1e-12, 1e-5, 1, ]      # α参数for idx, i in enumerate(alphas):plt.subplot(2, int(len(alphas)/2), idx+1)reg = linear_model.Ridge(alpha=i)  # 岭回归模型sub_x = x[:, 0:12]   # 取x中前i个维度的特征reg.fit(sub_x, y)   # 训练plt.plot(x[:,0], reg.predict(sub_x))    # 绘制模型plt.plot(x[:,0], y, '.')plt.title("dim=12, alpha=%e"%i)print("alpha %e :"%i)print("intercept_: %s"%(reg.intercept_))    # 查看截距参数print("coef_: %s"%(reg.coef_))  # 查看回归参数plt.show()
ridge_regression()
#输出结果
# dim 1 :
# intercept_: 1.5190767802159115
# coef_: [-0.39131134]
# dim 3 :
# intercept_: 1.1976858427101735
# coef_: [ 1.91353693 -1.39387114  0.16182502]
# dim 6 :
# intercept_: -221.70126917849046
# coef_: [-104.46259453  520.30421899 -573.61812163  429.72658285 -181.37364277
#    32.5448376 ]
# dim 12 :
# intercept_: -7992016.158635169
# coef_: [-1.83126880e+06  5.87461130e+07 -2.99765476e+08  9.72248992e+08
#  -1.92913886e+09  2.18748658e+09 -8.81323910e+08 -1.12973621e+09
#   2.01475457e+09 -1.40758872e+09  4.94058411e+08 -7.17485861e+07]

在这里插入图片描述

比较OLS模型的12维结果,模型参数\(w\)显著降低。并且\(\alpha\)参数大小与训练结果成反比:\(\alpha\)越大,回归参数越小,模型越平缓。

3. Lasso回归

Ridge已经可以解决了多特征情况下参数太大导致的过度拟合,但在该模型中,无论\(\alpha\)多大,回归模型都存在绝对值极小的参数,难以到达零值,这部分参数对最终预测结果影响甚微但消耗计算资源,因此需要将不重要的特征参数计算为零,即压缩特征。这便是Lasso回归:

在这里插入图片描述

对上面的代码略作修改

def lasso_regression():alphas = [1e-12, 1e-5, 1, 10]      # α参数for idx, i in enumerate(alphas):plt.subplot(2, int(len(alphas)/2), idx+1)reg = linear_model.Lasso(alpha=i)  # Lasso模型sub_x = x[:, 0:12]   # 取x中前12个维度的特征reg.fit(sub_x, y)   # 训练plt.plot(x[:,0], reg.predict(sub_x))    # 绘制模型plt.plot(x[:,0], y, '.')plt.title("dim=12, alpha=%e"%i)print("alpha %e :"%i)print("intercept_: %s"%(reg.intercept_))    # 查看截距参数print("coef_: %s"%(reg.coef_))  # 查看回归参数plt.show()
lasso_regression()
## 输出
# alpha 1.000000e-12 :
# intercept_: 0.6298258513945978
# coef_: [ 1.22542814e+00 -4.54947716e-01 -3.93085543e-02 -5.49725917e-03
#  -5.88010501e-04  2.47220823e-04  3.36442748e-04  2.85372733e-04
#   2.20237636e-04  1.66111569e-04  1.25225041e-04  9.51371122e-05]
# alpha 1.000000e-05 :
# intercept_: 0.6275025198172812
# coef_: [ 1.21848162e+00 -4.48693464e-01 -4.01246675e-02 -5.58492834e-03
#  -6.02833485e-04  2.41969131e-04  3.37470151e-04  2.86500656e-04
#   2.21159502e-04  1.66823390e-04  1.25767364e-04  9.55513093e-05]
# alpha 1.000000e+00 :
# intercept_: 0.9304502324995079
# coef_: [-0.00000000e+00 -0.00000000e+00 -0.00000000e+00 -0.00000000e+00
#  -0.00000000e+00 -0.00000000e+00 -0.00000000e+00 -0.00000000e+00
#  -0.00000000e+00 -6.76060251e-04 -7.30714077e-05 -0.00000000e+00]
# alpha 1.000000e+01 :
# intercept_: 0.9076753246287685
# coef_: [-0.        -0.        -0.        -0.        -0.        -0.
#  -0.        -0.        -0.        -0.        -0.        -0.0004185]

在这里插入图片描述

最后的最后

感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。

因为这个行业不同于其他行业,知识体系实在是过于庞大,知识更新也非常快。作为一个普通人,无法全部学完,所以我们在提升技术的时候,首先需要明确一个目标,然后制定好完整的计划,同时找到好的学习方法,这样才能更快的提升自己。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

五、面试资料

我们学习AI大模型必然是想找到高薪的工作,下面这些面试题都是总结当前最新、最热、最高频的面试题,并且每道题都有详细的答案,面试前刷完这套面试题资料,小小offer,不在话下。
在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

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

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

相关文章

11.docker镜像分层dockerfile优化

docker镜像的分层(kvm 链接克隆,写时复制的特性) 镜像分层的好处:复用,节省磁盘空间,相同的内容只需加载一份到内存。 修改dockerfile之后,再次构建速度快 分层:就是在原有的基础镜像上新增了服…

2024 年最新 Python 基于百度智能云实现短语音识别、语音合成详细教程

百度智能云语音识别 采用国际领先的流式端到端语音语言一体化建模算法,将语音快速准确识别为文字,支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景…

CSS实现经典打字小游戏《生死时速》

🌻 前言 CSS 中有这样一个模块:Motion Path 运动模块,它可以使元素按照自定义的路径进行移动。本文将为你讲解这个模块属性的使用,并且利用它实现我小时候电脑课经常玩的一个打字游戏:金山打字的《生死时速》。 &…

ERP、CRM、MRP、PLM、APS、MES、WMS、SRM系统介绍

一、ERP系统 ERP系统,即企业资源计划(Enterprise Resource Planning)系统,是一种集成管理软件系统,旨在帮助企业实现资源的有效管理和优化。以下是对ERP系统的详细介绍: 1、定义与功能 ERP是企业资源计划…

小白跟做江科大32单片机之定时器

原理部分 1. 计数器每遇到一个上升沿就会计数值1,。 72MHZ72000000 72000000/65536/655360.0167638063430786132812559.652323555555554 (s) 2. 3. 计数时钟每来一个上升沿,计数值1,自动运行。如果计数值与存储在自动重装载寄存器中的值相等&#…

2024年心理学研究、现代化教育与社会发展国际学术会议(PRMESD 2024)

2024年心理学研究、现代化教育与社会发展国际学术会议(PRMESD 2024) 2024 International Conference on Psychological Research, Modern Education and Social Development 会议地点:南京,中国 网址:www.prmesd.com 邮箱: prmesdsub-con…

杨氏矩阵和杨辉三角的空间复杂度较小的解题思路

文章目录 题目1 杨氏矩阵题目2 杨辉三角 题目1 杨氏矩阵 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求:时间复杂度小于O(N); 思路: 我们可以通过题目…

谷歌重塑Transformer:无限记忆力,无限长输入,登上Nature

Infini-attention机制为Transformer在具有挑战性的长语境任务中释放出了新的能力,对于调整现有模型以适应长输入也非常实用。 谷歌的最新研究成果Infini-attention机制(无限长注意力)将内存压缩引入了传统注意力机制,并在单个Tra…

Github 2024-06-15Rust开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-15统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1JavaScript项目1Deno: 现代JavaScript和TypeScript运行时 创建周期:2118 天开发语言:Rust, JavaScript协议类型:M…

重装了mysql,然后安装为服务时,net start 启动一直报错,MySQL服务无法启动的解决

之前写过一篇关于安装mysql的文章,按上面的处理,基本上是可以的。 今天换了下目录,重新安装,一直报错。 然后我们来看一下问题: mysqld -console 这里的目录是有问题的,设置的是:datadird:\to…

个人关于Leecode 49题见解(保姆级)

题目: 49. 字母异位词分组 中等 相关标签 相关企业 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "…

AI助力密码安全:利用机器学习提升密码安全性

信息安全已经成为了当今数字世界的一个核心问题,随着互联网技术使用场景的不断增加,创建和管理安全的密码已经成为了保证在线账户安全的关键要求。本文将研究和探讨如何利用人工智能(AI)和机器学习技术来提升密码的安全性。 学习目…

GraphQL(9):Spring Boot集成Graphql简单实例

1 安装插件 我这边使用的是IDEA,需要先按照Graphql插件,步骤如下: (1)打开插件管理 在IDEA中,打开主菜单,选择 "File" -> "Settings" (或者使用快捷键 Ctrl Alt S …

11.3 Go 标准库的使用技巧

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实体类status属性使用枚举类型的步骤

1. 问题引出 当实体类的状态属性为Integer类型时,容易写错 2. 初步修改 把状态属性强制为某个类型,并且自定义一些可供选择的常量。 public class LessonStatus {public static final LessonStatus NOT_LEARNED new LessonStatus(0,"未学习"…

QT打包(windows linux)封包 完整图文版

目录 简介: 一. for windows 1.首先下载组件 2.开始构建Release版本. 3.然后点击构建 4.在文件夹内直接点击exe文件,会报下面的错误,因为缺少dll连接; 5.需要把这个exe单独复制到一个文件夹内, 6.先cd到单独exe所在的文件夹; cd 文件路径 7.然后运行 windeployqt 文…

KIVY Tutorials » Pong Game Tutorial¶

1Pong Game Tutorial — Kivy 2.3.0 documentation Introduction Welcome to the Pong tutorial 欢迎来到 乒乓球 导师辅导课 This tutorial will teach you how to write pong using Kivy. We’ll start with a basic application like the one described in the Create …

笔记100:使用 OSQP-Eigen 对 MPC 进行求解的方法与代码

1. 前言: 我们在对系统进行建模的时候,为了减少计算量,一般都将系统简化为线性的,系统如果有约束,也是将约束简化为线性的; 因此本篇博客只针对两种常见系统模型的 MPC 问题进行求解: 线性系统…

【Android面试八股文】你知道如何实现非阻塞式生产者消费者模式吗?

文章目录 这道题想考察什么 ?考察的知识点日常生活中的生产者消费者模式生产者消费者模式简介为什么需要缓冲区?阻塞与非堵塞非阻塞式生产者消费者模式的实现非阻塞式生产者消费者模式的实现阻塞式生产者消费者模式实现特点这道题想考察什么 ? 是否了解非阻塞式生产者消费者…

S686量产工具授权版,S686开卡教程,S686+EMMC固态硬盘开卡量产成功记录

手里有个S686EMMC组合的固态硬盘,华澜微的S686主控,之前一直没找到工具,感觉是废了,一直放着,偶然机会从桌子里又找到它,于是继续搜寻量产工具。 找到量产部落的一篇文章,里面说首发了S686的量产…