机器学习算法详解2:线性回归

news2024/10/9 8:26:56

机器学习算法详解2:线性回归

前言

​ 本系列主要对机器学习上算法的原理进行解读,给大家分享一下我的观点和总结。

本篇前言

​ 本篇对线性回归的算法原理进行解读。

目录结构

文章目录

    • 机器学习算法详解2:线性回归
      • 1. 引子
      • 2. 原理
      • 3. 特点
      • 4. 问题解答
        • 4.1 问题1
        • 4.2 问题2
        • 4.3 问题3
      • 5. 广义线性回归
      • 6. 岭回归与lasso回归
      • 7. 总结

1. 引子

​ 我们有这样的数据:(瞎编的)

薪资/万元每年所住房子价格/万元
10100
20150
30300
50500
1001000

​ 画出图如下:

在这里插入图片描述

​ 那么,问题是:如果一个人的工资是60万每年,那么他所住的房价大概在多少?这个问题很好解决,我们从图中可以看出数据符合线性分布,我们可以画一条直线拟合这些数据点,然后代入新数据60,就可以得出对应的结果,如下图所示:

在这里插入图片描述

如何求出这条直线就是线性回归要解决的问题

2. 原理

​ 线性回归分为二元线性回归和多元线性回归,同时也是一个数学解释性非常强的算法,也因此通常作为第一个学习的机器学习算法

​ 公式推导过程如下:(需要一点点矩阵微分的知识+矩阵可逆判定知识

在这里插入图片描述

3. 特点

​ 线性回归的主要特点是:

  • 抗冗余
y = w1 * x1 + w2 * x2 + b
假设x1与x2特征相同,那么可以变化为:y = (w1+w2)x1 + b = wx + b
  • 抗噪声
y = w1 * x1 + w2 * Δ + b
假设Δ为噪声,那么学习完成后w2=0,结果为y = w1*x1 + b

4. 问题解答

4.1 问题1

问题:为什么损失函数不用MAE

​ 假设有以下的数据值:

y-yiMAEMAE间差值MSEMSE间差值
5525
441(5-4)169
331(4-3)97
22145
11113

​ 不难从上表看出,MAE并没有倾向性,MSE具有倾向性。可以这么解释,对于机器学习模型来说,学习数据,肯定是先学习到那些容易学习到的性质,当学习到一定程度,如果再继续学已经学习过的知识收益肯定变小了,而对于MAE而言,他感受不到收益变小了,因为每次学习的知识都差1,但是对于MSE而言,就可以明显感觉到收益降低,因此它会主动去学习新知识以提高收益。

4.2 问题2

问题:对于线性回归而言,是不是拟合函数y=w0*x+w1*x2+w2*x3…越多越好

​ 答:是的,可以这么解释:

y1 = w0 * x + w1 * x^2
y2 = w0 * x

对于y1而言,只要w1=0就退化到了y2,自然y1的性能至少都要比y2好

4.3 问题3

问题:这里线性回归不是求解出来了解析解吗?为什么sklearn库实现那些算法仍然是通过梯度优化算法呢

​ 其实,如果让你我来实现线性回归,肯定是用解析解来实现的。但是对于写库的人来说,肯定需要考虑到通用性,他只需要写一个通用的梯度算法就可以实现绝大部分算法的优化。

​ 因此,对于有解析解的算法,你可以自己从底层来实现它,也可以选择使用梯度下降算法来实现它

5. 广义线性回归

​ 如下图所示:

在这里插入图片描述

​ 可以明显看出这个拟合曲线应该是:y=w1x^2 + w2x + w0,我们可以令x^2=A,x=B,那么曲线变为y=w1A+w2B+w0,此时变为了直线方程,将该直线称之为广义线性回归

​ 由这个思路,可以推导出逻辑回归这个算法的出现。

6. 岭回归与lasso回归

​ 在上一篇中讲解了正则化的知识,而对于线性回归引入正则化公式,就得到了岭回归和lasso回归,损失函数分别如下:(图来自此)

在这里插入图片描述

​ 两者的区别可以我这篇博客:《深入机器学习1:详解正则表达式》。另外,需要注意的是岭回归还可以解决多元线性回归中矩阵不可逆的现象(同样在这篇文章中进行了解释)。

7. 总结

​ 本篇介绍了线性回归的应用、公式推导、特点以及其推广。线性回归是很简单的算法,但是在实际任务中应用也比较多。

​ 下一篇,介绍逻辑回归。

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

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

相关文章

如何使用SQL SERVER的OpenQuery

如何使用SQL SERVER的OpenQuery 一、OpenQuery使用说明二、 OpenQuery语法2.1 参数说明2.2注解 三、示例3.1 执行 SELECT 传递查询3.2 执行 UPDATE 传递查询3.3 执行 INSERT传递查询3.4 执行 DELETE 传递查询 一、OpenQuery使用说明 在指定的链接服务器上执行指定的传递查询。 …

领域驱动设计:DDD 关键概念

文章目录 领域和子域核心域、通用域和支撑域通用语言限界上下文实体值对象聚合聚合根设计聚合 DDD 的知识体系提出了很多的名词,像:领域、子域、核心域、通用域、支撑域、限界上下文、聚合、聚合根、实体、值对象等等,非常多。 领域和子域 …

每日一题(两数相加)

每日一题(两数相加) 2. 两数相加 - 力扣(LeetCode) 思路 思路: 由于链表从头开始向后存储的是低权值位的数据,所以只需要两个指针p1和p2,分别从链表的头节点开始遍历。同时创建一个新的指针new…

记录窗体关闭位置(从窗体上次关闭的位置启动窗体)

从上次关闭位置启动窗体 基础类 using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq;namespace WindowsFormsApp1 {public class Reg{public static voi…

OpenCV 12(图像直方图)

一、图像直方图 直方图可以让你了解总体的图像像素强度分布,其X轴为像素值(一般范围为0~255),在Y轴上为图像中具有该像素值像素数。 - 横坐标: 图像中各个像素点的灰度级. - 纵坐标: 具有该灰度级的像素个数. 画出上图的直方图: …

算法刷题记录-其他类型(LeetCode)

57 57. Insert Interval 思路 模拟 用指针去扫 intervals,最多可能有三个阶段: 不重叠的绿区间,在蓝区间的左边有重叠的绿区间不重叠的绿区间,在蓝区间的右边 逐个分析 不重叠,需满足:绿区间的右端&…

第 2 章 线性表 ( 双链循环线性表(链式存储结构)实现)

1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_NULL_PTR…

2023 年最新Java 毕业设计选题题目参考,500道 Java 毕业设计题目,值得收藏

大家好,我是程序员徐师兄,最近有很多同学咨询,说毕业设计了,不知道选怎么题目好,有哪些是想需要注意的。 确实毕设选题实际上对很多同学来说一个大坑, 每年挖坑给自己跳的人太多太多,选题选得好…

JavaScript关于对象的小挑战

让我们再来看看马克和约翰比较他们的体重指数的情况吧! 这一次,让我们用物体来实现计算! 记住:BMI质量/身高**2质量/(身高*高度)。(质量以公斤为单位,身高以米为单位) 为他们每个人创建一个对象,其属性为全…

MySQL触发器使用指南大全

一、介绍 触发器是与表有关的数据库对象,指在insert/update/delete之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性,日志记录,数据校验等操作。 使用别名OLD和NEW来引…

【操作系统实验】进程管理与内存分配模拟程序-含可运行有界面的Python代码

本文是博主之前做的操作系统实验,现在将完整代码和效果图免费放在下面,供大家参考,如果觉得有用,希望大家可以三连关注支持!!!!!! 实验目的 设计编写OS进程…

15. 线性代数 - 克拉默法则

文章目录 克拉默法则矩阵运算Hi,大家好。我是茶桁。 上节课我们在最后提到了一个概念「克拉默法则」,本节课,我们就来看看到底什么是克拉默法则。 克拉默法则 之前的课程我们一直在强调,矩阵是线性方程组抽象的来的。那么既然我们抽象出来了,有没有一种比较好的办法高效…

合宙Air724UG LuatOS-Air LVGL API控件-二维码(Qrcode)

二维码(Qrcode) 示例代码 qrcodelvgl.qrcode_create(lvgl.scr_act(),nil)lvgl.qrcode_set_txt(qrcode,"https://doc.openluat.com/home")lvgl.obj_set_size(qrcode,400,400)lvgl.obj_align(qrcode, nil, lvgl.ALIGN_CENTER, 0, 0)创建 可以通…

496. 下一个更大元素 I

class Solution { public:vector<int> nextGreaterElement(vector<int>& nums1, vector<int>& nums2) {// 存储numx2右侧第一个比它的元素数值std::unordered_map<int, int> index;std::stack<int> sta;for (int i nums2.size()-1; i &…

uniapp项目实践总结(十四)封装存储和路由方法

导语&#xff1a;在日常 APP 开发过程中&#xff0c;经常要用到数据的存储、获取和删除等操作以及页面导航之间的跳转&#xff0c;为此&#xff0c;封装了一个两个简单的方法来统一调用。 目录 原理分析方法实现实战演练案例展示 原理分析 主要是以下 API。 uni.setStorage…

xcode iOS 在app文件中开启访问 Document Directory

xcode iOS 在app文件中开启访问 Document Directory 在 Plist 中设置 LSSupportsOpeningDocumentsInPlace为 YES 且UIFileSharingEnabled为 YES &#xff08;这个不添加好像也可以&#xff09; 可以从系统的Files应用中访问应用的 Documents 目录 电脑 助手也可以访问 开…

视频号挂公众号链接最新教程方法,赶紧来看

玩视频号的朋友&#xff0c;尤其是靠挂公众号引流的朋友&#xff0c;肯定心里非常清楚&#xff0c;就在八月初&#xff0c;视频号放大招了&#xff0c;可以说这个大招是完全把公众号的路给堵死了&#xff0c;视频号出了什么新规呢&#xff0c;大家来看看。 第一个规则是&#…

无涯教程-JavaScript - IMTAN函数

描述 IMTAN函数以x yi或x yj文本格式返回复数的切线。复数的切线由以下公式计算- tan(z)正弦(z)/cos(z) 语法 IMTAN (inumber)争论 Argument描述Required/OptionalInumberA complex number for which you want the tangent.Required Notes Excel中的复数仅存储为文本。…

最新keil安装出现的无数问题记录及解决办法

报错问题现象如下&#xff1a; *** Target Target 1 uses ARM-Compiler Default Compiler Version 5 which is not available. 安装最新keil 5 出现无数个问题。 我使用GD32去跑&#xff0c;或者STM32去跑&#xff0c;都是这个问题。 一、我先解决了GD32的问题&#xff1a;…

阻塞队列学习总结

ArrayBlockingQueue&#xff1a;一个由数组结构组成的有界阻塞队列。 LinkedBlockingQueue&#xff1a;一个由链表结构组成的有界阻塞队列。 PriorityBlockingQueue&#xff1a;一个支持优先级排序的无界阻塞队列。 DelayQueue&#xff1a;一个使用优先级队列实现的延迟无界…