【机器学习】线性回归

article/2025/9/21 15:02:26

线性回归学习内容:

线性回归(上)Linear Regression

引言:看看就行

线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来,得到的结果和目标接近

线性回归概念

 机器学习中将如下 R n − > R R^n->R Rn>R的函数 h w , b = < w , x > + b h_{w,b}=<w,x>+b hw,b=<w,x>+b称为一个线性模型。式子中, w , x ∈ R n w,x\in R^n w,xRn均为n维向量, b ∈ R b\in R bR为偏执项。 < w , x > <w,x> <w,x>表示 w w w x x x的内积。
线性模型来拟合特征组与标签之间的关系的方法,就称为线性回归
 有监督的学习中,求解线性回归模型中的参数 w , b w,b wb问题称为线性回归问题

算法求解步骤

Part1.建立模型基本形式

数据集一共有 p p p个数据点,每个数据点有 n n n个描述的维度 x i = ( x i 1 , x i 2 , x i 3 , . . . , x i n ) x_i=(x_{i1},x_{i2},x_{i3},...,x_{in}) xi=(xi1,xi2,xi3,...,xin) 其中 x i x_i xi是第 i i i个数据点。线性模型试图学习到一个通过属性的线性组合来进行预测的函数

一般用向量形式写成 f ( x ) = < X , W > + b f(x)=<X,W>+b f(x)=<X,W>+b其中 W = ( W 1 , W 2 , W 3 , . . . , W n ) W=(W_1,W_2,W_3,...,W_n) W=(W1,W2,W3,...,Wn) ,在 W W W b b b 学得之后模型就可以得到确定,所以下一步就是学习模型参数

Part2.选定距离衡量方程

我们的目标:模型预测出来的值和真实值无限接近,即: f ( x i ) ⋍ y i f(x_i)\backsimeq y_i f(xi)yi

这里解释一下为什么只能无限接近,因为我们只能拿某一类事件所有数据中抽样出来的部分数据进行学习,抽样出来数据不可能涵盖事件所有的可能性,所以最终只能学习到总体的规律

问题:如何衡量预测的准确性,即衡量 f ( x ) f(x) f(x)与真实值 y y y之间的差异 D = E ( f ( x ) − y ) 2 D=E(f(x)-y)^2 D=E(f(x)y)2

1.误差平方和SSE判别(线性回归就采取这个) d i s t ( P i , P j ) = ∑ k = 1 n ( P i k − P j k ) 2 dist(P_i,P_j)=\sum_{k=1}^{n}(P_{ik}-P_{jk})^2 dist(Pi,Pj)=k=1n(PikPjk)2解释:由于误差有正有负,故可以用方法和来抵消正负。
其他的还有欧式距离判别曼哈顿距离判别马氏距离判别、等等

Part3.学习模型参数

为简化算法描述中的记号,将n维向量x的首位之前增补一个常数1,使其成为一个 n + 1 n+1 n+1维向量 x = ( 1 , x ) = ( 1 , x 1 , x 2 , . . . , x n ) x =(1,x)=(1,x_1,x_2,...,x_n) x=(1,x)=(1,x1,x2,...,xn)
b b b被吸收到 w w w向量, w = ( w 0 , w 1 , . . . , w n ) w=(w_0,w_1,...,w_n) w=(w0,w1,...,wn) b b b对应 w 0 w_0 w0 Y = < W , X > Y=<W,X> Y=<W,X>
所以有了如下一图:

这样,我们只需要求解这个方程就能得到 w w w b b b的值。
首先,我们先将方程用矩阵表示: C o s t ( W ) = 1 2 m ( X W − Y ) T ( X W − Y ) Cost(W)=\frac{1}{2m}(XW-Y)^T(XW-Y) Cost(W)=2m1(XWY)T(XWY)求最小,可以将两边对W求偏导,化简得到方程,令其为零,j解其方程就可以得到W。具体求解过程:详解正规方程 W = ( X T X ) − 1 X T Y W=(X^TX)^{-1}X^TY W=(XTX)1XTY

评价指标: . . . R 2 ...R^2 ...R2

模型建好了,我们需要设计相关的指标来检验模型的表现。有人会问,最小二乘法不就是评价指标吗,和这里的评价指标有什么区别?

从概念上讲,两者都是评价指标没什么区别。但是从使用场景上讲,我们在上文提到的最小二乘法,是我们在用训练数据集训练建模时,为了调整模型参数而确定的评价指标,目的是为了优化模型参数。而这里我们要讲的评价指标,是衡量模型建立好以后,使用别的数据集时(测试数据集、真实数据集)这组模型参数的表现效果,目的是为了选择模型参数

这里给出准确定义:评价指标是针对将相同的数据,输入不同的算法模型,或者输入不同参数的同一种算法模型,而给出这个算法或者参数好坏的定量指标

1.均方误差(SSE)

2.均方误差根(标准误差RMSE)

3.平方绝对误差(MAE)

4.R-square(决定系数)
 对于回归类算法而言,只探索数据预测是否准确是不足够的。除了数据本身的数值大小之外,我们还希望模型能够捕捉到数据的”规律“,比如数据的分布规律,单调性等等,而是否捕获了这些信息并无法使用MSE或者MAE来衡量

数学理解:分母理解为原始数据的离散程度,分子为预测数据和原始数据的误差,二者相除可以消除原始数据离散程度的影响
R 2 = 1 − ∑ ( y ^ ( i ) − y ( i ) ) ∑ ( y ˉ − y ( i ) ) R^2=1-\frac{\sum(\hat y^{(i)}-y^{(i)})}{\sum(\bar{y}-y^{(i)})} R2=1(yˉy(i))(y^(i)y(i))

  • 上面分子就是我们训练出的模型预测的误差和
  • 下面分母就是瞎猜的误差和。(通常取观测值的平均值)
  • 如果结果是0,就说明我们的模型跟瞎猜差不多
  • 如果结果是1。就说明我们模型无错误
  • 介于0~1之间,越接近1,回归拟合效果越好,一般认为超过0.8的模型拟合优度比较高

ps:

其中红色线是我们的真实标签,而蓝色线是我们的拟合模型。这是一种比较极端,但的确可能发生的情况。这张图前半部分的拟合非常成功,看上去真实标签和预测结果几乎重合,但后半部分的拟合却非常糟糕,模型向着与真实标签完全相反的方向去了

对于这样的一个拟合模型,如果我们使用MSE来对它
进行判断,它的MSE会很小,因为大部分样本其实都被完美拟合了,少数样本的真实值和预测值的巨大差异在被均分到每个样本上之后,MSE就会很小。但这样的拟合结果必然不是一个好结果,因为一旦新样本是处于拟合曲线的后半段的,预测结果必然会有巨大的偏差。所以,我们希望找到新的指标,除了判断预测的数值是否正确之外,还能够判断我们的模型是否拟合了足够多的,数值之外的信息

线性回归(下)Linear Regression

正规方程(最小二乘法)的局限性

  • 只有 X T X X^TX XTX可逆时,定理才成立,才有形式简单的解
    W = ( X T X ) − 1 X T Y W=(X^TX)^{-1}X^TY W=(XTX)1XTY
    以下两种情况下, X T X X^TX XTX都不可逆

    • 所选特征之间不独立,也就是特征之间有联系( x 1 = a x 2 等关系 x_1 = ax_2等关系 x1=ax2等关系
    • 训练数据个数 m < m< m<特征数 n ( m , n = X . s h a p e n(m,n = X.shape nm,n=X.shape & m < n ) m<n) m<n
  • 时间复杂度高

    • X T X , n X^TX,n XTX,n阶方阵,计算 ( X T X ) − 1 (X^TX)^{-1} (XTX)1的时间复杂度 O ( n 3 ) O(n^3) O(n3),公式( A − 1 = A ∗ ∣ A ∣ A^{-1}=\frac{A*}{|A|} A1=AA),这对特征数n很大问题,不可接受

多项式回归

  • 问题:
     如果特征标签之间的关系近似线性关系,就可以用一个线性模型来拟合这种回归关系,该拟合方法就是线性回归方法。但是,有些实际问题中,标签与特征之间的关系并非是线性的,而是呈多项式关系。在这种情形下,标签与特征之间的关系就称为多项式关系。如何拟合?
  • 解决方法:
     用线性回归的一个变型----多项式回归来拟合标签和特征的关系
    以一个一元二次多项式引入:
    h w ( x ) = w 0 + w 1 x + w 2 x 2 h_w(x)=w_0+w_1x+w_2x^2 hw(x)=w0+w1x+w2x2
     只有一个特征 x x x,包含3个单项式。
     如果把每一个单项式看成是一个特征,即如果把 1 , x , x 2 1,x,x^2 1,x,x2均看成特征,则上面的一元二次多项式,也可以看作关于这3个特征的线性模型。 h w ( x ) = < w , x > h_w(x)=<w,x> hw(x)=<w,x> x = ( 1 , x , x 2 ) x=(1,x,x^2) x=(1,x,x2) w = ( w 0 , w 1 , w 2 ) w=(w_0,w_1,w_2) w=(w0,w1,w2)

ps:多项式回归, x x x的首位已经是 1 1 1

一个n元d次多项式:

那么,如何确定单项式的个数呢? : n 元 d 次多项式含有 ( n n + d ) 个单项式 :n元d次多项式含有\left( _{n}^{n+d} \right)个单项式 nd次多项式含有(nn+d)个单项式
每个单项式 x 1 a 1 x 2 a 2 . . . x n a n x_1^{a_1}x_2^{a_2}...x_n^{a_n} x1a1x2a2...xnan看作一个特征,则一个n元d次多项式模型可以看作一个 ( n n + d ) \left( _{n}^{n+d} \right) (nn+d)元线性模型

n元d次多项式转 ( n n + d ) \left( _{n}^{n+d} \right) (nn+d)元线性模型例题


这里是引用
在这里插入图片描述


实例:

1 import numpy as np
2 from sklearn.preprocessing import PolynomialFeatures
3 from machine_learning.linear_regression.lib.linear_regression import LinearRegression
4 import matplotlib.pyplot as plt
5
6 def generate_samples(m):
7 X = 2 * np.random.rand(m, 1) # 样本空间[0,2], X m*1矩阵
8 y = X**22 * X + 1 + np.random.normal(0, 0.1, (m, 1)) #标签y m*1列向量
9 return X, y
10
11 np.random.seed(0)
12 X, y = generate_samples(100)
13 poly = PolynomialFeatures(degree=2) #声明2次多项式化 实例
14 X_poly = poly.fit_transform(X) #将X 2次多项式化
15 model = LinearRegression() #声明 线性回归模型 实例
16 model.fit(X_poly, y) #训练 线性回归模型
17 print(model.w) #输出模型参数w
18 plt.scatter(X, y) #画训练数据的散点图
19 X_test = np.linspace(0, 2, 300).reshape(300, 1) #生成 [0,2]之间300个测试数据
20 X_test_poly = poly.fit_transform(X_test) #将X_test 2次多项式化
21 y_pred = model.predict(X_test_poly) #测试
22 plt.plot(X_test, y_pred) #画 300个数据的标签的连线,构成模型的函数图像
23 plt.show(

在这里插入图片描述

岭回归

  • 问题:

    • 过度拟合
  • 解决方式:

    • 岭回归(在目标函数后追加惩罚)

    F ( w ) = 1 m ∣ ∣ X w − y ∣ ∣ 2 + λ ∣ ∣ w ∣ ∣ 2 F(w)=\frac{1}{m}||Xw-y||^2+\lambda||w||^2 F(w)=m1∣∣Xwy2+λ∣∣w2由此可知,岭回归有唯一解 w ∗ w^* w,且 X T X + m λ I X^TX+m\lambda I XTX+I可逆时,从而 w ∗ = = ( X T X + m λ I ) − 1 X T y w^*==(X^TX+m\lambda I)^{-1}X^Ty w==(XTX+I)1XTy

1 import numpy as np
2
3 class RidgeRegression: #岭回归 线性回归的L2正则化模型
4 def __init__(self, Lambda): #正则化系数λ
5 self.Lambda = Lambda
6
7 def fit(self, X, y): #训练
8 m, n = X.shape
9 r = m * np.diag(self.Lambda * np.ones(n)) # mλI , r=n*n矩阵,对角线上元素值为 mλ
10 self.w = np.linalg.inv(X.T.dot(X) + r).dot(X.T).dot(y) #定理3.3 w* 计算
11
12 def predict(self, X): #预测
13 return X.dot(self.w

在这里插入图片描述


http://chatgpt.dhexx.cn/article/cIWBCsyJ.shtml

相关文章

详解使用pytorch实现线性回归时,线性回归方程,损失函数,梯度下降优化算法之间的关系

One-dimensional linear regression 给定数据集&#xff08;点集&#xff09;&#xff0c;我们希望优化出一个好的函数f&#xff08;x&#xff09;&#xff0c;使得f&#xff08;xi&#xff09; wxib。有均方差损失函数可得E(w,b)。如下图&#xff1a; 为什么要求出outputs&…

【Matlab学习手记】多元非线性回归

介绍两种方法做多元非线性回归&#xff1a;lsqcurvefit、Adagrad 法。 lsqcurvefit是Matlab提供的内置函数&#xff0c;用于基于最小二乘的曲线拟合问题&#xff1b;Adagrad是一种基于梯度的迭代方法&#xff0c;特点在步长不固定&#xff0c;随着迭代次数变化。 clear; clc;…

线性回归原理----简单线性回归、多元线性回归

回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时&#xff0c;因变量Y会如何发生改变。 线性回归是回归分析的一种&#xff0c;评估的自变量X与因变量Y之间是一种线性关系&#xff0c;当只有一个自变量时&#xff0c;成为简…

线性回归算法 php实现,PHP实现多元线性回归模拟曲线算法步骤详解

这次给大家带来PHP实现多元线性回归模拟曲线算法步骤详解&#xff0c;PHP实现多元线性回归模拟曲线算法的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。 多元线性回归模型&#xff1a; y b1x1 b2x2 b3x3 ...... bnxn; 我们根据一组数据&#xff1a…

统计学考研笔记:回归方程计算题

题1: 利用某公司的年销售额Y与个人支配收入&#xff0c;商品价格&#xff0c;广告费的历年统计数据&#xff0c;研究Y关于&#xff0c;&#xff0c;的回归关系&#xff0c;得到回归方程为: Y 3573.879 6.687-25.051 9.316 (1981.741) (1.192) (24.515) (2.73…

一元一次线性回归详解

一元一次线性回归 作为机器学习的入门课程&#xff0c;线性回归是我们必须要学习的第一个算法。今天我们就来详细的讲解一下线性回归。 在讲解之前&#xff0c;我们先来解释以下几个问题。 可为线性&#xff1f;线性是指自变量x和因变量y之间是线性的关系&#xff0c;即图像…

线性回归之梯度下降详解

在了解梯度下降&#xff08;Gradient Descent&#xff09;之前&#xff0c;我们先要知道有关线性回归的基本知识&#xff0c;这样可以进一步的加深对梯度下降的理解&#xff0c;当然梯度下降&#xff08;Gradient Descent&#xff09;并不单单只能进行回归预测&#xff0c;它还…

【机器学习】线性回归——最小二乘法(理论+图解+公式推导)

&#x1f320; 『精品学习专栏导航帖』 &#x1f433;最适合入门的100个深度学习实战项目&#x1f433;&#x1f419;【PyTorch深度学习项目实战100例目录】项目详解 数据集 完整源码&#x1f419;&#x1f436;【机器学习入门项目10例目录】项目详解 数据集 完整源码&…

线性回归例题解析

前往我的主页以获得更好的阅读体验线性回归例题解析 - DearXuan的主页https://blog.dearxuan.com/2022/03/23/%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%BD%92%E4%BE%8B%E9%A2%98%E8%A7%A3%E6%9E%90/ 例题 调查某市出租车使用年限和该年支出维修费用&#xff08;万元&#xff09;&#…

windows计算机管理快捷键,windows系统常见快捷键大全

熟练电脑键盘快捷键有助于提供办公效率&#xff0c;但是对于一些职场的电脑小白来说&#xff0c;什么都不会&#xff0c;几分钟的工作需要几个小时来完成&#xff0c;如何在职场上立足呢&#xff1f;下面小编给您整理了常见的windows快捷键大全&#xff0c;让你的高效办公&…

桌面计算机休眠快捷键,电脑休眠唤醒快捷键

设置电脑休眠唤醒快捷键的方法 1、在电脑桌面空白处点击右键。 2、在新建列表中选择新建快捷方式。 3、在键入对象的位置栏中&#xff0c;输入rundll32.exe? powrprof.dll,SetSuspendState Hibernate。创建一个休眠命令。 4、把快捷方式的名字改为休眠即可。 设置电脑休眠键的…

修改PyCharm的快捷键

有的电脑系统中&#xff0c;按下一些PyCharm组合键可能会无法起作用&#xff0c;这是因为可能和当前系统的其他软件快捷键发生了冲突。 大家有需要可以更改下默认的快捷键&#xff0c;下面以Ctrl空格的自动代码补齐快捷键为例&#xff0c;方法是选择File——Settings&#xff…

调整计算机屏幕亮度快捷键,笔记本亮度调节的快捷键

现在小伙伴们使用电脑的时间越来越多&#xff0c;长时间使用电脑&#xff0c;对我们的眼睛伤害很大。建议大家使用一两个小时的电脑就要停下来休息10分钟&#xff0c;眺望远方。除此之外&#xff0c;电脑屏幕亮度的控制也是很有必要的。但是笔记本亮度调节的快捷键怎么使用呢&a…

立创eda快捷键

默认的快捷键列表如下。共用快捷键文档类型快捷键功能所有Space(空格键)旋转所选图形所有鼠标右键长按右键拖动画布&#xff1b;操作过程中按一下右键释放操作’所有Left向左滚动或左移所选图形所有Right向右滚动或右移所选图形所有Up向上滚动或上移所选图形所有Down向下滚动或…

Pycharm 常用快捷键 for Mac

格式化代码&#xff1a; command option L多行合并一行&#xff1a;control shift J快速注释/取消注释&#xff1a;crtl /鼠标指针上方插入空行&#xff1a;command option enter鼠标指针下方插入空行&#xff1a;shift enter上下移动选中代码&#xff1a; shift opti…

常用Windows快捷键大全

0. 简要 要将电脑玩的溜&#xff0c;快捷键是必须要掌握的技能&#xff0c;本文汇总了一些常用的快捷键&#xff0c;相信加以练习&#xff0c;一定能提高你的工作效率。 笔者将常用快捷键分为四个系列&#xff0c;如下所示&#xff1a; Win 系列Ctrl 系列Alt 系列F 系列 本…

vscode 快捷键 删除当前行

vscode 快捷键删除当前行默认的是 ctrlshiftk 但是会与搜狗输入法的快捷键冲突 解决办法 1.更换其他输入法 2.修改搜狗输入法的快捷键 3.修改vscode 快捷键 &#xff0c;改成自己舒服的 修改vscode快捷键方法

计算机删除行快捷键,删除快捷键是什么?电脑删除快捷键有哪些?

在使用电脑的时候&#xff0c;除了鼠标之外&#xff0c;就是键盘最常用了。而在我们的日常操作中&#xff0c;为了操作更加方便&#xff0c;就有了快捷键。快捷键又称热键&#xff0c;指可以通过某些特定的按键和按键顺序及其组合来完成一项操作&#xff0c;多和Ctrl、Shift、A…

如何理解矩阵特征值

&#xff08;下面的回答只涉及实数范围&#xff09;。 关于特征值、特征向量可以讲的确实很多&#xff0c;我这里希望可以给大家建立一个直观的印象。 先给一个简短的回答&#xff0c;如果把矩阵看作是运动&#xff0c;对于运动而言&#xff0c;最重要的当然就是运动的速度和方…

矩阵特征值的求解例子

请点击上面公众号&#xff0c;免费订阅。  《实例》阐述算法&#xff0c;通俗易懂&#xff0c;助您对算法的理解达到一个新高度。包含但不限于&#xff1a;经典算法&#xff0c;机器学习&#xff0c;深度学习&#xff0c;LeetCode 题解&#xff0c;Kaggle 实战。期待您的到来&…