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

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

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


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


首先需要在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()


运行结果:

相关文章
|
23天前
|
机器学习/深度学习 人工智能 算法
机器学习-线性模型(波士顿房价预测)
机器学习-线性模型(波士顿房价预测)
|
7天前
|
机器学习/深度学习 vr&ar Python
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
13 0
|
9天前
|
机器学习/深度学习 vr&ar Python
数据分享|R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
数据分享|R语言用logistic逻辑回归和AFRIMA、ARIMA时间序列模型预测世界人口
61 6
|
16天前
|
机器学习/深度学习 算法 索引
R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况
R语言逻辑回归logistic模型分析泰坦尼克titanic数据集预测生还情况
21 0
|
16天前
|
机器学习/深度学习 存储 数据可视化
R语言逻辑回归Logistic回归分析预测股票涨跌
R语言逻辑回归Logistic回归分析预测股票涨跌
28 0
|
6月前
|
机器学习/深度学习 数据挖掘
knn 线性回归 决策树房价预测实战
knn 线性回归 决策树房价预测实战
47 0
|
8月前
|
机器学习/深度学习 算法 API
机器学习梯度下降法应用波士顿房价预测
机器学习梯度下降法应用波士顿房价预测
118 0
|
机器学习/深度学习 Web App开发 算法
四、多元线性回归
四、多元线性回归
四、多元线性回归
|
机器学习/深度学习
基于SVM-支持向量机解决波士顿房价预测回归问题
基于SVM-支持向量机解决波士顿房价预测回归问题
326 0
基于SVM-支持向量机解决波士顿房价预测回归问题
|
人工智能 算法 开发者
多元线性回归-预测电影票房|学习笔记
快速学习多元线性回归-预测电影票房
924 0
多元线性回归-预测电影票房|学习笔记