original_x = [[10.0,4.0], [8.0,5.0], [13.0,4.0], [9.0,9.0], [11.0,14.0], [14.0,12.0], [6.0,13.0], [4.0,16.0], [12.0,18.0], [7.0,20.0], [5.0,24.0]]
original_y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
如果 original_x 的每一项有多个参数(即特征),那么问题就变成了 多元线性回归。多元线性回归的目标是找到一组参数 和截距 ,使得以下线性方程能够最好地拟合数据: 其中:
- 输入特征: 是各个特征变量;
- 系数(斜率): 是每个特征对应的权重,表示该特征对目标变量 的影响程度;
- 截距: 是常数项,表示当所有特征 均为 0 时, 的预测值。
- 方程含义: - 多元线性回归通过线性组合多个特征 ,加权求和后加上截距 ,来预测目标变量 。 - 每个系数 的大小反映了对应特征 对 的重要性(正负号表示方向)。
若用矩阵表示,方程可以写成: 其中:
- 是 的特征矩阵( 为样本数);
- 是参数向量;
- 可通过添加一列全 1 的特征合并到矩阵 中,此时方程变为 。
对于多元线性回归,参数的求解通常通过矩阵运算来实现。最小二乘法的结果为:
其中:
- X:这是一个矩阵,通常表示特征矩阵,其中每一行代表一个样本,每一列代表一个特征。
- Xᵀ:这是矩阵 X 的转置矩阵。转置操作是将矩阵的行和列互换。
- XᵀX:这是矩阵 X 的转置与矩阵 X 的乘积。
- (XᵀX)⁻¹:这是矩阵 XᵀX 的逆矩阵。逆矩阵的定义是,如果 A 是一个方阵,且存在矩阵 B 使得 AB = BA = I(其中 I 是单位矩阵),那么 B 就是 A 的逆矩阵,记作 A⁻¹。
- y:这是一个向量,通常表示目标变量或响应变量。
整个公式 θ = (XᵀX)⁻¹ Xᵀ y 是线性回归中用于计算参数向量 θ 的公式。这个公式通过最小化残差平方和来找到最佳的线性模型参数。
import numpy as np
original_x = [[10.0,4.0], [8.0,5.0], [13.0,4.0], [9.0,9.0], [11.0,14.0], [14.0,12.0], [6.0,13.0], [4.0,16.0], [12.0,18.0], [7.0,20.0], [5.0,24.0]]
original_y = [8.04, 6.95, 7.58, 8.81, 8.33, 9.96, 7.24, 4.26, 10.84, 4.82, 5.68]
def calculate_theta(X, y):
# 在 X 矩阵中添加一列全为 1 的列来表示截距项
X = np.c_[np.ones(X.shape[0]), X]
X_transpose = X.T # 计算 X 的转置
X_transpose_X = np.dot(X_transpose, X) # 计算 X^T * X
X_transpose_X_inv = np.linalg.inv(X_transpose_X) # 计算 (X^T * X) 的逆
X_transpose_y = np.dot(X_transpose, y) # 计算 X^T * y
theta = np.dot(X_transpose_X_inv, X_transpose_y) # 计算 θ
return theta
# 示例数据
X = np.array(original_x) # 包含截距项的X矩阵
y = np.array(original_y)
theta = calculate_theta(X, y)
print("参数θ为:\n", theta)
输出结果 参数 为: 分别对应 , ,
当然在一元回归中用矩阵运算也可以得到相同的结果