Coursera - Machine learning 学习笔记(1) - 线性回归和分类器

Posted by Vincent on Sunday, December 6, 2020

课程地址: https://www.coursera.org/learn/machine-learning/home/welcome

作业 Vincent code exercise

第一周 简介和一元线性回归

1.1 机器学习定义(Tom Mitchell)

E : 经验, 指训练样本
T : 目标任务,一类机器学习解决的问题
P : 衡量目标任务T的性能

举例: 关于垃圾邮件的机器学习 T: 将邮件标记为垃圾或者非垃圾 E: 查看当前邮箱中邮件的是否垃圾的标签 P: 标记垃圾邮件的准确率

1.2 机器学习分类

  • 监督学习 (Supervised Learning)
    • 回归问题 regression , 例如: 根据房屋面积和价格的数据样本预测给定面积的房价的问题,price =fx(area) 房价是关于面积的函数.
      • 根据给出的正确值 预测连续的输出值
    • 分类问题 classification, 例如: 根据肿瘤大小预测肿瘤是良性还是恶性
      • 根据输入的值,预测所属分类
  • 非监督学习
    • 没有明确目标的训练方式,例如:对新闻进行分类
      • 举例:降噪函数 [W,s,v] = svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x') (懵逼)
  • 其他
    • 强化学习 Reinforcement Learning 根据反馈进行调整
    • Recommender system

1.3 模型描述

x(i)x^{(i)} 表示第i 个训练样本,的输入参数 y(i)y^{(i)} 表示第i个训练样本的输出参数 mm 训练集样本数量,样本的行数 hh (Hypothesis) 假设函数,预测结果的函数 jj 代价函数,描述假设函数与训练样本输出值的差异

1.4 一元线性回归

预测函数

hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \theta_1x

代价函数

J(θ0,θ1)=12mi=1m(hθ(x(i))y(i))2J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2

目标

minθ0,θ1(j)min_{\theta0,\theta1}(j) 获得最小代价

参数更新

θj=θjαθjJ(θ0,θ1)\theta_j=\theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)

带入函数求导之后:

θj=θjα1mi=1m(hθ(x(i))y(i))x(i)\theta_j=\theta_j - \alpha\frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x^{(i)}

使用临时变量.不要使用被更新的θ\theta值带入更新公式

第二周 多元线性回归

2.1 公式

样本

x=[x0 x1 x2 x3  xn]x=[x_0 \ x_1\ x_2\ x_3\ … \ x_n]

x0=1x_0 = 1

参数

$\theta=\begin{bmatrix} \theta_0 \\
\theta_1 \\
\theta_2 \\ … \\ \theta_n \\ \end{bmatrix} $

$y=\begin{bmatrix} y_0 \\
y_1 \\
y_2 \\ … \\ y_n \\ \end{bmatrix} $

X=[1x1(1)x2(1)x3(1)xn(1)1x1(2)x2(2)x3(2)xn(2)1x1(m)x2(m)x3(m)xn(m)]X=\begin{bmatrix} 1 & x^{(1)}_1 & x^{(1)}_2 & x^{(1)}_3&…x^{(1)}_n \\ 1 & x^{(2)}_1 & x^{(2)}_2 & x^{(2)}_3 &…x^{(2)}_n\\ …\\ 1 & x^{(m)}_1 & x^{(m)}_2 & x^{(m)}_3 &…x^{(m)}_n\\ \end{bmatrix}

预测函数

hθ(x)=θ0x0+θ1x1θnxn=θTxh_\theta(x) = \theta_0x_0 + \theta_1x_1 … \theta_nx_n=\theta^Tx

转换为向量:

hθ(x)=Xθh_\theta(x) = X\theta

代价函数

J(θ)=12mi=1m(hθ(x(i))y(i))2J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2

目标

minθ0,θ1θn(j)min_{\theta0,\theta1 … \theta_n}(j) 获得最小代价

J = 1/(2*m) * sum((X*theta - y).^2);

参数更新

θj=θjαθjJ(θ0,θ1θn)=θjαθjJ(θ)\theta_j=\theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1 … \theta_n) = \theta_j - \alpha\frac{\partial}{\partial\theta_j}J(\theta)

带入函数求导之后:

θj=θjα1mi=1m(hθ(x(i))y(i))xj(i)\theta_j=\theta_j - \alpha\frac{1}{m} \sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)}

转换为向量 θ=θαmXT(Xθy)\theta = \theta - \frac{\alpha}{m} X^T(X\theta - y)

theta = theta - (alpha/m) * (X'*(X*theta -y))

2.2 特征缩放

  • 将特征值限制在近似范围,降低梯度下降的步数.进行特征缩放后轮廓图将会更规则提高梯度下降的效率.
  • 将特征值缩放到 1xi1-1 \le x_i \le 1
  • 均值归一 常用公式 xi=xiavg(x)max(x)min(x)x_i=\frac{x_i-avg(x)}{max(x)-min(x)}
%  均值归一
% x-均值/标准差
function xi= normalization(x)
avg=sum(x)/length(x);
s=max(x) - min(x);
xi=(x - avg)/s;

2.3 学习速率α\alpha

  • 太小会导致收敛过慢
  • 太大J函数不会在每次迭代进行减少.无法收敛
  • 尝试 0.001,0.01,0.1,1,0.03等
  • 绘制成本迭代图形观察收敛情况 ( x=迭代次数,y=j函数的值)
  • 自动收敛测试,成本减少少于 10310^{-3}则可以认为函数收敛收敛
    • 无法收敛尝试调低学习速率α\alpha

2.4 多项式回归

多项式回归更好的拟合数据

  • 根据数据可以选择合适的多项式回归 h(θ)=θ0+θ1x+θ1x2h(\theta)=\theta_0+\theta_1x+\theta_1x^2
  • 根据数据可以选择合适的多项式回归 h(θ)=θ0+θ1x+θ1xh(\theta)=\theta_0+\theta_1x+\theta_1\sqrt{x}

2.5 正规方程

JJ函数的偏导数,并置为0,即曲线斜率为0的点.即可算出对应的θ\theta值. (补微积分:()

  • 优点
    • 一次即可算出最优解
    • 不需要进行特征缩放
    • 不需要选择学习速率
    • 适合线性回归
  • 缺点
    • 如果nn非常大,效率会急剧降低
    • 如果特征类型大于10000建议尝试梯度下降算法
    • 不太适合比较复杂的学习算法
  • 矩阵不可逆的情况,
    • 删除一些有线性相关的特征量.
    • 删除重复特征

设计矩阵XXRm×(n+1)\mathbb{R}^{m\times(n+1)} X=[1x1(1)x2(1)x3(1)1x1(2)x2(2)x3(2)1x1(3)x2(3)x3(3)] X=\begin{bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & x_3^{(1)} \\ 1 & x_1^{(2)}& x_2^{(2)} & x_3^{(2)} \\ 1 & x_1^{(3)}& x_2^{(3)} & x_3^{(3)} \\ \end{bmatrix}

y为 Rm\mathbb{R}^{m}

θ=(TTX)1XTy\theta=(T^TX)^{-1}X^Ty

pinv(X'*X)*X'*y
%X' X的转置 X'=transpose(X)

2.6 Octave 使用

这部分比较简单,部分函数

  • disp打印变量
  • pinv 求逆矩阵,一定会返回
  • inv求逆矩阵,奇异矩阵会报错
  • transpose 转置 ,和 A'效果一样
  • eye(m)生成单元矩阵
  • ones(m,n)生成均为1 的矩阵或者向量
  • zeros(m,n)生成均为0的矩阵或向量
  • rand(m,n)生成随机矩阵
  • A(:,1) 取列向量
  • A(2,:) 取一行
  • plot(x,y) 绘制平面图
  • surf(x,y,z)绘制表面图
  • contour (x,y,z)绘制轮廓图
  • whos查看当前定义变量
  • who查看当前定义的变量名
  • mean求平均值
  • std求标准差

循环语句

for i=1:10,
    v(i)=2^i;
end;

条件判断

>> if v(1) == 1,
>    disp('the value is one');
>  elseif v(1) == 2,
>    disp('the value is two');
>  else
>    disp('the value is not one or two');
>  end;

2.7 数学知识补充

2.7.1 求导数

导数的计算在曲线某个点的斜率

例如 : 求 f(x)=x2f(x)=x^2的导数 f(x)f’(x)

f(x)=f(x+δ)f(x)δf(x)=(x+δ)2x2δf(x)=x2+δ2+2xδx2δf(x)=δ2+2xδδf(x)=2x f’(x)= \frac{f(x+\delta) - f(x)}{\delta} \\ f’(x)= \frac{(x+\delta)^2 - x^2}{\delta} \\ f’(x)= \frac{x^2+\delta^2 + 2x\delta- x^2}{\delta} \\ f’(x)= \frac{\delta^2 + 2x\delta}{\delta} \\ f’(x)= 2x \\

2.7.2 导数法则

函数 导数 - 法则 函数 导数
cc(常数) 00 乘以常数 cfcf cfcf'
xx (直线) 11 幂次方法则 xnx^n nxn1nx^{n-1}
axax aa 加法法则 f+gf+g f+gf’+g'
x2x^2(平方) 2x2x 减法法则 fgf-g fgf’-g'
x\sqrt{x}(平方根) 12x12\frac{1}{2}x^{\frac{-1}{2}} 积法则 fgfg fg+fgfg’+f’g
xn\sqrt[n]{x} 1nx1nn\frac{1}{n}x^{-\frac{1-n}{n}} 积法则 fgfg fg+fgfg’+f’g
exe^x(指数) exe^x 商法则 fg\frac{f}{g} fggfg2\frac{f’g-g’f}{g^2}
axa^x ln(a)ax\ln(a)a^x 倒数法则 1f\frac{1}{f} ff2\frac{-f’}{f^2}
ln(x)\ln(x)(对数) 1x\frac{1}{x}
loga(x)\log_a(x) 1xln(a)\frac{1}{x\ln(a)} 链式法则(为 “复合函数”) fgf^{\circ}g (fg)g(f’^{\circ}g)g'
sin(x)(三角)\sin(x)(三角) cos(x)\cos(x) 链式法则 f(g(x))f(g(x)) f(g(x))g(x) f’(g(x))g’(x)
cos(x)\cos(x) sin(x)−\sin(x) 链式法则 dydx=dydududx\frac{dy}{dx}=\frac{dy}{du}\frac{du}{dx}
tan(x)\tan(x) sec2(x)sec{2(x)}
sin1(x)\sin^{-1}(x) 11x2\frac{1}{\sqrt{1-x^2}}
cos1(x)\cos^{-1}(x) 11x2\frac{-1}{\sqrt{1-x^2}}
tan1(x)\tan^{-1}(x) 11+x2\frac{1}{\sqrt{1+x^2}}

参考 导数表

2.7.3 矩阵乘法

A=[a1,1a1,2a1,3a2,1a2,2a2,3] A=\begin{bmatrix} a_{1,1} & a_{1,2} & a_{1,3}\\ a_{2,1} & a_{2,2} & a_{2,3}\\ \end{bmatrix}

B=[b1,1b1,2b2,1b2,2b3,1b3,2] B=\begin{bmatrix} b_{1,1} & b_{1,2} \\ b_{2,1} & b_{2,2} \\ b_{3,1} & b_{3,2} \\ \end{bmatrix}

C=AB=[a1,1b1,1+a1,2b2,1+a1,3b3,1a1,1b1,2+a1,2b2,2+a1,3b3,2a2,1b1,1+a2,2b2,1+a2,3b3,1a2,1b1,2+a2,2b2,2+a2,3b3,2] C = AB = \begin{bmatrix} a_{1,1}b_{1,1}+a_{1,2}b_{2,1} + a_{1,3}b_{3,1} & a_{1,1}b_{1,2}+a_{1,2}b_{2,2} + a_{1,3}b_{3,2} \\ a_{2,1}b_{1,1}+a_{2,2}b_{2,1} + a_{2,3}b_{3,1} & a_{2,1}b_{1,2}+a_{2,2}b_{2,2} + a_{2,3}b_{3,2} \\ \end{bmatrix}

  • 当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
  • 矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
  • 乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。

用A的行去乘B的列.

#第三周 逻辑回归

3.1 二元分类

  • h函数h(θ)=θTx h(\theta)=\theta^Tx
  • 逻辑函数gg(sigmoid function) ; g(z)=11+ezg(z) = \frac{1}{1+e^{-z}}
  • gg应用到预测函数 h(θ)=11+eθTxh(\theta) = \frac{1}{1+e^{-\theta^Tx}}
  • 决策边界
    • θTx>0=>y=1\theta^Tx > 0 => y=1
    • 非线性决策边界 h(θ)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22h(\theta)=g(\theta_0 + \theta_1x_1 + \theta_2x_2+\theta_3x_1^2+\theta_4x_2^2) 当θ=[1 0 0 1 1]\theta=[-1 \ 0 \ 0 \ 1\ 1]则是个圆.
    • 根据数据集选择合适的假设函数
    • 通过多项式获取更复杂的决策边界
  • 代价函数,将y=1和y=0两种情况合并为一个方程Cost(h(θ(x),y))=ylog(hθ(x))(1y)log(1hθ(x))Cost(h(\theta(x),y)) = -y\log( {h_{\theta}(x)} ) - (1-y)\log(1-h_{\theta}(x))

3.2 预测函数

h(θ)=g(θTx) h(\theta)=g(\theta^Tx) z=θTxz=\theta^Tx g(z)=11+ezg(z) = \frac{1}{1+e^{-z}} h(θ)=11+eθTxh(\theta) = \frac{1}{1+e^{-\theta^Tx}}

3.3 代价函数

j(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]j(\theta)=-\frac{1}{m} \sum_{i=1}^m[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))]

转换为向量 h=g(Xθ)h=g(X\theta) j(θ)=1m(yTlog(h)(1y)Tlog(1h))j(\theta) =\frac{1}{m} (-y^T\log(h) - (1-y)^T\log(1-h))

3.4 梯度下降公式

θj:=θjαmi=1m[(hθ(x(i))y(i))xj(i)] \theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m[(h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j]

转换为向量: θ:=θαmXT(g(Xθ)y)\theta := \theta - \frac{\alpha}{m}X^T(g(X\theta)-\vec y)

3.5 多元分类

  • 创建多个分类器并进行拟合

3.6 过度拟合

  • underfit (high bais) 高偏差
  • overfit 过度拟合
    • 出现的问题
      • J代价函数趋近于0
      • 无法正确对新的数据进行好的预测
    • 解决
      • 减少特征数量
        • 手动删除
        • 使用算法选择
      • 正规化
        • 减小θ\theta
        • 当有很多稍微有点用的特性时效果很好

3.7 正规化

用来解决过度拟合(overfitting)问题.引入λ\lambda来降低θ\theta的影响.

特别注意: 在代价函数和梯度下降函数中,正规化都需要排除θ0\theta_0

3.7.1 正规化线性回归

  • 代价函数 正规化的jj 函数后面加入,正规化参数 λj=1nθj2\lambda \sum_{j=1}^n\theta_j^2

    J(θ)=12mi=1m(hθ(x(i))y(i))2+λj=1nθj2J(\theta)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2 + \lambda \sum_{j=1}^n\theta_j^2

  • 梯度下降函数

    正规化不处理θ0\theta_0

    θ0=θ0α[1mi=1m(hθ(x(i))y(i))x0(i) \theta_0= \theta_0 - \alpha [\frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_0^{(i)}

    当前j>0j \gt 0

    θj=θjα[1mi=1m(hθ(x(i))y(i))xj(i)+λmθj] \theta_j= \theta_j - \alpha [\frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)} +\frac{ \lambda}{m}\theta_j] 进行 θj=θj(1αλm)α1mi=1m(hθ(x(i))y(i))xj(i)) \theta_j= \theta_j(1-\alpha\frac{\lambda}{m} )- \alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)})

  • 正规方程解法

Ln+1×n+1=[0 1 1 1]θ=(XTX+λL)1XTy \begin{aligned} L_{n+1\times n+1}=\begin{bmatrix} 0 \\ \ & 1 \\ \ & & 1 \\ …\\ \ & & & & 1 \\ \end{bmatrix} \\ \theta =(X^TX + \lambda\cdot L)^{-1}X^Ty \end{aligned}

如果m<nm<n XTXX^TX 不可逆.但是加上λL \lambda\cdot L 则是可逆的.大佬已经证明了.

3.7.2 正规化逻辑回归

- 代价函数

j(θ)=1mi=1m[y(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]+λ2mi=1nθj2j(\theta)=-\frac{1}{m} \sum_{i=1}^m[y^{(i)}\log(h_\theta(x^{(i)}))+(1-y^{(i)})\log(1-h_\theta(x^{(i)}))] + \frac{\lambda}{2m} \sum_{i=1}^n\theta_j^2

向量化:

z=g(Xθ) z =g(X\theta)

J(θ)=1m(yTlog(z)(1y)Tlog(1z)+λ2m(θTθ)J(\theta) = \frac{1}{m}( -y^T \log(z) - (1-y)^T \log(1-z) + \frac{\lambda}{2m}(\theta^T \theta)

第二个公式θ0=0\theta_0=0

- 梯度下降函数

θ=θj(1αλm)α1mi=1m(hθ(x(i))y(i))xj(i))\theta= \theta_j(1-\alpha\frac{\lambda}{m} )- \alpha \frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)})

向量化:

θ=1mXT(zy)+λmθ \theta=\frac{1}{m} X^T(z-y) + \frac{\lambda}{m} \cdot \theta

第二个公式θ0θ_0=0,用于移除θ0\theta_0的影响

3.7.3 使用内建优化函数fminunc

创建用于优化的函数返回,代价值和θ\theta的微分值,function [J, grad] = costFunction(theta, X, y). 内部会选择算法 算出最优化的θ\theta

θ=1mi=1m(hθ(x(i))y(i))xj(i) \theta =\frac{1}{m}\sum_{i=1}^m(h_{\theta}(x^{(i)}) - y^{(i)}) \cdot x_j^{(i)}


%代价函数
J=(1/m) * ( -y' * log(z) - (1-y)' * log(1-z) ) + (lambda/(2*m)) * (theta_0' * theta_0);

%梯度函数
grad = 1/m * X'*(z - y) +  (lambda / m) .* theta_0;

%  Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);
% Run fminunc to obtain the optimal theta
% This function will return theta and the cost [theta, cost] = ...
fminunc(@(t)(costFunction(t, X, y)), initial theta, options);

3.7.4 选择合适的λ\lambda

  • 如果λ\lambda设置过大无法拟合数据,因为对于θ\theta的调整对整体的影响力有限.
  • 如果λ\lambda设置过小则会过拟合,没有起作用
  • 可以通过对训练集进行预测查看准确率来选择合适的值

「真诚赞赏,手留余香」

我的乐与怒

真诚赞赏,手留余香

使用微信扫描二维码完成支付