(八)机器学习 - 线性回归

线性回归(Linear Regression)是一种统计学方法,用于建立一个或多个自变量(解释变量)与因变量(响应变量)之间的线性关系。线性回归的目的是通过最小化预测误差来找到最佳的线性拟合模型,从而可以用来预测因变量的值或理解自变量与因变量之间的关系。

线性回归使用数据点之间的关系在所有数据点之间画一条直线。

这条线可以用来预测未来的值。

线性回归的基本形式可以表示为:

y = β0​ + β1​x1 ​+ β2​x2 ​+ ⋯ + βn​xn ​+ ϵ

其中:

  • yy 是因变量。
  • x1,x2,...,xnx1,x2,...,xn 是自变量。
  • β0β0 是截距项(intercept)。
  • β1,β2,...,βnβ1,β2,...,βn 是回归系数(regression coefficients)。
  • ϵϵ 是误差项(error term),表示模型无法解释的随机误差。

线性回归的类型包括:

  1. 简单线性回归(Simple Linear Regression):只有一个自变量和一个因变量。
  2. 多元线性回归(Multiple Linear Regression):有多个自变量和一个因变量。

线性回归的参数估计通常使用最小二乘法(Least Squares Method),该方法通过最小化误差项的平方和来找到最佳的回归系数。最小二乘法的数学表达式为:

其中 mm 是数据点的数量。

线性回归模型的评估通常使用以下指标:

  • 决定系数(R-squared):表示模型解释的因变量的方差比例。
  • 调整后的决定系数(Adjusted R-squared):考虑了自变量数量对决定系数的影响。
  • 均方误差(Mean Squared Error, MSE):表示预测值与实际值之间的平均平方误差。
  • 均方根误差(Root Mean Squared Error, RMSE):MSE的平方根,表示预测值与实际值之间的平均误差。

Python 提供了一些方法来查找数据点之间的关系并绘制线性回归线。

例子:

1、首先绘制散点图:

python 复制代码
import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

plt.scatter(x, y)
plt.show()

结果:

2、导入 scipy 并绘制线性回归线:

python 复制代码
// 导入所需模块:
import matplotlib.pyplot as plt
from scipy import stats

// 创建表示 x 和 y 轴值的数组:
x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

// 执行一个方法,该方法返回线性回归的一些重要键值:
slope, intercept, r, p, std_err = stats.linregress(x, y)

// 创建一个使用 slope 和 intercept 值的函数返回新值。这个新值表示相应的 x 值将在 y 轴上放置的位置:
def myfunc(x):
  return slope * x + intercept

// 通过函数运行 x 数组的每个值。这将产生一个新的数组,其中的 y 轴具有新值:
mymodel = list(map(myfunc, x))

// 绘制原始散点图:
plt.scatter(x, y)
plt.plot(x, mymodel)

// 显示图:
plt.show()

结果:

R-Squared

重要的是要知道 x 轴的值和 y 轴的值之间的关系有多好,如果没有关系,则线性回归不能用于预测任何东西。

该关系用一个称为 r 平方(r-squared)的值来度量。

r 平方值的范围是 0 到 1,其中 0 表示不相关,而 1 表示 100% 相关。

Python 和 Scipy 模块将为您计算该值,您所要做的就是将 x 和 y 值提供给它:

示例:

我的数据在线性回归中的拟合度如何?

python 复制代码
from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

结果: -0.76 表明存在某种关系,但不是完美的关系,但它表明我们可以在将来的预测中使用线性回归。

预测未来价值

我们可以使用收集到的信息来预测未来的值。

例如:让我们尝试预测一辆拥有 10 年历史的汽车的速度。

为此,我们需要与上例中相同的 myfunc() 函数:

python 复制代码
def myfunc(x):
  return slope * x + intercept

例子:

预测一辆有 10年车龄的汽车的速度:

python 复制代码
from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

speed = myfunc(10)

print(speed)

该例预测速度为 85.6,我们也可以从图中读取:

糟糕的拟合度?

示例:

x 和 y 轴的这些值将导致线性回归的拟合度非常差:

python 复制代码
import matplotlib.pyplot as plt
from scipy import stats

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

结果:

以及 r-squared 值?

您应该得到了一个非常低的 r-squared 值。

python 复制代码
import numpy
from scipy import stats

x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40]
y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

结果:0.013 表示关系很差,并告诉我们该数据集不适合线性回归。

应用领域

  1. 经济学:线性回归在经济学中被用于预测市场趋势和商品价格,分析不同因素对价格变动的影响,如利率、通货膨胀率与家庭消费的关系,以及预测未来的消费趋势。

  2. 市场营销:在市场营销领域,线性回归被用于销售额预测和客户行为分析,帮助企业理解广告投资与销售收入之间的关系。

  3. 生物医学研究:线性回归在生物医学领域中发挥着重要作用,如评估不同治疗方法对患者健康指标的影响,分析药物剂量与患者恢复速度之间的关系。

  4. 社会科学:线性回归被广泛应用于教育、心理学和社会学等多个方面,探讨教育水平、职业发展与收入水平之间的相关性,为制定相关政策提供科学依据。

  5. 工程领域:在工程领域,线性回归被用于系统性能预测和故障诊断等。

  6. 金融学:线性回归在金融学中用于预测经济指标,如消费支出和收入之间的关系。

  7. 医疗:线性回归在医疗领域中用于疾病风险预测和药物效果评估。

  8. 物流和电商:线性回归在物流和电商领域中也有应用,如用于库存管理和需求预测。

END.

相关推荐
暴龙胡乱写博客3 分钟前
python三大库之---pandas(二)
开发语言·人工智能·python·pandas
在下_诸葛6 分钟前
ReAct 框架 | 提示词工程(1)
人工智能·gpt·prompt·aigc
东坡肘子29 分钟前
切勿将辅助驾驶宣传成智能驾驶 | 肘子的 Swift 周报 #078
人工智能·swiftui·swift
qq_3154110132 分钟前
deepseek使用记录26——从体力异化到脑力异化
人工智能
墨绿色的摆渡人37 分钟前
具身智能零碎知识点(一):深入解析Transformer位置编码
人工智能·深度学习·transformer
蹦蹦跳跳真可爱58944 分钟前
Python----计算机视觉处理(Opencv:道路检测完整版:透视变换,提取车道线,车道线拟合,车道线显示,)
开发语言·人工智能·python·opencv·计算机视觉
羑悻的小杀马特2 小时前
用 OpenCV 给图像 “挑挑拣拣”,找出关键信息!
人工智能·opencv·计算机视觉·关键词提取
前进的程序员2 小时前
AI 时代:哪些开发语言将引领潮流
开发语言·人工智能
6v6-博客3 小时前
【全球首发】DeepSeek谷歌版1.1.5 - 免费GPT-4级别AI工具
人工智能
Hello.Reader3 小时前
液态神经网络技术指南
人工智能·深度学习·神经网络