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

1、线性回归的简单介绍

线性回归分为一元线性回归和多元线性回归,是统计学中用于建模和分析变量之间关系的两种基本方法。它们的主要区别在于模型中所涉及的预测变量(自变量)的数量。

  • 一元线性回归(Simple Linear Regression)

    • 一元线性回归是分析两个变量之间线性关系的方法,其中一个变量是自变量(X),另一个是因变量(Y)。在这种模型中,我们假设Y与X之间存在线性关系,即Y可以表示为X的线性函数加上一个误差项。一元线性回归的方程可以表示为:
      在这里插入图片描述
  • 多元线性回归(Multiple Linear Regression)

    • 多元线性回归是一元线性回归的扩展,它用于分析一个因变量(Y)与两个或更多自变量(X1, X2, …, Xn)之间的线性关系。在多元线性回归模型中,Y被假设为这些自变量的线性组合加上一个误差项。多元线性回归的方程可以表示为:
      在这里插入图片描述
  • 主要区别

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

2、安装scikit-learn

Python中执行线性回归的一个非常流行和强大的库是scikit-learn。scikit-learn提供了丰富的工具来进行数据挖掘和数据分析,包括简单和复杂的线性回归模型。

  • 如果你还没有安装scikit-learn,你可以通过pip来安装它:

    pip install scikit-learn
    

3、准备示例的数据集

4、一元线性回归示例

  • 通过模型训练,找到广告投入(自变量)的多少对销售额(因变量)影响的一元线性关系

  • 步骤:

    • 1、导入数据
    • 2、 绘制数据之间的散点图
    • 3、求数据之间的相关系数
    • 4、设置模型参数,建立回归模型
    • 5、训练模型并检测
    • 6、求出线性回归模型
    • 7、利用回归模型进行预测
  • 1、导入数据

    • 运用pandas中读取文件的方式,导入数据
      data = pd.read_csv("data.csv")
      
  • 2、 绘制数据之间的散点图

    • 运用matplotlib库中的画图方法画出数据之间的散点图,观察数据之间是否具有线性相关的趋势

    • 这一步骤在整个代码中并没有起到处理数据的作用,只是为了让我们可以直观的看出数据之间的关系

      plt.scatter(data.广告投入, data.销售额)
      plt.show()
      

      在这里插入图片描述

  • 3、求数据之间的相关系数

    • 在Python中,特别是在使用pandas库处理数据时,corr()函数是一个非常有用的方法,它用于计算DataFrame中列与列之间的相关系数。
    • 相关系数越接近1,说明它们之间受相互的影响越大
      corr = data.corr()
      
  • 4、设置模型参数,建立回归模型

    • 分别用变量接收数据中的值,后面传入模型中训练
    • 这里直接调用 scikit-learn 库中的 LinearRegression() 模型
      x = data[['广告投入']]
      y = data[['销售额']]
      lr = LinearRegression()
      
  • 5、训练模型并检测

    • fit() 训练方法中传入训练数据
    • predict()方法用于对新的或现有的自变量进行预测,返回预测的因变量值,这里我们直接传入我们训练的自变量,观察得出的结果有多少偏差
    • score()方法用于评估模型对给定数据(x, y)的拟合优度,其中x是自变量数据,y是真实的因变量数据。对于线性回归模型,score 方法默认计算的是决定系数(R2 score),它表示模型预测值与实际值之间的拟合程度。R2 score的值越接近1,说明模型的拟合效果越好;如果为0,则表示模型的表现和简单预测平均值一样;如果小于0,则表示模型的表现甚至不如简单预测平均值。
      lr.fit(x, y)
      result = lr.predict(x)
      score = lr.score(x, y)
      
  • 6、求出线性回归模型

    • 分别求出回归的模型的截距和斜率
      a = round(lr.intercept_[0], 2)  # 查看截距 -> 
      b = round(lr.coef_[0][0], 2)  # 查看斜率 ->
      # 运用字符串的方法打印出线性回归模型
      print("线性回归模型为:y = {}x + {}.".format(b, a))
      # 结果:线性回归模型为:y = 3.74x + -36.36
      
  • 7、利用回归模型进行预测

    • 自定义变量的值,传入到模型中得出结果
      predict = lr.predict([[21], [23], [99]])
      print(predict)
      
      """
      结果:
      [[ 42.13436123]
       [ 49.61013216]
       [333.68942731]]
      """
      
  • 完整代码

import pandas as pd
from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt

# 导入数据
data = pd.read_csv("一元.csv")

# 绘制散点图
plt.scatter(data.广告投入, data.销售额)
plt.show()

# 求数据之间的相关系数
corr = data.corr()

# 设定模型参数,建立回归模型
x = data[['广告投入']]
y = data[['销售额']]
lr = LinearRegression()
# print(x, y)

# 训练模型
lr.fit(x, y)
# 对回归模型进行检测
result = lr.predict(x)
score = lr.score(x, y)

a = round(lr.intercept_[0], 2)  # 查看截距
b = round(lr.coef_[0][0], 2)  # 查看斜率
print("线性回归模型为:y = {}x + {}".format(b, a))

# 利用回归模型进行预测
predict = lr.predict([[21], [23], [99]])
print(predict)

5、二元线性回归示例

  • 通过模型训练,找到体重、年龄(自变量)对血压收缩(因变量)影响的线性关系
  • 二元线性模型在代码上与一元线性模型没有太多的区别,只是在自变量的数量上有区别,只需要给定自变量多个元素即可
  • 直接上完整代码,数据集在上面的连接中自取
  • 完整代码:
import pandas as pd
from sklearn.linear_model import LinearRegression

# 导入数据
data = pd.read_csv("二元.csv", encoding='gbk', engine='python')
# print(data)

# 打印相关系数矩阵
corr = data[["体重", "年龄", "血压收缩"]].corr()

# 设定模型参数,建立回归模型
lr_model = LinearRegression()
x = data[['体重', '年龄']]
y = data[['血压收缩']]

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

# 计算准确率
score = lr_model.score(x, y)
print(score)

# 自定义参数给模型,进行预测
print(lr_model.predict([[80, 60]]))
print(lr_model.predict([[70, 30], [70, 20]]))

# 得到回归模型中的参数值
a = lr_model.coef_
b = lr_model.intercept_
print("线性回归模型为: y = {:.2f}x1 + {:.2f}x2 + {:.2f}.".format(a[0][0], a[0][1], b[0]))
# 线性回归模型为: y = 2.14x1 + 0.40x2 + -62.96
  • 35
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值