1. 基本形式
- 线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数。
- w和b学得之后,模型就得以确定。w直观表达了各属性在预测中的重要性。
2. 线性回归
- 提出假设:给定数据集
,其中,
“线性回归”(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。
- 线性回归可以被看做是样本点的最佳拟合直线。
- 这条最佳拟合线也被称为回归线(regression line),回归线与样本点之间的垂直连线即所谓的偏移(offset)或残差(residual)——预测的误差。
- 在只有一个解释变量的特殊情况下,线性回归也称为简单线性回归(simple linear regression)
- 当然,我们可以将线性回归模型扩展为多个解释变量。此时,即为所谓的多元线性回归(multiple linear regression)。如下图所示即为二元线性回归,一个回归平面来拟合样本点。
- 基于最小二乘法构建线性回归模型
- 设计代价函数:通过最小二乘法,基于均方误差最小化来求解回归曲线的参数,使得回归曲线到样本点垂直距离(残差或误差)的平方和最小。
- 代价函数为:
- 代价函数最小化求解:需要求解代价函数最小时的w和b的值。
- 通过梯度下降法来计算回归参数。如下图所示,将梯度下降的原理形象地描述为下山,直到获得一个局部或者全局最小值。在每次迭代中,根据给定的学习速率和梯度的斜率,能够确定每次移动的步幅,按照步幅沿着梯度方向前进一步。
- 梯度的推导过程如下图:
则使用梯度下降法求解模型的算法伪码:
1 初始化模型参数:(学习速率),w(权重)
2 判断循环条件是否达到(达到固定循环次数或者误差减小到某个门限)
3 对每一组训练数据
4 输入数据,并计算训练误差
5 计算代价函数的梯度
6 计算权重增量:
7
8 更新每一个权重
9
源代码如下:
linear_regression_gds.py 线性回归类模块
import numpy as np class LinearRegressionGDS: def __init__(self, eta=0.001, num_cycles=50): self.learning_rate = eta #学习速率 self.cycles = num_cycles #循环次数 # 计算线性回归的输出 def lr_input(self, X): return np.dot(X, self.w[1:]) + self.w[0] # 训练模型 def fit(self, X, y): self.total_cost = [] #存储每一次迭代的的代价值 self.w = np.zeros(np.shape(X)[1] + 1) #初始化权值w self.delt_w = np.zeros(np.shape(X)[1] + 1) #初始化权值增量