【机器学习】线性回归
线性回归模型的三大组件
1. 模型表达式
线性回归假设输入和输出之间的关系是 线性的。
公式写作:
Y:预测值(或真实观测值向量)
X:特征矩阵,每一行对应一个样本,每一列对应一个特征(通常会在最后一列加上一列常数 1,用来吸收截距 b)
W:参数向量,包含了各个特征的权重以及截距项
👉 意思就是:输出等于“特征 × 权重”的线性组合。
2. 损失函数
我们需要找到一组参数 W,让预测值 XW 尽量贴近真实值 Y。
误差定义为:
这里的
表示平方和(误差平方再相加)
除以 m 是取平均,得到“均方误差”(MSE)
👉 直观理解:让所有点到直线/平面的垂直距离尽可能小。
3. 模型求解(最小二乘法)
要最小化损失函数,直接套用最小二乘法公式:
这个解就是让误差平方和最小的参数
其中
也叫 伪逆矩阵,它可以把 Y 投影到 X的列空间上
👉 简单理解:线性回归的解,就是**“让直线(或超平面)离所有点最近”**。
备注(截距处理)
在真实数据里,我们通常有模型:
为了把 b一起写进矩阵里,我们在 X 的最后一列加一列全是 1 的常数项,这样 b也能写进 W 里。
✅ 总结一下:
模型表达式:假设输入和输出是线性关系
损失函数:用“误差平方和”来衡量拟合好坏
模型求解:用最小二乘法一次性算出最佳参数
Python代码
(1)自写代码
import numpy as np
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]]) # 输入数据x
y = np.array([8,7,15,14,25,18]) # 输出数据y
xt = np.insert(x, x.shape[1], 1, axis=1) # 给x添加一列1
w = np.linalg.inv(xt.T@xt)@xt.T@y # 按公式求解w,其中inv的功能是求矩阵的逆,@是矩阵的乘法
print("模型参数W:",w) # 打印W
代码运行结果如下:
将W代入线性回归模型,就得到我们最终的模型:
有新的样本过来时,我们就可以用上式进行预测了
(2)调用sklearn
from sklearn import linear_model
import numpy as np
x = np.array([[0, 2], [1, 1], [2,3],[3,2],[4,5],[5,2]]) # 输入数据x
y = np.array([8,7,15,14,25,18]) # 输出数据y
reg = linear_model.LinearRegression() # 初始化sklearn的线性模型
reg.fit(x,y) # 用数据训练模型
print("模型参数:",reg.coef_) # 打印系数
print("模型阈值:",reg.intercept_) # 打印阈值
运行结果如下:
将模型参数代回模型,即有: