多变量线性回归
多变量线性回归的思想与单变量线性回归一致。要想利用数值计算工具方便快速地进行回归分析,则需要各个计算步骤向量化。
变量描述
- $x_j^{(i)}$ 第$i$个训练数据中的第$j$个特征
- $x^{(i)}$ 输入特征的$i$个训练数据
- $m$ 训练数据的数量
- $n$ 特征的数量
假设函数向量化
备注: $x_0^{(i)} = 1$
多变量的梯度下降
repeat until convergence: $\lbrace$
$\quad \theta_j := \theta_j - \alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \quad for \quad j: = 0…n$
$\rbrace$
特征缩放
当不同参数的尺度范围相差很远时,图像会很扁,需要很多次迭代才能收敛。如果将这些特征的特征都缩放到-1到1之间 或者 -0.5到0.5之间,就能较快地迭代
常用方法有特征缩放和均值归一化
其中$u_i$是第$i$个特征的平均值,$s_i$是标准差或者最大值减最小值
学习率
梯度下降算法的每次迭代受到学习率的影响,如果学习率α过小,则达到收敛所需的迭代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
正规方程
$\theta = (X^T)^{-1}X^Ty$
比较:梯度下降需要选择学习率$\alpha$,需要多次迭代,当特征数量较多时能较好适用,适用于各种模型。正规方程不需要学习率,一次运算得出,通常n小于10000时还可以接受,只适用于线性模型,不适合逻辑回归等其他模型。
向量化(Vectorization)
Octave教程
数值计算
- v = 1:1:6 v被赋值1至6的六个整数
- ones(2,3) 生成全1阵
- zeros(1,3) 生成全0阵
- rand(3,3) 生成随机矩阵(介于0和1之间)
- eye(6) 生成单位矩阵
- size(A) 返回矩阵大小,1x2矩阵
- size(A,1) 矩阵行数
- size(A,2) 矩阵列数
- length(A) 最大维度
- who 工作空间中的变量
- clear 删除空间中的变量
- save 文件名 变量名 将变量存为文件
- A([1 3],:) 返回第1,3行的所有列
- A(:,2) = [10;11;12] 第二列被替换
- A = [A,[100;101;102]] 在矩阵右面附加列
- A(:) 把所有元素放入单独列向量
- C = [A,B] 把两个矩阵直接连在一起
- A * C 向量相乘
- A .* B 点积
- A .^ 2 每个元素平方
- 1 ./ A 每个元素求倒数
- log(A) 求对数
- exp(A) 自然数e的幂次运算
- A < 3 返回小于3的元素位置,值为1
- magics(n) n阶幻方
- [r,c] = find(A >=7 )
- sum(a) 累加
- prod(a) 累乘
- floor(a) 向下四舍五入
- ceil(a) 向上四舍五入
- type(3) 3x3矩阵
- max(A,[],1) 得到每一列最大值
- max(A,[],2) 得到每一行最大值
- sum(A,1) 每一列的总和
- sum(A,2) 每一行的总和
- flipup/flipud 向上/下翻转
- pinv(A) 求伪逆矩阵
绘图
- plot(x,y)
- xlablel(‘’) 横轴名称
- ylable(‘’) 纵轴名称
- subplot(1,2,1) 将图像分为1*2格子,使用第一个格子
- axis([0.5 1 -1 1]) 设置横轴和纵轴的范围
for,while,if语句
- 都需要end
- 与C语言类似
- function [返回变量] = functionName(参数)