机器学习笔记(吴恩达版)
All in AI
0x00 机器学习
Arthur Samuel:在没有明确设置的情况下,使计算机具有学习能力的研究领域。
Tom Mitchell:计算机从经验E中学习,解决某一任务T,进行某一性能度量P,通过P测定在T上的表现因经验E而提高。
0x01 监督学习
定义:我们给算法一个数据集,其中包含了正确答案,算法的目的就是给出更多的正确答案。
- 回归问题:设法预测连续值的属性。
- 分类问题:设法预测一个离散值的输出(0或者1,2…)。
0x02 无监督学习
定义:无监督学习是一种机器学习方法,它处理的是未标记的数据,目的是发现隐藏的结构、模式或数据内在的分布特征。
涉及的算法:
- 聚类算法
- 鸡尾酒会算法 $[W,s,v]=svb((repmat(sum(x.^*x,1),size(x,1),1).^*x)^*x’)$
0x03 线性回归
假设函数:
$$
h_\theta(x)=\theta_0+\theta_1x
$$
代价函数:
$$
J(\theta_0,\theta_1)=\frac{1}{2m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})^2
$$
通过计算全部样本得出的$h_\theta(x)$与y的差值的平均值,可以描述出当前$\theta$值与预期的偏移。
0x04 梯度下降算法
$$
\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta_0,\theta_1)
$$
对$J(\theta_0,\theta_1)$求导,得到下面的公式(2在求导时会被消掉):
$$
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})
$$
$$
\theta_1:=\theta_1-\alpha\frac{1}{m}\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)}){\cdot}x^{(i)}
$$
通过不断迭代,找出一组$\theta$值,使得$J(\theta_0,\theta_1)$值为最小。
0x05 矩阵的加减法
矩阵的维度需要一致,矩阵$A_{mn}$和矩阵$B_{xy}$,应该$m=x,n=y$。
0x06 数和矩阵的乘法(标量乘法)
数与矩阵中的每个数据相乘。
0x07 矩阵向量相乘
矩阵和向量相乘,矩阵$A_{mn}$,向量$x_{n*1}$,矩阵的列数需要等于向量的行数,也就是$n=n$,矩阵中第一行的元素分别与向量中的列的元素相乘,最后相加,得出向量y的第一行元素,以此类推,最终得出列向量y。
0x08 矩阵和矩阵的相乘
矩阵和矩阵相乘,矩阵$A_{mn}$,矩阵$B_{no}$,矩阵A的列数需要等于矩阵B的行数,也就是$n=n$,相乘后得出一个矩阵$C_{mo}$
计算的本质是把矩阵B拆分成多个列向量,按照矩阵和向量相乘的方式。最后在一起组合一个新的矩阵。
0x09 矩阵乘法特征
不能应用乘法交换律:$A*B\neq B*A$
可以使用乘法结合率:$A*B*C=(A*B)*C=A*(B*C)$
单位矩阵,对角线是1,其余单位都是0。
0x0A 矩阵的逆运算与转置运算
如果$A_{mm}$矩阵中$m=m$(也叫方阵),则存在它的逆矩阵,它们相乘得到一个单位矩阵。(如果矩阵中都是0则没有逆矩阵。)
$$
A(A^{-1})=A^{-1}A=I
$$
如果$A_{mn}$是一个$m*n$的矩阵,让$B=A^T$,则B是一个$n*m$的矩阵,并且$B_{ij}=A_{ji}$
$$
A=\left[\begin{matrix}1&2&0\\3&5&9\end{matrix}\right]\qquad
B=A^T=\left[\begin{matrix}1&3\\2&5\\0&9\end{matrix}\right]
$$
0x0B 多个特征量的线性回归
多元线性回归方程可以看作两个向量相乘的内积。
$$
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+…+\theta_nx_n
$$
$$
x_0=1\qquad x = \left[\begin{matrix}x_0\\x_1\\x_2 \\ …\\x_n\end{matrix}\right]\qquad\theta=\left[\begin{matrix}\theta_0\\ \theta_1\\ \theta_2\\ …\\ \theta_n\end{matrix}\right]\qquad h_\theta(x) = \theta^Tx
$$
0x0C 多元梯度下降
当特征值数量 $n\geq1$ 时
$$
\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
$$
$$
\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}
$$
$$
\theta_1:=\theta_1-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)}
$$
$$
\theta_2:=\theta_2-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_2^{(i)}
$$
$$
…
$$
0x0D 特征缩放
将特征的取值约束到-1到+1的范围内,每个特征值除以最大值减去最小值的差。
均值归一化:
$$
x_1:=\frac{x_1-\mu_1}{s_1}
$$
$\mu_1$是x1的平均值,$s_1$ 是x1范围内最大值减去最小值。
特征缩放的目的是让梯度下降的速度更快。
0x0E 学习率
梯度下降的中的 $\alpha$ 表示学习率,可选值:0.001,0.003,0.01,0.03,0.1,0.3,1。学习率每次增大是前一次的3倍。
0x0F 多项式回归
$$
h_\theta(x)=\theta_0+\theta_1x+\theta_2x^2+\theta_3x^3
$$
$$
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3
$$
$$
h_\theta(x)=\theta_0+\theta_1(size)+\theta_2(size)^2+\theta_3(size)^3
$$
$$
x_1=(size)
$$
$$
x_2=(size)^2
$$
$$
x_3=(size)^3
$$
0x10 正规方程
$$
\theta=(X^TX)^{-1}X^Ty
$$
在Octave中求解:pinv(X'*X)*X'*y
,在正规方程中不需要特征缩放。
当特征量在10000左右时候考虑用梯度下降,逻辑回归也不适用正规方程求解。
0x11 正规方程不可逆的解决办法
- 存在线性依赖的特征值:删除多余的线性依赖的特征
- 样本少,特征值多:减少特征值或正则化
0x12 Octave基础用法
1 | > %注释 |
0x13 Octave绘制图形
1 | > t = [0:0.01:0.98] |
1 | > plot(t,y1) |
1 | > figure(1);plot(t,y1); |
1 | > subplot(1,2,1) %将图像分为1*2,并使用第一个区域 |
1 | > clf %清除图形 |
1. for循环
1 | > v = zeros(10,1) |
2. while循环
1 | > i = 1; |
3. break
1 | > i = 1; |
4. if-else
1 | > v(1) = 2; |
5. 函数
在Octave下定义函数需要创建一个文件,用你的函数名来命名,用.m
后缀结尾。
1 | function y = squareThisNumber(x) |
想要正确调用这个函数,需要这个函数文件在当前目录下。或者添加搜索路径:
1 | > addpath('filepath') |
Octave函数可以返回多个值
1 | function [y1,y2] = squareAndCubeThisNumber(x) |
Octave中的损失函数实现
1 | function J = costFunctionJ(X,y,theta) |
0x14 分类
使用线性回归对分类问题来说不是一个好的方法,对于分类来说,Y应该是0或1,使用线性回归会出现$h_\theta > 1$ or $h_\theta < 0$的情况。对于分类问题,会采用logistic回归算法,它的特点在于输出范围是$0\leq h_\theta(x)\leq 1$。logistic回归是一种分类算法,名字带回归是因为一些历史原因,请不要对此产生疑惑。
0x15 假设陈述
对于二元分类来说,需要控制$0 \leq h_\theta(x) \leq 1$,对之前的线性回归做调整:
$$
h_\theta(x) = g(\theta^Tx)
$$
实际上g的函数如下:
$$
g(z) = \frac{1}{1+e^{-z}}
$$
g的函数被称为Sigmoid function或Logistic function,这两者的含义一样。
最终的假设的函数形式如下:
$$
h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}}
$$
0x16 决策边界
决策边界是假设函数的一个属性。 使用高阶多项式可以让你得到非常复杂的决策边界。
0x17 logistic回归的代价函数
$$
J(\theta) = \frac{1}{m}\sum_{i=1}^{m}Cost(h_\theta(x),y)
$$
$$
Cost(h_\theta(x),y) =
\begin{cases}
-\log(h_\theta(x)), & \text{if y = 1} \\
-\log(1-h_\theta(x)), & \text{if y = 0}
\end{cases}
$$
0x18 简化的代价函数与梯度下降
当$y=0$或1时候,总是存在如下公式:
$$
Cost(h_\theta(x),y) =-y\log(h_\theta(x))-(1-y)\log(1-h_\theta(x))
$$
可以得到代价函数:
$$
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)}))
$$
梯度下降求$\theta_j$:
$$
\theta_j:=\theta_j-\alpha\frac{\partial}{\partial\theta_j}J(\theta)
$$
对$J(\theta)$求导:
$$
\theta_j:=\theta_j-\alpha\sum_{i=1}^{m}(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}
$$
这个时候可以发现logistic回归的梯度下降函数和线性回归的梯度下降函数一样
0x19 高级优化
高级优化算法能大大提高logistic回归运行的速度。
- Gradient descent 梯度下降法
- Conjugate gradient 共轭梯度法
- BFGS Broyden–Fletcher–Goldfarb–Shanno
- L-BFGS Limited Broyden–Fletcher–Goldfarb–Shanno
特点:
- 不需要手动选择学习率$\alpha$
- 收敛的速度远远快于梯度下降