【机器学习】(基础篇三) —— 线性回归

线性回归

本文介绍最经典的监督学习问题——线性回归,包括单变量线性回归和多变量线性回归

线性回归是回归任务,输入是带有标签的数据,根据数据关系,拟合出一个线性函数,并利用该函数进行预测等操作。线性回归分为单变量(只有一个影响因素)和多变量(多个影响因素)

单变量线性回归

它探讨的是一个自变量(也称为解释变量或预测变量)与一个因变量(也称为响应变量或预测目标)之间的线性关系。一元线性回归的基本模型定义为:

y = β 0 + β 1 x + ε y=\beta_0+\beta_1x+\varepsilon y=β0+β1x+ε

误差项ε是随机变量反映了除 x 和 y 之间的线性关系之外的随机因素对 y 的影响,是不能由 x 和 y 之间的线性关系所解释的变异性。

假定误差项ε是一个期望值为0的随机变量,即E(ε)=0。对于一个给定的 x 值,y 的期望值为E (y ) =β0+ β1x

我们的目标是根据训练样本得到最合适的参数β0和β1,让所有训练样本点到拟合直线函数的距离最小,使用的方法是最小二乘法

最小二乘法(Ordinary Least Squares, OLS):让实际值和估计值(拟合函数)之间的距离总和最小为要求得到估计参数,为了方便及不让正负符号抵消,使用残差平方和表示距离,即

R S S ( β 0 , β 1 ) = ∑ i = 1 n ( y i − ( β 0 + β 1 x i ) ) 2 \mathrm{RSS}(\beta_0,\beta_1)=\sum_{i=1}^n(y_i-(\beta_0+\beta_1x_i))^2 RSS(β0,β1)=i=1n(yi(β0+β1xi))2

目标是让上述函数取到最小值,因为这个函数是在凸优化问题,任何局部最小值都是全局最小值,通过微分并令其等于零来找到极小值点就是全局最小值点。对于一元线性回归问题,可以直接推导出闭式解:

β 1 ^ = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) ∑ i = 1 n ( x i − x ˉ ) 2 \hat{\beta_1}=\frac{\sum_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n(x_i-\bar{x})^2} β1^=i=1n(xixˉ)2i=1n(xixˉ)(yiyˉ)

然后,利用估计出的β1计算出β0

β 0 ^ = y ˉ − β 1 ^ x ˉ \hat{\beta_0}=\bar{y}-\hat{\beta_1}\bar{x} β0^=yˉβ1^xˉ

sklearn是一个机器学习库,其中为我们封装好了很多机器法学系方法,可以让我们直接调用,非常方便,在开发中也是直接调用库而不需要手写算法,但是手写算法可以帮助我们理解算法的底层逻辑。

【示例】手动实现单变量的线性回归并且进行可视化展示

# 一元线性回归分析
import numpy as np
import matplotlib.pyplot as plt

# 准备训练样本数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 3, 2, 3, 5])
# 计算第一个参数,用a保存
d, m = 0, 0
for x_i, y_i in zip(x, y):
    d += (x_i - x.mean()) * (y_i - y.mean())
    m += (x_i - x.mean()) ** 2
a = d / m
# 计算第二个参数,用b保存
b = y.mean() - a * x.mean()
# y_hat作为使用计算出的a和b作为参数得到的拟合函数的估计值
y_hat = a * x + b 
# 可视化
plt.scatter(x, y)
plt.plot(x, y_hat, color='r')
plt.axis([0, 6, 0, 6])

plt.show()

运行结果:

在这里插入图片描述

【示例】使用sklearn中的方法实现线性回归

# 导入包含回归方法的类:
from sklearn.linear_model import LinearRegression

# 将上面的数据转换为列向量使用
x = x.reshape(-1,1)
y = y.reshape(-1,1)

# 创建该类的一个对象:
LR = LinearRegression()

# 训练模型拟合数据,并预测:
LR = LR.fit(x, y)
y_predict = LR.predict(x)

# 可视化
plt.scatter(x, y)
plt.plot(x, y_predict, color='r')
plt.axis([0, 6, 0, 6])

plt.show()

拟合优度与检验

在得到一个模型结果之后,我们需要一些方法或者指标来判断这个模型是否有效,即得到的模型是否能够有效的反映训练样本所表达的关系。

要检验样本和估计值之间的关系,我们经常会使用距离来进行衡量,如果所有的训练样本点到估计值的距离都很小,我们就可以说这个拟合的模型结果很好。

image-20240225102221404

在这里插入图片描述
在这里插入图片描述

回归平方和: S S R = ∑ ( y ^ i − y ˉ ) 2 SSR=\sum(\hat{y}_i-\bar{y})^2 SSR=(y^iyˉ)2

SSR反映了回归模型对数据的解释能力,SSR越大,说明模型能够解释更多的数据变异。当模型完美拟合数据时,SSR等于SST(总平方和),而SSE(残差平方和)则为0。

残差平方和: S S E = ∑ ( y i − y ^ i ) 2 SSE=\sum(y_i-\hat{y}_i)^2 SSE=(yiy^i)2

SSE越小,说明模型的预测值与实际观测值越接近,模型的拟合效果越好。在上一小节的最小二乘法中,目标就是找到使SSE最小化的模型参数。

总平方和: S S T = ∑ ( y i − y ˉ ) 2 = S S R + S S E SST=\sum(y_i-\bar{y})^2 = SSR + SSE SST=(yiyˉ)2=SSR+SSE

SST它衡量了观测值与其平均值之间的差异的平方和,提供了因变量总变异性的一个度量。残差平方和(SSE)代表了模型未能解释的变异部分,回归平方和(SSR)则表示了模型成功解释的变异部分。

判定系数R^2: R 2 = 1 − S S E S S T R^2=1-\frac{SSE}{SST} R2=1SSTSSE

是在回归分析中衡量模型拟合优度的一个统计量。它表示模型解释的变异占总变异的比例,取值范围从0到1。一个较高的 R^2 值表明模型对数据的解释能力较好,反之则较差。

判定系数等于相关系数的平方,即R2=(*r*)2

上述的很多参数中,常用的只有判定系数R2,其余的定义都是为了最终计算出这个值,只需要掌握这个的计算即可。使用sklear包中提供的工具即可实现计算R2,因为底层设计的数据计算比较多,手写容易出错,所以在这里我也直接调用相关方法。

【示例】使用sklearn计算上面例子中的R^2

# 计算R^2和F统计量
# 导入相关工具
from sklearn.metrics import r2_score
# 传入标签值和估计值进行计算
r2 = r2_score(y, y_predict)
print(f"R² Score: {r2}")

输出结果:

R² Score: 0.7272727272727273

多变量线性回归

多元线性回归(Multiple Linear Regression)用于研究一个因变量(dependent variable)与两个或更多个自变量(independent variables)之间的线性关系。相比于一元线性回归,多元线性回归模型允许考虑多个影响因素,这些因素共同作用于预测目标变量。多元线性回归可以写成如下形式:

y = β 0 + β 1 x 1 + β 2 x 2 + . . . + β p x p + ϵ y=\beta_0+\beta_1x_1+\beta_2x_2+...+\beta_px_p+\epsilon y=β0+β1x1+β2x2+...+βpxp+ϵ

利用最小二乘法的思想,对各个参数求偏导,令其等于0,得出估计参数值

使用skelearn实现多变量线性回归和上面单变量的用法相同,都是使用LinearRegression,不同的就是此时传入的x变成了多个维度的数组,以此来表示多个变量。

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值