前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >线性回归-最小二乘法入门(波士顿房价)

线性回归-最小二乘法入门(波士顿房价)

作者头像
GeekLiHua
发布2025-01-21 14:37:58
发布2025-01-21 14:37:58
7400
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

线性回归-最小二乘法入

简介:本文讲解,线性回归-最小二乘法入门。

首先需要在jupyter中安装对应的环境。

代码语言:javascript
代码运行次数:0
复制
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sklearn -i https://pypi.tuna.tsinghua.edu.cn/simple

线性归回归原理讲解

线性回归模型

线性回归是一种统计学上常用的建模方法,用于描述自变量(输入)与因变量(输出)之间的线性关系。线性回归模型假设因变量与自变量之间存在着线性关系,这意味着通过自变量的线性组合可以预测因变量的数值。

线性回归模型的数学表达式通常如下所示:

y = b_0 + b_1x_1 + b_2x_2 + \ldots + b_nx_n + \varepsilon

其中:

y

是因变量(输出),

x_1, x_2, \ldots, x_n

是自变量(输入),

b_0, b_1, b_2, \ldots, b_n

是模型的系数,代表着自变量对因变量的影响程度,

\varepsilon

是误差项,代表了模型无法解释的部分。

线性回归模型的目标是找到最优的系数

b_0, b_1, b_2, \ldots, b_n

,使得模型的预测值与实际观测值之间的差异尽可能小。通常使用最小二乘法来估计这些系数,即通过最小化观测值与模型预测值之间的残差平方和来确定系数的值。

线性回归模型常被用于以下情况:

  • 预测:通过已知的自变量来预测因变量的值。
  • 解释:分析自变量与因变量之间的关系,确定哪些自变量对因变量有显著影响。
  • 控制:根据模型的结果调整自变量的值,以控制因变量的值。
最小二乘法

最小二乘法是一种常用的参数估计方法,通常用于线性回归模型中。它的目标是通过最小化观测值与模型预测值之间的残差平方和来确定模型的参数,以使模型的拟合效果达到最优。

在线性回归模型中,我们希望找到一条直线(或者在多维情况下是一个超平面),最能够拟合数据点的分布。最小二乘法通过调整直线的斜率和截距(或者在多维情况下调整各个自变量的系数),使得拟合线与数据点的残差平方和最小化。

残差指的是每个观测值与模型预测值之间的差异,残差平方和则是所有观测值的残差平方的总和。最小二乘法的目标是找到一组参数,使得这个残差平方和达到最小。

数学上,对于简单的一元线性回归模型

y = b_0 + b_1x + \varepsilon

,其中

y

是因变量,

x

是自变量,

b_0

b_1

是模型的系数,

\varepsilon

是误差项,最小二乘法的目标是找到最优的

b_0

b_1

,使得残差平方和最小化。

最小二乘法的步骤包括:

  1. 定义线性模型的形式。
  2. 定义损失函数,通常是残差平方和。
  3. 求解损失函数的最小值,通常通过求导数等方法来确定参数的最优解。
  4. 评估模型拟合的好坏,可以使用各种统计指标来评估线性模型的拟合效果,如R方(拟合优度)等。
自己实现线性回归代码

线性回归模型的最小二乘参数估计是通过最小化残差平方和来确定模型参数的方法。在线性回归中,我们假设因变量

y

与自变量

X

之间存在线性关系,即:

y = \theta_0 + \theta_1 x_1 + \theta_2 x_2 + \ldots + \theta_n x_n + \varepsilon

其中:

y

是因变量(输出),

x_1, x_2, \ldots, x_n

是自变量(输入),

\theta_0, \theta_1, \ldots, \theta_n

是模型的参数,称为系数,

\varepsilon

是误差项,代表了模型无法解释的部分。

最小二乘法的目标是找到一组参数

\theta_0, \theta_1, \ldots, \theta_n

,使得模型的预测值与实际观测值之间的差异尽可能小。

参数的估计公式可以表示为:

\boldsymbol{\theta} = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y}

其中:

\boldsymbol{\theta}

是一个包含所有参数的向量,

\mathbf{X}

是包含所有样本的特征矩阵,每行对应一个样本,每列对应一个特征,

\mathbf{y}

是因变量向量。

这个公式通过矩阵运算直接得到了最优参数。

  • 算法设计思路
  1. 导入必要的库:
代码语言:javascript
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

在这里,导入了 NumPy 用于数值计算,Matplotlib 用于绘图,以及 scikit-learn 中的 load_boston 函数用于加载波士顿房价数据集。

  1. 定义自定义线性回归模型类 LinearRegression
代码语言:javascript
代码运行次数:0
复制
class LinearRegression:
    def __init__(self):
        self.theta = None  # 模型参数

    # 拟合函数
    def fit(self, X, y):
        # 添加偏置项,构建设计矩阵
        X_b = np.c_[np.ones((len(X), 1)), X]
        # 计算最优参数,应用最小二乘法
        self.theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

    # 预测函数
    def predict(self, X):
        # 添加偏置项,构建设计矩阵
        X_b = np.c_[np.ones((len(X), 1)), X]
        # 返回预测值
        return X_b.dot(self.theta)

在这个类中,定义了两个方法,fit 方法用于训练模型,predict 方法用于预测数据。在 fit 方法中,首先添加了偏置项(即截距),然后构建了设计矩阵 X_b,使用最小二乘法计算了最优参数 theta。在 predict 方法中,使用训练得到的参数 theta 进行预测。

  1. 加载波士顿房价数据集:
代码语言:javascript
代码运行次数:0
复制
boston = load_boston()
X = boston.data[:, 5]  # 选择房间数量作为自变量
y = boston.target       # 房屋价格作为因变量

我们从波士顿房价数据集中提取了自变量 X(房间数量)和因变量 y(房屋价格)。

  1. 创建线性回归对象并训练模型:
代码语言:javascript
代码运行次数:0
复制
lr_model = LinearRegression()
lr_model.fit(X, y)

实例化了 LinearRegression 类,并调用 fit 方法来训练模型。

  1. 打印模型参数:
代码语言:javascript
代码运行次数:0
复制
print("参数:", lr_model.theta)

这行代码用于输出训练得到的模型参数。

  1. 绘制数据散点图和拟合直线:
代码语言:javascript
代码运行次数:0
复制
plt.scatter(X, y, color='blue')  # 绘制数据散点图
plt.plot(X, lr_model.predict(X), color='red')  # 绘制拟合直线

使用 Matplotlib 绘制了数据散点图和拟合的直线。数据散点图展示了房间数量与房价之间的关系,而拟合直线表示了模型对数据的拟合情况。

  1. 添加标签和标题,并显示图形:
代码语言:javascript
代码运行次数:0
复制
plt.xlabel('房间平均数')
plt.ylabel('房价')
plt.title('波士顿房屋数据集的线性回归')
plt.show()

这些代码用于添加 x 轴和 y 轴的标签,以及图形的标题,并调用 plt.show() 方法显示绘制的图形。

  • 完整代码
代码语言:javascript
代码运行次数:0
复制
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

# 自定义线性回归模型类
class LinearRegression:
    def __init__(self):
        self.theta = None  # 模型参数

    # 拟合函数
    def fit(self, X, y):
        # 添加偏置项,构建设计矩阵
        X_b = np.c_[np.ones((len(X), 1)), X]
        # 计算最优参数,应用最小二乘法
        self.theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)

    # 预测函数
    def predict(self, X):
        # 添加偏置项,构建设计矩阵
        X_b = np.c_[np.ones((len(X), 1)), X]
        # 返回预测值
        return X_b.dot(self.theta)

# 加载波士顿房价数据集
boston = load_boston()
X = boston.data[:, 5]  # 选择房间数量作为自变量
y = boston.target       # 房屋价格作为因变量

# 创建线性回归对象
lr_model = LinearRegression()

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

# 打印模型参数
print("参数:", lr_model.theta)

# 绘制数据散点图
plt.scatter(X, y, color='blue')

# 绘制拟合直线
plt.plot(X, lr_model.predict(X), color='red')

# 添加标签和标题
plt.xlabel('房间平均数')
plt.ylabel('房价')
plt.title('波士顿房屋数据集的线性回归')


# 显示图形
plt.show()

运行结果:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-03-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 线性回归-最小二乘法入
    • 线性归回归原理讲解
      • 线性回归模型
      • 最小二乘法
      • 自己实现线性回归代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档