机器学习之线性回归 使用正规方程求解线性回归模型的参数

        首先,我们需要了解什么是正规方程。   

        接下来是代码展示,在Jupyter Notebook上实现。

#生成随机数据
import numpy as np                       # 导入numpy库 用于生成随机数据
X = 2 * np.random.rand(100, 1)           # X 是一个 100 行 1 列的矩阵,取值范围在 0 到 2 之间
y = 4 + 3 * X + np.random.randn(100, 1)  # y 是根据线性方程 y = 4 + 3X 加上一些噪声生成的

        下面代码的 theta_best 是求解正规方程得来,方程式的每一部分也是一一对应。 

#线性回归模型的最小二乘法求解过程

X_b = np.c_[np.ones((100, 1)), X]       
# np.ones((100, 1)生成一个 100 行 1 列的全是 1 的矩阵 
# np.c_[]用于按列拼接数组,在这里,它将一个全是 1 的矩阵和原来的 X 矩阵拼接在一起。
# X_b:生成的矩阵,它的形状是 (100, 2),第一列全是 1,第二列是原来的 X 值。

theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)            
# X_b.T 是矩阵 X_b 的转置。 dot是 NumPy库中的一个函数,用于执行矩阵乘法。 
# np.linalg.inv()函数用于计算矩阵 X_b.T.dot(X_b) 的逆矩阵。
>>> theta_best                                                          

# 求解正规方程,得到 theta_best,它是一个 2x1 的矩阵,包含了最佳拟合直线的参数。
#正规方程(Normal Equation)是一种用于求解线性回归模型参数的闭式解(closed-form solution)方法。它直接计算出线性回归模型的最优参数,而不需要使用迭代方法如梯度下降。

        这里,我们就可以得到两个值。  不难看出我们期待的是θ0=4,θ1=3,而得到的是θ0=4.215,θ1=2.755。非常接近,但噪声的存在使其不可能完全还原为原本的函数。

#绘制线性回归模型的预测结果与实际数据点
import matplotlib.pyplot as plt  # 导入 matplotlib.pyplot库,并将其命名为plt,用于绘图
plt.plot(X_new, y_predict, "r-") # 绘制预测的回归直线,并指定线的样式为红色实线。
plt.plot(X, y, "b.")             # 绘制原始数据点,指定点的样式为蓝色圆点
plt.axis([0, 2, 0, 15])          # 设置图表的坐标轴范围,确保图表的x轴范围为0到2,y轴范围为0到15
plt.show()                       # 显示图表。

        绘制模型的预测结果如图所示:

        除此之外,还可以使用Scikit-Learn执行线性回归。

# 使用Scikit-Learn执行线性回归

>>> from sklearn.linear_model import LinearRegression    
# LinearRegression是一个用于执行线性回归的类

>>> lin_reg = LinearRegression()  
# 创建一个 LinearRegression 类的实例,命名为 lin_reg。这个实例将用于拟合数据和进行预测

>>> lin_reg.fit(X, y) 
# 使用 fit 方法拟合线性回归模型。X 是输入特征矩阵。y 是目标值向量。
# 拟合过程会计算出最佳拟合直线的参数(截距和斜率)

>>> lin_reg.intercept_, lin_reg.coef_  
#获取模型的截距(intercept)和斜率(coefficients)

>>> lin_reg.predict(X_new)   
# 使用拟合好的线性回归模型对新的数据X_new进行预测。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值