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

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

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


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


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

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


线性归回归原理讲解


线性回归模型


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


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

image.png

其中:

  • y 是因变量(输出),
  • x1,x2,…,xn 是自变量(输入),
  • b0,b1,b2,…,bn 是模型的系数,代表着自变量对因变量的影响程度,
  • ε 是误差项,代表了模型无法解释的部分。


线性回归模型的目标是找到最优的系数 b 0 , b 1 , b 2 , … , b n ,使得模型的预测值与实际观测值之间的差异尽可能小。通常使用最小二乘法来估计这些系数,即通过最小化观测值与模型预测值之间的残差平方和来确定系数的值。


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

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


最小二乘法


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


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


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


数学上,对于简单的一元线性回归模型 image.png ,其中 y 是因变量,x 是自变量,b0和 b1

是模型的系数,ε 是误差项,最小二乘法的目标是找到最优的 b0和 b1,使得残差平方和最小化。


最小二乘法的步骤包括:

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


自己实现线性回归代码


线性回归模型的最小二乘参数估计是通过最小化残差平方和来确定模型参数的方法。在线性回归中,我们假设因变量 y 与自变量 X 之间存在线性关系,即:

image.png

其中:


  1. y 是因变量(输出),
  2. x1 , x2 , … , xn 是自变量(输入),
  3. θ 0 ,θ1 ,…,θn是模型的参数,称为系数,
  4. ε 是误差项,代表了模型无法解释的部分。


最小二乘法的目标是找到一组参数 θ0 , θ1 , … , θn ,使得模型的预测值与实际观测值之间的差异尽可能小。


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

image.png

其中:


  1. θ是一个包含所有参数的向量,
  2. X是包含所有样本的特征矩阵,每行对应一个样本,每列对应一个特征,
  3. y是因变量向量。


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

  • 算法设计思路
  1. 导入必要的库:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston

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


  1. 定义自定义线性回归模型类 LinearRegression:
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. 加载波士顿房价数据集:
boston = load_boston()
X = boston.data[:, 5]  # 选择房间数量作为自变量
y = boston.target       # 房屋价格作为因变量

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


  1. 创建线性回归对象并训练模型:
lr_model = LinearRegression()
lr_model.fit(X, y)

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


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

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


  1. 绘制数据散点图和拟合直线:
plt.scatter(X, y, color='blue')  # 绘制数据散点图
plt.plot(X, lr_model.predict(X), color='red')  # 绘制拟合直线

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


  1. 添加标签和标题,并显示图形:
plt.xlabel('房间平均数')
plt.ylabel('房价')
plt.title('波士顿房屋数据集的线性回归')
plt.show()

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


  • 完整代码
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()


运行结果:

相关文章
Dataset之Boston:Boston波士顿房价数据集的简介、下载、使用方法之详细攻略
Dataset之Boston:Boston波士顿房价数据集的简介、下载、使用方法之详细攻略
|
BI 索引 Python
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
利用Numpy读取iris数据集并进行排序、去重、求统计量等操作实战(附源码)
651 0
|
关系型数据库 MySQL Linux
Docker(三)实战:-Docker部署Golang项目并关联Mysql容器
Dockerfile 文件是用于定义 Docker 镜像生成流程的配置文件,文件内容是一条条指令,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建;这些指令应用于基础镜像并最终创建一个新的镜像
1688 0
Docker(三)实战:-Docker部署Golang项目并关联Mysql容器
|
2月前
|
监控 安全 数据安全/隐私保护
55_大模型部署:从云端到边缘的全场景实践
随着大型语言模型(LLM)技术的飞速发展,从实验室走向产业化应用已成为必然趋势。2025年,大模型部署不再局限于传统的云端集中式架构,而是向云端-边缘协同的分布式部署模式演进。这种转变不仅解决了纯云端部署在延迟、隐私和成本方面的痛点,还为大模型在各行业的广泛应用开辟了新的可能性。本文将深入剖析大模型部署的核心技术、架构设计、工程实践及最新进展,为企业和开发者提供从云端到边缘的全场景部署指南。
|
机器学习/深度学习 算法 数据处理
《零基础实践深度学习》波士顿房价预测任务1.3.3.4训练过程
这篇文章详细阐述了如何使用线性回归对波士顿房价进行预测,包括构建神经网络模型、数据处理、模型设计、训练过程、梯度下降法以及随机梯度下降法(SGD)的应用,并提供了完整的Python代码实现。
|
安全 物联网 网络安全
密码学在现代网络中的应用:守护数字世界的基石
【6月更文挑战第12天】密码学在现代网络中扮演关键角色,保障信息安全和数据机密性。其应用包括数据加密(对称与非对称算法)、数字签名(验证信息完整性和身份)、安全协议(如SSL/TLS、IPsec)及身份验证。未来,量子密码学、隐私保护技术和物联网安全将是密码学发展的重要方向,抵御新威胁,守护数字世界。
波士顿房价数据集 Boston house prices dataset
波士顿房价数据集 Boston house prices dataset
379 2
|
Web App开发 JavaScript 前端开发
【专栏】如何使用 Chrome DevTools 的断点功能提升前端调试效率, 花式打断点
【4月更文挑战第29天】本文介绍了如何使用 Chrome DevTools 的断点功能提升前端调试效率。从基本的行断点和函数断点,到更高级的条件断点、DOM 断点、XHR 断点和事件断点,以及代码注入断点,详细阐述了各种断点的设置和应用场景。通过断点调试实战案例,如异步操作、复杂逻辑和性能优化,展示断点在解决实际问题中的重要作用。掌握这些技巧能有效提高开发质量和效率。
854 1
|
存储 关系型数据库 MySQL
『Mysql』Mysql四种分区方式及组合分区落地实现
📣读完这篇文章里你能收获到 - Mysql分区的概念 - Mysql分区四种分区方式的落地及案例 - Mysql分区的管理
668 0
『Mysql』Mysql四种分区方式及组合分区落地实现
|
SQL 前端开发 关系型数据库
MySQL only_full_group_by 1055 报错的三种解决方案,临时关闭有影响吗?
当我们迁移到 MySQL 5.7+ 的版本时,常会碰到 `ERROR 1055 only_full_group_by` 错误,这是 5.7 之后 `SQL_MODE` 默认打开了严格模式导致的错误。说明你代码里有地方写的不严谨。
1670 0

热门文章

最新文章