最小二乘法在线性回归中的用法

最小二乘法在线性回归中的用法

最小二乘法是1809年高斯在《天体运动论》中公开发表的一种计算方法。最小二乘法其实是一种“最佳猜测”的方法。想象一下,你有一些数据点,比如你朋友的身高和体重。你想找到一个简单的规则来描述这两者之间的关系。最小二乘法就是帮你找到一条直线,这条直线能够尽可能地接近所有的数据点。这样的直线不会完全通过所有的点(除非所有的点完全在一条直线上)。

可以看到最小二乘法在线性回归中和梯度下降起到的作用是非常类似的,都是去找到一条最优的直线来拟合数据。但差别在于梯度下降是通过一次次计算尝试而求出的结果,梯度下降的方法更通用。最小二乘法则是一组计算公式,直接将数据代入公式就可以获得结果。举个例子,有一个三角形,如果用梯度下降去求三角形的面积就是,随机写一个面积,去和三角形比较,然后如果小了就扩大,如果大了就缩小,慢慢去往三角形的面积去靠。而最小二乘法则是一上来就告诉你底*高/2就是三角形的面积,直接代入就行。

我们在之前的损失函数中已经推导过损失函数的由来:
J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x i ) − y ) 2 J(\theta) = \frac{1}{2} \sum_{i=1}^{n} (h_\theta(x_i) - y)^{2} J(θ)=21i=1n(hθ(xi)y)2
将平方展开:
J ( θ ) = 1 2 ∑ i = 1 n ( h θ ( x i ) − y ) ( h θ ( x i ) − y ) J(\theta) = \frac{1}{2} \sum_{i=1}^{n} (h_\theta(x_i) - y)(h_\theta(x_i) - y) J(θ)=21i=1n(hθ(xi)y)(hθ(xi)y)
我们理解一下上面的式子:即 h θ ( x i ) h_\theta(x_i) hθ(xi)【即计算出来的结果】- y y y【即实际结果】和自己相乘再把每个结果都加起来【求和】。
在矩阵中就可以表示为一行 X θ − y X\theta-y y和自己相乘,只有当一个列向量(竖矩阵)与其自身的转置(行向量)进行点乘时,结果才是一个标量。所以这里就需要把 ( X θ − y ) ⊤ (X\theta - y)^\top (y)放在前面进行计算:

J ( θ ) = 1 2 ( X θ − y ) ⊤ ( X θ − y ) J(\theta) = \frac{1}{2} (X\theta - y)^\top (X\theta - y) J(θ)=21(y)(y)
如下图,使用转置后(右图)的矩阵去和原矩阵点乘,就实现了每一个结果的累加(求和)。

在这里插入图片描述
这里的意义就是,比如为下面的式子求解 x 1 x_1 x1 x 2 x_2 x2
{ x 1 + x 2 = 14 2 x 1 − x 2 = 10 \begin{cases} x_1 + x_2 = 14 \\ 2x_1 - x_2 = 10 \end{cases} {x1+x2=142x1x2=10
使用代码实现就是:

X = np.array([[1,1],[2,-1]])
y = np.array([14,10])
#执行最小二乘法公式
w = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y)
print(w)

最小二乘法非常适用于多元函数求解,比如多元一次不等式,如下:
{ x 1 + x 2 + 2 x 3 = 14 2 x 1 − x 2 − x 3 = 10 4 x 1 + 2 x 2 − 7 x 3 = 22 \begin{cases} x_1 + x_2 + 2x_3= 14 \\ 2x_1 - x_2 - x_3= 10\\ 4x_1 + 2x_2 - 7x_3= 22 \end{cases} x1+x2+2x3=142x1x2x3=104x1+2x27x3=22
在线性回归中,最小二乘法适用于寻找最适合数据集的直线或平面时,提供一种计算模型参数的解析解。

使用sklearn来实现的话,代码如下:

X = np.array([[1,1],[2,-1]])
y = np.array([14,10])
#执行最小二乘法公式
model = LinearRegression(fit_intercept=False)
model.fit(X, y)
print(model.coef_)

添加截距项的最小二乘法

当自变量为零时,因变量也为零的情况下,使用上述的方法即可。但当一组数据不适用于X=0时y也=0的情况下,我们就需要为 y = θ 1 x 1 + θ 2 x 2 + … + θ n x n y = \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n y=θ1x1+θ2x2++θnxn添加一个截距项 θ 0 \theta_0 θ0,这意味着我们的模型需要一个截距项来捕捉 y y y轴上的偏移,以便更准确地描述数据。模型将变为:

y = θ 0 + θ 1 x 1 + θ 2 x 2 + … + θ n x n y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n y=θ0+θ1x1+θ2x2++θnxn

其中, θ 0 \theta_0 θ0是截距项,它代表了当所有 x i x_i xi都为 0 时 y y y的值。
添加截距项是为了更好的预测不在数据集最大区间内的数据。

这里用公式表示的话就是:会将 { x 1 + x 2 = 14 2 x 1 − x 2 = 10 \begin{cases} x_1 + x_2 = 14 \\ 2x_1 - x_2 = 10 \end{cases} {x1+x2=142x1x2=10转成 { x 1 + x 2 + θ 0 = 14 2 x 1 − x 2 + θ 0 = 10 \begin{cases} x_1 + x_2+ \theta_0= 14 \\ 2x_1 - x_2+ \theta_0= 10 \end{cases} {x1+x2+θ0=142x1x2+θ0=10这样 x 1 x_1 x1 x 2 x_2 x2的求解值就会发生改变。换句话说,在 { x 1 + x 2 + θ 0 = 14 2 x 1 − x 2 + θ 0 = 10 \begin{cases} x_1 + x_2+ \theta_0= 14 \\ 2x_1 - x_2+ \theta_0= 10 \end{cases} {x1+x2+θ0=142x1x2+θ0=10这组式子里只要式子1中的 y y y和式子2中的 y y y的差距保持为4(即14-10),那 x 1 x_1 x1 x 2 x_2 x2的求解就不会变化,因为 y 1 y_1 y1 y 2 y_2 y2是同步变化的,同步变化的结果会被 θ 0 \theta_0 θ0截距项纠正。
可以尝试一下更改代码中的 y 1 y_1 y1 y 2 y_2 y2同步变化,最终的model.coef_结果不变:

X = np.array([[1,1],[2,-1]])
y = np.array([14,10])
#执行最小二乘法公式
model = LinearRegression(fit_intercept=True)
model.fit(X, y)
print(model.coef_)

实际上代码只更改了fit_intercept的设置来控制是否使用截距项。

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

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

相关文章

SpringIOC之ScopedProxyCreator

博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

深入了解Linux信号:作用、产生、捕捉和阻塞

这里写目录标题 引言1. 信号的基本概念1.1 信号的分类和编号:1.2 查看信号默认处理动作1.3 信号的作用1.4 信号的产生1.4.1通过终端按键产生1.4.2通过系统函数向进程发信号1.4.3由软件条件产生信号1.4.4硬件异常产生信号 2. 常见信号及其作用SIGINT (2) - 中断信号&…

宝塔Linux:部署His医疗项目通过jar包的方式

📚📚 🏅我是默,一个在CSDN分享笔记的博主。📚📚 ​​​ 🌟在这里,我要推荐给大家我的专栏《Linux》。🎯🎯 🚀无论你是编程小白,还是有…

LVGL 显示图片

LVGL 显示图片 LVGL显示图片1. 显示图片文件2. 显示C数组格式3. 显示RAM中的图像文件4. 图像符号显示5. 显示GIF动画LVGL显示图片代码分析 LVGL显示图片 lvgl 8.3版本默认支持PNG,BMP,JPG,SJPG和GIF动图等格式的图片显示; 需要在lv_conf.h配置文件里使能对应图片的…

docker 在线安装redis

1、远程仓库拉取redis镜像, docker pull redis,默认拉取最新版本 2、在本地宿主机文件夹下创建相关目录文件,供容器卷使用,创建 /usr/local/data/redisdocker/data 文件夹,准备一个纯净版 redis.conf 配置文件 &#x…

12V升18V4A同步升压恒压WT3210

12V升18V4A同步升压恒压WT3210 WT3210 是一款高功率密度的全集成同步升压转换器,内部集成的功率MOSFET管导通电阻为上管8mΩ和下管15mΩ。可为便携式系统提供空间小尺寸 解决方案。WT3210具有 2.7V 至 20V 的宽输入电压范围,应用在单节或两节锂电池的便携…

网宿配置cdn加速

1、商务谈妥后我们登录新注册的账号可以找到我们的服务 我们的服务叫“CDN Pro” 2、添加ssl证书 1)点击证书 2)新建证书 会有默认提示,名字自定义 将我们购买的证书上传后保存 3)结果如下 4)查询我们的证书详情 …

OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

一、AMD处理器win10系统下,DevEco Studio模拟器启动失败解决办法。 结论:在BIOS里面将Hyper-V打开,DevEco Studio模拟器可以成功启动。 二、ArkTS自定义组件导出、引用实现。 如果在另外的文件中引用组件,需要使用export关键字导…

数字化技术助力英语习得 iEnglish成智慧化学习新选择

日前,美剧《老友记》中钱德勒的扮演者马修派瑞去世的消息引发不少人的回忆杀。《老友记》官方发文悼念马修派瑞:“对于马修派瑞去世的消息,我们深感悲痛,他是给我们所有人的真正礼物,我们的心和他的家人、爱人、所有的粉丝在一起。” 作为不少国人刷剧学习英语的首选,《老友记…

【Linux】键盘高级操作技巧

命令行最为珍视的目标之一就是懒惰:用最少的击键次数来完成最多的工作。另一个目标是你的手指永 远不必离开键盘,永不触摸鼠标。因此,我们有必要了解一些键盘操作,使我们用起来更加的迅速和高效。 移动光标 在前面介绍过上下左右…

二叉搜索树 和 哈希表 (JAVA)

目录 二叉搜索树 二叉搜索树的插入 二叉搜索树的查找 二叉搜索树的删除 哈希表 哈希冲突 闭散列 线性探测法 二次探测法 开散列 开散列代码实现: 插入元素 删除元素 查找元素 二叉搜索树 先了解一下二叉搜索树是啥,概念如下&#xff1a…

VuePress安装及使用——使用 Markdown 创建你自己的博客网站和电子书

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 四、使用主题1.安装2. 目录结构说明&…