多变量线性回归
多变量线性回归的思想与单变量线性回归一致。要想利用数值计算工具方便快速地进行回归分析,则需要各个计算步骤向量化。
变量描述
- x(i)j 第i个训练数据中的第j个特征
- x(i) 输入特征的i个训练数据
- m 训练数据的数量
- n 特征的数量
假设函数向量化
hθ(x)=[θ0θ1⋯θn][x0x1⋮xn]=θTx备注: x(i)0=1
多变量的梯度下降
repeat until convergence: {
θj:=θj−α1m∑mi=1(hθ(x(i))−y(i))x(i)jforj:=0…n
}
特征缩放
当不同参数的尺度范围相差很远时,图像会很扁,需要很多次迭代才能收敛。如果将这些特征的特征都缩放到-1到1之间 或者 -0.5到0.5之间,就能较快地迭代
常用方法有特征缩放和均值归一化
xi:=(xi−ui)si其中ui是第i个特征的平均值,si是标准差或者最大值减最小值
学习率
梯度下降算法的每次迭代受到学习率的影响,如果学习率α过小,则达到收敛所需的迭代次数会非常高;如果学习率α过大,每次迭代可能不会减小代价函数,可能会越过局部最小值导致无法收敛。
正规方程
θ=(XT)−1XTy
比较:梯度下降需要选择学习率α,需要多次迭代,当特征数量较多时能较好适用,适用于各种模型。正规方程不需要学习率,一次运算得出,通常n小于10000时还可以接受,只适用于线性模型,不适合逻辑回归等其他模型。
向量化(Vectorization)
θ=θ−αmX′(Xθ−y)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(参数)