机器学习算法之线性回归的推导及应用

机器学习实战:多变量线性回归的实现 多元线性回归其实方法和单变量线性回归差不多,我们这里直接给出算法: computeCostMulti函数 function J = computeCostMulti(X, y, theta) m = length(y); % number of training examples J = 0; predictions = X * theta; J = 1/(2*m)* 阅读详情

“

阅读本文大概需要 10 分钟。

”

之前说过会陆续写一些基本的机器学习算法的原理、推导和应用的文章,今天开始连载啦。

每篇文章的思路是这样的:

  • 通过实例引入这个算法的使用场景

  • 公式详细推导这个算法的实现原理

  • 借助 Python 类库来进行具体实践

如果大家觉得有哪些可以优化的地方可以留言给我,我会慢慢完善的。再后面会陆续放送各个机器学习算法、深度学习模型及相关的实例实践,希望对大家有帮助。

今天首先讲解最基本的机器学习算法,线性回归。

线性回归是机器学习中最基本的算法了,一般要学习机器学习都要从线性回归开始讲起,本节就对线性回归做一个详细的解释。

实例引入

在讲解线性回归之前,我们首先引入一个实例,张三、李四、王五、赵六都要贷款了,贷款时银行调查了他们的月薪和住房面积等因素,月薪越高,住房面积越大,可贷款金额越多,下面列出来了他们四个人的工资情况、住房面积和可贷款金额的具体情况:

姓名工资(元)房屋面积(平方)可贷款金额(元)
张三60005830000
李四90007755010
王五110008973542
赵六150005463201

看到了这样的数据,又来了一位孙七,他工资是 12000 元,房屋面积是 60 平,那他大约能贷款多少呢?

思路探索

那这时候应该往哪方面考虑呢?如果我们假定可贷款金额和工资、房屋面积都是线性相关的,要解决这个问题,首先我们想到的应该就是初高中所学的一次函数吧,它的一般表达方式是 , 就是自变量, 就是因变量, 是自变量的系数, 是偏移量,这个式子表明  和  是线性相关的, 会随着  的变化而呈现线性变化。

现在回到我们的问题中,情况稍微不太一样,这个例子中是可贷款金额会随着工资和房屋面积而呈现线性变化,此时如果我们将工资定义为 ,房屋面积定义为 ,可贷款金额定义为 ,那么它们三者的关系就可以表示为: ,这里的自变量就不再是一个了,而是两个,分别是  和 ,自变量系数就表示为了  和 ,我们将其转化为表达的形式,同时将变量的名字换一下,就成了这个样子:

这里只不过是将原表达式转为函数形式,换了个表示名字,另外参数名称从  换成了 , 换成了 ,为什么要换?因为在机器学习算法中  用的更广泛一些,约定俗成。

然后这个问题怎么解?我们只需要求得一组近似的  参数使得我们的函数可以拟合已有的数据,然后整个函数表达式就可以表示出来了,然后再将孙七的工资和房屋面积代入进去,就求出来他可以贷款的金额了。

思路拓展

那假如此时情景变一变,变得更复杂一些,可贷款金额不仅仅和工资、房屋面积有关,还有当前存款数、年龄等等因素有关,那我们的表达式应该怎么写?不用担心,我们有几个影响因素,就写定义几个变量,比如我们可以将存款数定义为 ,年龄定义为 ,如果还有其他影响因素我们可以继续接着定义,如果一共有  个影响因素,我们就定义到 ,这时候函数表达式就可以变成这样子了:

这个式子看起来挺长的不好写的吧,我们可以使用求和公式写成如下形式:

如果要使得这个公式成立,这里需要满足一个条件就是 ,其实在实际场景中  是不存在的,因为第一个影响因素我们用  来表示了,第二个影响因素我们用  来表示了,依次类推。所以这里我们直接指定  即可。

后来我们又将公式简化为线性代数的向量表示,这里  是  向量转置的结果,而  向量又表示为 ,同样地, 向量可以表示为 ,总之,表达成后面的式子,看起来更简洁明了。

好了,这就是最基本的线性判别解析函数的写法,是不是很简单。

实际求解

那接下来我们怎样实际求解这个问题呢?比如拿张三的数据代入到这个函数表达式中,这里还是假设有两个影响因素,张三的数据我们可以表示为 ,注意这里我们在数据的右上角加了一个小括号,里面带有数字,如果我们把张三的数据看成一个条目,那么这个数字就代表了这个条目的序号,1 就代表第一条数据,2 就代表第二条数据,为啥这么写?也是约定俗成,以后也会经常采用这样的写法,记住就好了。

所以,我们的愿景是要使得我们的函数能够拟合当前的这条数据,所以我们希望是这样的情况:

其中  是真实值,但我们知道,哪有那么容易十全十美,丝毫不差的拟合函数,所以上面的式子一般来说是不成立的,函数计算值和真实值还是多少还是有一定的误差的吧,如果我们想知道函数真实拟合的结果的话,我们需要把  变量代入函数,会得到一个函数本身拟合的结果,是这样的:

这里的  就是我们函数得到的结果了。一般来说,二者是会存在一定的误差的,所以误差我们一般可以写成他们的差的绝对值或平方的形式,使用绝对值或平方的目的是消去正负号的影响,比如写成平方的形式就是这样子:

这个式子就是我们函数真实拟合值和真实值之间的差距,没问题吧。

相应的,如果是李四的数据,误差就可以写为:

依次类推,如果是第  条数据,误差就可以写成:

要使得我们的函数对所有的数据都能尽量很好地拟合,我们可以把这些误差加起来求个平均,假设一共  条数据,那么所有数据的误差可以写成如下形式:

注意这里  指的是第几条数据,是从 1 开始的,一直到  为止,然后使用了求和公式对每一条数据的误差进行累加和,最后除以了 ,我们的最终目的就是找出合适的 ,使得这个  的值最小,即误差最小,在机器学习中,我们就把  称为损失函数(Loss Function),即我们要使得损失值最小。

有的小伙伴可能好奇损失函数前面为什么是 ,而不是 ?因为我们后面要用到这个算式的导数,所以这里多了个 2 是为了便于求导计算。况且一个表达式要求最小值,前面乘一个常数是对结果没影响的。

求解过程

由于我们求解的是线性回归问题,所以整个损失函数的图像非常简单清晰,如果只有  和  两个参数,我们甚至可以直接画出其图像,整个损失函数大小随  和  的变化实际上类似于这样子:

可以看到这是一个凸函数,竖轴代表损失函数的大小,横纵两轴代表  和  的变化,可见在中间的最低谷损失函数取得最小值,这时候损失函数在  和  上的导数都是 0,因此我们可以一步到位,直接用偏导置零的方式来求解损失函数取得最小值时的  值的大小。

所以我们可以先对每个  求解其偏导结果,这里  表示为 ,代表  中的某一维:

直接将偏导置零即可直接求解 :
   

这里将所有数据代入,即可通过求解方程组的形式直接解出  的值,但这些方程组里面其实  之间存在彼此依赖关系,需要联立求解出来。

如果不用这种求解方式,我们可以使用梯度下降的方式来进行求解,在这里  只需要逐步更新即可:

这里  就是学习率, 每经过一步都会进行一次更新,得到新的结果,经过梯度下降过程, 都会更新为使得梯度最小化的数值,最后就完成了  的求解。

以上便是线性回归的整个推导和求解过程。

实战操作

现在呢,我们想要根据前面的数据来求解这个真实的问题,为了解决这个问题,我们在这里用 Python 的 Sklearn 库来实现。

对于线性回归来说,Sklearn 已经做好了封装,直接使用 LinearRegression 即可。

它的 API 如下:

class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)

参数解释如下:

  • fit_intercept : 布尔值,是否使用偏置项,默认是 True。

  • normalize : 布尔值,是否启用归一化,默认是 False。当 fit_intercept 被置为 False 的时候,这个参数会被忽略。当该参数为 True 时,数据会被归一化处理。

  • copy_X : 布尔值,默认是 True,如果为 True,x 参数会被拷贝不会影响原来的值,否则会被复写。

  • n_jobs:数值或者布尔,如果设置了,则多核并行处理。

属性如下:

  • coef_:x 的权重系数大小

  • intercept_:偏置项大小

代码实现如下:

from sklearn.linear_model import LinearRegression

x_data = [
    [6000, 58],
    [9000, 77],
    [11000, 89],
    [15000, 54]
]
y_data = [
    30000, 55010, 73542, 63201
]

lr = LinearRegression()
lr.fit(x_data, y_data)
print('方程为:y={w1}x1+{w2}x2+{b}'.format(w1=round(lr.coef_[0], 2),
                                       w2=round(lr.coef_[1], 2),
                                       b=lr.intercept_))
x_test = [[12000, 60]]
print('住房面积为:', lr.predict(x_test)[0])

运行结果:

方程为:y=4.06x1+743.15x2+-37831.862532707615
住房面积为:55484.33779181102

在这里我们首先声明了 LinearRegression 对象,然后将数据整合成 x_data 和 y_data 的形式,然后通过调用 fit() 方法来对数据进行拟合。

拟合完毕之后,LinearRegression 的 coef_ 对象就是各个 x 变量的权重大小,即对应着 ,intercept_ 则是偏移量,对应着 ,这样我们就可以得到一个线性回归表达式了。

然后我们再调用 predict() 方法,将新的测试数据传入,便可以得到其预测结果,最终结果为 55484.34,即孙七的可贷款额度为 55484.34 元。

以上便是机器学习中线性回归算法的推导解析和相关调用实现。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~

吴恩达Coursera机器学习课程核心内容实战项目 基尼不纯度(Gini Impurity)是另一种衡量数据集混乱程度的指标,主要用于CART(Classification and Regression Trees)算法中的分类树。其定义为:其中 $p_i$ 为第 $i$ 类在数据集中的占比。基尼不纯度反映随机抽取两个样本其类别不同的概率。当所有样本同属一类时,$G(D)=0$;当各类等概率分布时,$G(D)$ 最大,为 $1 - \frac{1}{C}$。 阅读详情

相关推荐

PC微信逆向) 读取内存联系人链表

首先从一些网络上搜索到的信息可以得出联系人列表是保存在内存里的,并且是全局变量不会被释放,所以我们可以通过搜索某个联系人的信息来定位

Qwertyuiop2016的博客 2921

线性回归算法

线性回归算法概述 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。线性回归模型是相对简单的回归模型,对一个或多个自变量之间的线性关系进行建模,可用最小二乘法求模型函数。 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。 ......

unhurried人生——冕临的博客 7872

OpenGL纹理贴图

OpenGL纹理1. 基本概念2. 纹理环绕方式3. 纹理过滤3.1 GL_NEAREST3.2 GL_LINEAR3.3 多级渐远纹理 (Mipmap)4. 纹理加载与创建4.1 纹理加载4.2 纹理创建4.3 纹理的使用 1. 基本概念 纹理是一个2D图片(甚至也有1D和3D的纹理),它可以用来表示物体的细节特征,希望绘制一个有足够多细节的物体,当然可以用足够多的顶点颜色来描述,但是无疑也增加了许多额外的开销;另一种办法就是使用纹理。 学习之前先展示一张实现的纹理图以更好理解纹理! 还是这张图为了将纹

牵LV小猪精的博客 8931

线性回归的原理、公式推导、Python实现和应用

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

沉思中考拉的博客 407

Spring Boot:如何快速搭建一个高性能微服务架构?

通过本文的详细步骤,我们成功搭建了一个高性能的微服务架构。Spring Boot 和 Spring Cloud 提供了强大的工具链,使得开发者能够快速实现服务注册与发现、负载均衡、熔断器与降级机制等功能。同时,通过数据库连接池、Redis 缓存和异步处理等优化手段,进一步提升了系统的性能和可靠性。希望本文能够帮助你快速入门 Spring Boot 微服务架构的搭建,并为实际项目提供参考。如果你有任何问题或建议,欢迎在评论区留言!

shrgegrb的博客 1013

在 ABAP 环境中构建自定义健康监控指标:面向 SAP Cloud ALM 与 SAP Focused Run 的完整实践

本文介绍了在ABAP环境中开发自定义健康监控指标的方法。主要内容包括:1)标准监控指标的不足,如无法反映业务应用层面的问题;2)自定义监控架构,通过metric provider定义指标,由采集作业周期性获取数据并存储;3)核心实现技术,包括IF_GSM_API_PROVIDER接口和三个关键方法;4)指标从ABAP推送到SAP Cloud ALM/Focused Run的完整流程;5)开发实践步骤,从业务分析到具体实现。该方案可帮助团队监控业务关键指标,提升系统运维能力。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 266

机器学习算法(2)—— 线性回归算法

线性回归算法1. 线性回归简介2. 线性回归的用法2. 线性回归的损失与优化2.1 损失函数2.2 优化算法2.2.1 正规方程2.2.2 梯度下降 1. 线性回归简介 线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 注意: 只有一个自变量的情况称为单变量回归,多于一个自变量情况的叫做多元回归 特征值与目标值之间建立了一个关系,这个关系可以理解为线性模型。 线性回归当中主要有两种模型,一种是线性关系,另一

hu_wei123的博客 6443

浏览器解析HTML的过程及编程实现

需要注意的是,上述示例代码只是简化的演示,并未涵盖浏览器解析HTML的所有细节和复杂性。实际上,浏览器的HTML解析引擎还会处理一系列的特殊情况、错误容错和性能优化等方面的内容,以确保能够正确解析各种类型的HTML代码。HTML(超文本标记语言)是构建网页的基础语言,浏览器负责将HTML代码解析并渲染成可视化的网页。本文将详细介绍浏览器解析HTML的过程,并提供相应的编程示例代码。希望以上内容能帮助您理解浏览器解析HTML的过程,并通过提供的示例代码更好地了解如何在编程中实现这一过程。

ByteJolt的博客 322

机器学习之线性回归实战及理论推导

机器学习之线性回归实战和理论推导

m0_61444179的博客 465

96.在 Vue 3 中使用 OpenLayers 探究加载 Point、Polygon 的极限

在前端 GIS(地理信息系统)开发中,OpenLayers 作为一个功能强大的 Web 地图库,广泛用于加载地图、渲染矢量数据(点、线、面)、叠加图层等场景。然而,当涉及到。

小彭的博客 1159

【车载以太网】Eth Stack Bringup

摘要:本文基于AUTOSAR架构,详细介绍了在TC3xx硬件平台上实现EthStack Bringup的全过程。作者通过配置MCAL和Davinci工具,完成了EthTrcv、Eth、EthIf、EthSM和TcpIp等模块的集成,并解决了16字节内存对齐和以太网速率不匹配等问题。最终实现了PC端与开发板的Ping通,并通过WireShark验证了数据包收发。文章总结了调试中的关键问题与解决方案,强调了实践的重要性,为后续EthStack的深入分析奠定了基础。

qq_36056498的博客 183

机器学习-线性回归的推导过程

表面理解的线性 对于给定的一组输入值x和输出值y,我们假定其关系为线性的,就会得出: y = kx+b,即我们在大学前接触到的最基本的线性方程,只要我们求出k和b来,就可以求出整条直线上的点,这就是很多人认为的线性: 简单来说很多人认为: 线性回归模型假设输入数据和预测结果遵循一条直线的关系 但是,这种理解是一叶障目。 线性的含义 线性回归模型是:利用线性函数对一个或多个自变量 (x 或 (x1...

frank的博客 7002

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【机器学习基础】机器学习入门核心算法:线性回归(Linear Regression)

机器学习入门核心算法:线性回归(Linear Regression)

weixin_43988131的博客 1647

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

机器学习之线性回归

今天看见一篇不错的关于机器学习的文章,感觉还是很有帮助! 部分内容为: 感兴趣的朋友可以点击原文连接进行查看 原文链接:https://mp.weixin.qq.com/s?__biz=MzI4ODY2NjYzMQ==&mid=2247484471&idx=1&sn=c90b4917c5d6dd4d2b785ad18f2c6f1f&chksm=ec3ba15%E2%80%A6 ...

qq_52536880的博客 132

机器学习——回归算法之线性回归

机器学习——回归算法之线性回归前言线性回归算法推导过程梯度下降1、批量梯度下降(GD)2、随机梯度下降(SGD)3、小批量梯度下降法(MBGD)代码实现 前言 机器学习算法按照“用途”可分为回归、分类、聚类、降维、模型选择和预处理,前面的几篇已经介绍完降维和预处理,从这篇开始更新回归、分类、聚类等算法。关于回归和分类的区别,请自行百度,这一篇介绍回归模型。 线性回归 一个数据集有m个样本:X={X...

macan的博客 432

机器学习第四周 线性回归算法

机器学习第四周 线性回归算法 一、学习目标: 简单线性回归:简单线性回归及最小二乘法的数据推导 实践:简单线性回归实现及向量化应用 多元线性回归:多选线性回归和正规方程解及实现 二、参考资料: 1.《模型之母:简单线性回归&最小二乘法》https://mp.weixin.qq.com/s/ESKQKi_1K_WPXNistizDVw 2.《模型之母:简单线性回归的代码实现》https:...

long636的专栏 415

【机器学习】【线性回归】梯度下降算法核心思想剖析和数学公式推导

假设函数训练数据集的假设函数(hypothesis function),又称模型函数:    代价函数评估假设函数精确度、拟合度的代价函数(cost function)    代价函数的核心功能:代价函数的函数值用来评估假设函数的精确度、拟合度。精确度、拟合度的比较对象是我们提供的训练数据集。如果有一组(θ0,θ1,……,θn)使得代价函数取得最小值,则将这组(θ_0,θ1,……,θn)对应的假设...

蔚蓝的天空Tom 7063

7. 机器学习基石-How can Machine Learn? - Linear Regression

How can Machine Learn? - Linear Regression How can Machine Learn? - Linear Regression 1. What is Regression 2. Linear Regression 1) Introduction of Linear Regression 2) Error Measurement of Linear Re

Boiler UP! 841

“30分钟”带你走进线性回归的世界,轻松学习互联网营销推荐算法!

本章主要介绍用于推荐系统的算法-线性回归算法的推导介绍,文章思路如下:由机器学习介绍,到监督学习,并重点介绍监督学习中回归问题里面的线性回归问题及推导。

weixin_43805705的博客 374

自用-算法相关

(更多相关)

weixin_72962069的博客 52

机器学习·day4梯度下降

梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θ_0,θ_1) 的最小值。

凯的博客 1213

深入浅出梯度下降算法

引言在机器学习中,梯度下降算法(Gradient Descent)是一个重要的概念。它是一种优化算法,用于最小化目标函数,通常是损失函数。简而言之,梯度下降帮助我们找到一个模型最优的参数,使得模型的预测更加准确。本文将深入探讨梯度下降算法的原理、公式以及如何在Python中实现这一算法。1. 梯度下降算法的理论基础1.1 什么是梯度?在数学中,梯度是一个向量,表示函数在某一点的变化率和方向。在多维...

红色石头的专栏 1175

【机器学习】深入浅出梯度下降算法

引言在机器学习中,梯度下降算法(Gradient Descent)是一个重要的概念。它是一种优化算法,用于最小化目标函数,通常是损失函数。简而言之,梯度下降帮助我们找到一个模型最优的参数,使得模型的预测更加准确。本文将深入探讨梯度下降算法的原理、公式以及如何在Python中实现这一算法。1. 梯度下降算法的理论基础1.1 什么是梯度?在数学中,梯度是一个向量,表示函数在某一点的变化率和方向。在多维...

fengdu78的博客 230
上一篇: 机器学习在各个领域的实际应用
下一篇: Python数据分析实战-奶牛放养率和牧草生长速率
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值