线性回归

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

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

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

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

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

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

  • θ^\hat{\theta} 向量是使成本函数最小的 θ\theta 值。
  • yyy(1)y^{(1)}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
"""
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读