线性回归

线性回归就是对输入特征加权求和,再加上一个偏置项(也称为截距项)的常数,得到的结果就是预测值。公式如下:
y ^ = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ n x n \hat{y} = \theta_0 + \theta_1x_1 + \theta_2x_2 + ... + \theta_nx_n y^=θ0+θ1x1+θ2x2+...+θnxn

  • y ^ \hat{y} y^ 是预测值
  • n n n 是特征数量
  • x i x_i xi 是第 i 个特征
  • θ j \theta_j θj 是第 j 个模型参数( θ 0 \theta_0 θ0 是偏置项, θ 1 \theta_1 θ1, θ 2 \theta_2 θ2, θ 3 \theta_3 θ3 θ n \theta_n θn是特征权重)

向量化公式:
y ^ = h θ ( X ) = θ T ⋅ X \hat{y} = h_\theta(X) = \theta^T \cdot X y^=hθ(X)=θTX

  • θ \theta θ 是模型的参数向量(包括偏置项 θ 0 \theta_0 θ0 以及特征权重 θ 1 \theta_1 θ1 θ n \theta_n θn
  • θ T \theta^T θT θ \theta θ 的转置
  • X X X 是实例的特征向量(包括 x 0 x_0 x0 x n x_n xn, x 0 x_0 x0 永远是 1)
  • θ T ⋅ X \theta^T \cdot X θTX θ T \theta^T θT X X X 的点积
  • h h h 是使用模型参数 θ \theta θ 的假设函数。

线性回归训练就是求出合适的权重 θ \theta θ。如何求 θ \theta θ 呢?
回归模型最常见的性能指标是均方根误差(RMSE):
S = ( x 1 − x ) 2 + ( x 2 − x ) 2 + . . . + ( x n − x ) 2 n S = \sqrt{\frac{(x_1 - x)^2 + (x_2 - x)^2 + ... + (x_n - x)^2}{n}} S=n(x1x)2+(x2x)2+...+(xnx)2
预测值与真实值的偏差的平方与预测次数 n 的比值的平方根,等同与如下公式:
M S E ( X , h θ ) = 1 n ∑ i = 0 n ( θ T ⋅ X ( i ) − y ( i ) ) 2 MSE(X, h_\theta) = \frac{1}{n}\sum_{i = 0} ^n(\theta^T \cdot X^{(i)} - y^{(i)})^2 MSE(X,hθ)=n1i=0n(θTX(i)y(i))2

使 RMSE 最小的 θ \theta θ 值就是我们想要的,有一个闭式解方法(直接得到结果):
θ ^ = ( X T ⋅ X ) − 1 ⋅ X T ⋅ y \hat{\theta} = (X^T \cdot X)^{-1} \cdot X^T \cdot y θ^=(XTX)1XTy

  • θ ^ \hat{\theta} θ^ 向量是使成本函数最小的 θ \theta θ 值。
  • y y y y ( 1 ) y^{(1)} y(1) y ( n ) y^{(n)} y(n) 的目标值向量

测试:

import numpy as np
X = 2 * np.random.rand(100, 1) # 随机生成 100 * 1 维的0~1 的向量
y = 4 + 3 * X + np.random.randn(100, 1)  # randn函数返回一个或一组样本,具有标准正态分布。 对应函数 y = 4 + 3 * x + 高斯噪音

## 根据上面数据 和 闭式解方程 求 y 公式锁对应的 θ 
X_b = np.c_[np.ones((100, 1)), X]  # 添加 x_0 参数(x_0 永远等于 1)
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
"""
求得 theta_best (非常接近 4 和 3):
array([[4.20301878],
       [3.03297697]])
"""

拿得到的 θ ^ \hat\theta θ^ 进行预测:

X_new = np.array([[0], [2]])  # x 取两个值 0,2
X_new_b = np.c_[np.ones((2, 1)), X_new]  # 补上 x_0
y_predict = X_new_b.dot(theta_best)
"""
array([[ 4.20301878],   # 约等于 4 + 3 * 0
       [10.26897272]])    # 约等于 4 + 3 * 2
"""

你可能感兴趣的:(机器学习,机器学习,线性回归,模型训练,均方根误差)