《机器学习》——线性回归模型

文章目录

线性回归模型简介

  • 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
    • 相关关系:包含因果关系和平行关系
    • 因果关系:回归分析【原因引起结果,需要明确自变量和因变量】
    • 平行关系:相关关系【无因果关系,不区分自变量和因变量】

一元线性回归模型

多元线性回归模型

误差项分析

  • 误差项满足高斯分布:



  • 求解
  • 一元线性回归模型与多元线性回归模型的区别
    • 自变量数量:一元线性回归只涉及一个自变量,而多元线性回归涉及两个或更多自变量。
    • 模型复杂度:由于包含更多的自变量,多元线性回归模型能够捕捉更复杂的数据关系,但也面临过拟合和变量选择等挑战。
    • 解释性:在多元线性回归中,每个自变量的回归系数表示在保持其他自变量不变的情况下,该自变量每增加一个单位对因变量的平均影响。而在一元线性回归中,这个解释更为直接和简单。
    • 应用场景:当数据集中只有一个自变量时,使用一元线性回归;当数据集包含多个可能相关的自变量时,使用多元线性回归。

一元线性模型实例

  • 安装scikit-learn
    python中执行线性回归的一个非常流行和强大的库是scikit-learn。scikit-learn提供了丰富的工具来进行数据挖掘和数据分析,包括简单和复杂的线性回归模型。
python 复制代码
pip install scikit-learn
  • 准备数据集

  • 实例步骤

    • 导入数据

    • 绘制数据的散点图

    • 求特征之间的相关系数

    • 估计模型参数,建立回归模型

    • 训练模型

    • 测试模型

    • 求出线性回归模型

      • 导入数据

      通过导入pandas模块,使用pandas的读取csv文件的方法进行导入数据集。

      python 复制代码
      data = pd.read_csv('data.csv')
      • 绘制散点图
      python 复制代码
      plt.scatter(data.广告投入,data.销售额)
      plt.show()
      • 求特征之间的相关系数

      在Python中,特别是在使用pandas库处理数据时,corr()函数是一个非常有用的方法,它用于计算DataFrame中列与列之间的相关系数。

      相关系数越接近1,说明它们之间受相互的影响越大。

      python 复制代码
      corr = data.corr()
      • 估计模型参数,建立回归模型

      分别用变量接收数据中的值,后面传入模型中训练

      这里直接调用 scikit-learn 库中的 LinearRegression() 模型

      python 复制代码
      lr = LinearRegression()
      x = data[["广告投入"]]
      y = data[["销售额"]]
      • 训练模型

      使用sklearn模块中的fit()方法进行训练

      python 复制代码
      lr.fit(x,y)
      • 测试模型

      这里取两个例子进行测试预测,score()方法用于评估模型对给定数据(x, y)的拟合优度,其中x是自变量数据,y是真实的因变量数据。对于线性回归模型,score 方法默认计算的是决定系数(R2 score),它表示模型预测值与实际值之间的拟合程度。R2 score的值越接近1,说明模型的拟合效果越好;如果为0,则表示模型的表现和简单预测平均值一样;如果小于0,则表示模型的表现甚至不如简单预测平均值。

      python 复制代码
      score = lr.score(x,y)
      #
      print(lr.predict([[50]]))
      print(lr.predict([[70]]))
      • 求出线性回归模型

      分别求出回归的模型的截距和斜率,.coef_方法用来求斜率而.intercept_方法用来求截距

      python 复制代码
      b = lr.coef_
      c = lr.intercept_
      print("一元线性回归模型为:y={:.2f}x1 + {:.2f}.".format(b[0][0],c[0]))
      • 结果

完整代码

python 复制代码
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression


data = pd.read_csv('data.csv')
a = data.广告投入
# 绘制散点图
plt.scatter(data.广告投入,data.销售额)
plt.show()

corr = data.corr()# 求x和y的相关系数
print(corr)
# 估计模型参数,建立回归模型
lr = LinearRegression()
x = data[["广告投入"]]
y = data[["销售额"]]

lr.fit(x,y)# 训练模型

score = lr.score(x,y)
#
print(lr.predict([[50]]))
print(lr.predict([[70]]))
b = lr.coef_
c = lr.intercept_
print("一元线性回归模型为:y={:.2f}x1 + {:.2f}.".format(b[0][0],c[0]))

多元线性模型实例

多元线性模型与一元线性模型结构差不多相同,有些许差别。

  • 导入数据

本次使用的数据为糖尿病的数据,共有10个特征变量的自变量和最后一列的因变量。

通过网盘分享的文件:糖尿病数据.csv

链接: https://pan.baidu.com/s/1lO8IshYhgmkGlNYMBMIK4w 提取码: mh94

完整代码

python 复制代码
import pandas as pd
from sklearn.linear_model import LinearRegression


data = pd.read_csv("糖尿病数据.csv")

corr = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6','target']].corr()

lr_model = LinearRegression()
x = data[['age','sex','bmi','bp','s1','s2','s3','s4','s5','s6']]
y = data[['target']]

lr_model.fit(x,y)

score = lr_model.score(x,y)

print(lr_model.predict([[-0.0926954778032799,-0.044641636506989,-0.0406959404999971,-0.0194420933298793,-0.0689906498720667,-0.0792878444118122,0.0412768238419757,-0.076394503750001,-0.0411803851880079,-0.0963461565416647]]))
print(lr_model.predict([[-0.0963280162542995,-0.044641636506989,-0.0838084234552331,0.0081008722200108,-0.103389471327095,-0.0905611890362353,-0.0139477432193303,-0.076394503750001,-0.0629129499162512,-0.0342145528191441]]))

a = lr_model.coef_
b = lr_model.intercept_

print("糖尿病线性回归模型为:y ={:.2f}x1 + {:.2f}x2 + {:.2f}x3 + {:.2f}x4 + {:.2f}x5 + {:.2f}x6 + {:.2f}x7 + {:.2f}x8 + {:.2f}x9 + {:.2f}x10 + {:.2f}.".format(a[0][0],a[0][1],a[0][2],a[0][3],a[0][4],a[0][5],a[0][6],a[0][7],a[0][8],a[0][9],b[0]))
  • 结果

可以看到一元线性回归模型和多元线性回归模型的结果只是多元线性回归模型有多个自变量,来控制因变量,且多元线性回归模型要导入多个特征数据,数据处理阶段并无太大区别。

相关推荐
孟郎郎3 分钟前
OSError: [WinError 126] 找不到指定的模块 backend_with_compiler.dll
人工智能·python·llm·conda·torch
WongKyunban3 分钟前
机器学习中的欠拟合
人工智能·机器学习
神经美学_茂森5 分钟前
Jurgen提出的Highway Networks:LSTM时间维方法应用到深度维
人工智能·rnn·lstm
Studying 开龙wu1 小时前
机器学习算法的分类
算法·机器学习·分类·回归
高工智能汽车2 小时前
商用车自动驾驶,迎来大规模量产「临界点」?
人工智能·机器学习·自动驾驶
AI视觉网奇3 小时前
pyhton 掩码 筛选显示
人工智能·opencv·计算机视觉
bluetata4 小时前
亚马逊云科技 re:Invent 2024 Amazon Bedrock 推出新功能,加速AI落地
人工智能·科技·云计算·aws
old_power4 小时前
Linux(Ubuntu24.04)安装Eigen3库
linux·c++·人工智能
Struart_R5 小时前
DepthLab: From Partial to Complete 论文解读
人工智能·深度学习·计算机视觉·3d·深度估计·场景生成
BlackPercy8 小时前
[paddle] 非线性拟合问题的训练
python·机器学习·paddlepaddle·paddle