线性回归
单变量线性回归
梯度下降做的事就是找到一个值 \(\theta\) 使得代价函数 \(J(\theta)\) 最小
多变量线性回归
- 通常用 大写、黑体 字母表示矩阵,用小写字母表示标量或向量。
- 正斜体 总的原则是变量(矢量,张量)等用斜体;数字、确定符号、词汇缩缩、单位等用正体。参考 科技论文书写规范之正斜体问题
符号说明
符号/变量 | 含义 |
---|---|
\(n\) | 特征量的数目 |
\(m\) | 训练样本的数量 |
\(h\) | 学习方法的解决方案或函数也称为假设 |
\(\boldsymbol{x}^{\left(i \right)}\) | 第\(i\)个训练样本的输入特征值 |
\(\boldsymbol{x}^{\left(i \right)}_{j}\) | 第\(i\)个训练样本中第\(j\)个特征量的值 |
python
计算代价函数的代码 通过图像,\(y\) 轴是代价函数的最小值 \(\mathrm{min}J(\theta)\) ,\(x\)轴是迭代次数。如果随着迭代次数的增加,代价函数越来越小,就说明 1
2
3def conputeCost (x, y, theta):
inner = np.power(((x * theta.T) – y), 2)
return np.sum(inner) / (2 * len(x))梯度下降
在正常工作。
梯度下降 vs. 正规方程
梯度下降 | 正规方程 |
---|---|
需要选择学习率 | 不需要 |
需要多次迭代 | 一次运算就得出结果 |
当特征数量大的时候比较适用 | 计算 \((\boldsymbol{X^TX})^{-1}\) 如果特征数量很大,则运算的速度就会很慢,矩阵逆运算的时间复杂度是 \(\mathrm{O}(n^3)\),通常来说 n<10000 还是可以接受的。 |
适用于各种模型 | 只适用与线性模型 |
向量化
使用程序计算这样一个线性回归假设函数:\(h_{\theta}(x)=\sum^n_{j=0} \theta_j x_j\),可以写成向量的形式: \[h_{\theta}(x)=\sum^n_{j=0} \theta_j x_j = \boldsymbol{ \theta^T x}\] 非向量化实现 1
2
3double prediction = 0.0;
for(int j = 0; j<=n; j++)
prediction += theta[j] * x[j];
向量化实现,使用 C++
数值线性代数库,更简单、更高效的代码 1
double prediction = theta.transpose( ) * x;