Linear Regression Multiple Variables

多变量线性回归

多变量线性回归的思想与单变量线性回归一致。要想利用数值计算工具方便快速地进行回归分析,则需要各个计算步骤向量化。

变量描述

  • $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(参数)