线性回归
LMS梯度下降法(基于最小均方)
时间复杂度:$O(kn^2)$
梯度下降法指的是参数(权重)同时更新,而不是先更新$\theta_0$再更新$\theta_1$
正确:
错误:
批量梯度下降法(Batch Gradient Descent)
再推导:
$\frac{\partial}{\partial \theta_j}J(\theta) = \frac{\partial}{\partial \theta_j}\frac{1}{2}(h_\theta(x)-y)^2$
$=2·\frac{1}{2}(h_\theta(x)-y)·\frac{\partial}{\partial \theta_j}(h_\theta(x)-y)$
$=(h_\theta(x)-y)·\frac{\partial}{\partial \theta_j}(\sum_{i=0}^n\theta_ix_i-y)$
$=(h_\theta(x)-y)x_j$
二元
$repeat\{$
$\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)})x^{(i)}$
$\}$
多元
$repeat\{$
$\theta_j:=\theta_j-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
$\}$
随机梯度下降法(Stochastic Gradient Descent)
效率较低,常用于在线学习
$Loop\{$
$\space \space for\space i=1\space to\space m,\{$
$\space \space \space \space \theta_j := \theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}$
$\space \space \}$
$\}$
计算$J(\theta) = \frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2$不太现实,所以一般判断是否收敛有两种方式:
- 在使用$(x^{(i)},y^{(i)})$训练之前,计算$\frac{1}{2}(h_\theta(x^{(i)})-y^{(i)})^2$,训练之后,再重新计算该值
- 每1000次迭代或者2000次迭代后,计算总的cost值
随机梯度下降法会进入局部最优值,要进入全局最优值,可以缓慢减少学习速率$\alpha$,例如:
小批量梯度下降法(Mini-Batch Gradient Descent)
每次选取b个(少量,比如10个)进行梯度下降法。
特征缩放和均值化
当特征之间的数值范围比较接近时,梯度下降法能够更有效地工作。
特征缩放,将变量值除以(最大值-最小值)。
另外一个,均值化
$s_i$一般是最大值减最小值或者标准差。
选择学习效率
根据迭代次数对代价函数进行画图
最好的是第一个,称之为收敛;
第二个为学习效率较小的状态,原因是多次迭代仍然下降幅度较大;
第三个为学校效率较大的状态,原因是如下图,逐次上升。
多项式回归
例如拟合$h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_1^2+\theta_3x_1^3$
造出$x_2=x_1^2$和$x_3=x_1^3$
但这种情况需要很注意归一化问题。
正规方程Normal Equation
特征维数比较少时使用,不需要归一化,不需要迭代,不需要选择学习效率。
时间复杂度:$O(n^3)$
不适用情况
一般时$X^TX$无法求逆,原因有两个:
- 大量重复多余的特征,例如之间线性相关;
- 过多的特征$m \leq n$。
局部线性回归
用预测点周围的点计算线性回归,给训练集的点赋予权重进行计算。
$J(\theta)=\sum_i w^{(i)}(y^{(i)}-\theta^Tx^{(i)})^2$
$w^{(i)}=exp(-\frac{(x^{(i)}-x)^2}{2\tau^2})$
一个标准取法是上述。
证明最小二乘法
$y^{(i)}=\theta^Tx^{(i)}+\epsilon^{(i)}$
$\epsilon是误差,遵循高斯分布$
$p(\epsilon^{(i)})=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(\epsilon^{(i)})^2}{2\sigma^2})$
$p(y^{(i)}|x^{(i)};\theta)=\frac{1}{\sqrt{2\pi}\sigma}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\sigma^2})$
$likelihood \space function:$
$L(\theta)=L(\theta;X,\vec y)=p(\vec y|X;\theta)$
$log \space likelihood l(\theta):$
最大化l$(\theta)$,即最小化$\frac{1}{2}\sum_{i=1}^m(y^{(i)}-\theta^Tx^{(i)})^2$
Logistic回归
Sigmoid函数/Logistic函数
Logistic回归
Logistic回归,因为$0 \leq h_\theta \leq 1$,使用Logistic函数,所以才叫Logistic回归,但一般用来分类。
假设:
$P(y=1|x;\theta)=h_\theta(x)$
$P(y=0|x;\theta)=1-h_\theta(x)$
$p(y|x;\theta)=(h_\theta(x))^y(1-h_\theta(x))^{1-y}$
求导:
所以:
$\theta_j:=\theta_j-\alpha[-(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}]$
决策边界
分开两类的超平面
cost function
分类之后,需要计算cost function,直接用线性回归的cost function,无法计算,因为不是凸函数。采用新的cost function。
$\space$
$J(\theta)=\frac{1}{m}\sum_{i=1}^mCost(h_\theta(x^{(i)}, y)$
$\space$
$Cost(h_\theta(x^{(i)}, y) = -log(h_\theta(x))\space if\space y=1$
$Cost(h_\theta(x^{(i)}, y) = -log(1-h_\theta(x))\space if\space y=0$
$Cost(h_\theta(x^{(i)}, y) = -ylog(h_\theta(x))-(1-y)log(1-h_\theta(x))$
$\space$
$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\theta)$
$J(\theta)=\frac{1}{m}·(-y^Tlog(h)-(1-y)^Tlog(1-h))$
$更新公式:$
$\theta_j:=\theta_j-\frac{\alpha}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}$
更优的优化算法
- 共轭梯度法
- 牛顿法(二阶)
$\theta:=\theta-\frac{f(\theta)}{f’(\theta)}$
$目的是让l(\theta)最小值,即l’(\theta)=0$
$\theta:=\theta-\frac{l’(\theta)}{l’’(\theta)}$
$向量形式为:$
$\theta:=\theta-H^{-1} \nabla_\theta l(\theta)$
$其中H_{ij}=\frac{\partial^2l(\theta)}{\partial \theta_i \partial \theta_j}$
- 拟牛顿法
多分类
一对多(One-vs-all)
感知器学习算法Perceptron Learning Algorithm
$g(z)=1,if \space z \ge 0$
$g(z)=0, if \space z < 0$
$let \space h_\theta(x) = g(\theta^Tx)$
$\theta_j:=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)}$
过拟合(overfit)
欠拟合(underfit) 高偏差
过拟合(overfit) 高方差
防止过拟合
减少特征个数
减少一些多余的或者贡献较小的特征,可以采用特征选择算法(model selection algorithm)。正则化
给$\theta$前加上系数,限制$\theta$的作用。
正则化
当不确定具体需要限制哪些$\theta$的作用时,采用总体的限制,比如范数
梯度下降法
$更新公式:$
$\{$
$\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}$
$\theta_j:=\theta_j-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j] \space j \in \{1,2…n\}$
$\}$
$上式可写作:$
$\theta_j:=\theta_j(1-\alpha \frac{\lambda}{m})-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)} \space j \in \{1,2…n\}$
可以看作,相比于原本的更新公式,该更新公式每次更新会减小一点$\theta$的值。
Normal Equation
$\theta = (X^TX+ \lambda·L)^{-1}X^Ty$
L为$(n+1)*(n+1)维$。
Logistic回归
$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)}))]+\frac{\lambda}{2m}\sum_{j=1}^n\theta_j^2$
$更新公式:$
$\{$
$\theta_0:=\theta_0-\alpha\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)}$
$\theta_j:=\theta_j-\alpha[\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_j^{(i)}+\frac{\lambda}{m}\theta_j] \space j \in \{1,2…n\}$
$h_\theta(x)=\frac{1}{1+e^{-\theta^Tx}}$
$\}$
神经网络
$s_j表示第j层拥有的神经元数目,所以\Theta^{(j)}的维数s_{j+1}\times(s_j+1)$
$z^{(j)} = \Theta^{(j-1)}a^{(j-1)}$
$a^{(j)} = g(z^{(j)})$
逻辑运算的例子
多分类的例子
cost function
$\begin{gather} J(\Theta) = - \frac{1}{m} \sum_{i=1}^m \sum_{k=1}^K \left[y^{(i)}_k \log ((h_\Theta (x^{(i)}))_k) + (1 - y^{(i)}_k)\log (1 - (h_\Theta(x^{(i)}))_k)\right] + \frac{\lambda}{2m}\sum_{l=1}^{L-1} \sum_{i=1}^{s_l} \sum_{j=1}^{s_{l+1}} ( \Theta_{j,i}^{(l)})^2\end{gather}$
上式为多分类时cost function,$L$为神经网络层数,$K$为分类类数,直接导致最终结果的向量维数,等于最后一层的神经元数。即对每一种类别采用logistic回归时的cost function。
误差反向传播
误差反向传播四个核心公式:
$\delta_i^{(L)} = -(y_i-a_i^{(L)})f’(z_i^{(L)})$
$\delta_i^{(l)}=(\sum_{j=1}^{n_{l+1}}\delta_j^{(l+1)}w_{ji}^{(l+1)})f’(z_i^{(l)})$
$\frac{\partial E}{\partial w_{ij}^{(l)}}=\delta_i^{(l)}a_j^{(l-1)}$
$\frac{\partial E}{\partial b_i^{(l)}}=\delta_i^{(l)}$
具体参考coursera深度学习里的推导,主要用的是求导的链式法则。
梯度检验Gradient Checking
$\dfrac{\partial}{\partial\Theta}J(\Theta) \approx \dfrac{J(\Theta + \epsilon) - J(\Theta - \epsilon)}{2\epsilon}$
$\dfrac{\partial}{\partial\Theta_j}J(\Theta) \approx \dfrac{J(\Theta_1, \dots, \Theta_j + \epsilon, \dots, \Theta_n) - J(\Theta_1, \dots, \Theta_j - \epsilon, \dots, \Theta_n)}{2\epsilon}$
将结果与梯度比较,若正确则将梯度检验关闭,因为梯度检验速度很慢
随机初始化Random Initialization
随机初始化是为了打破对称。1
Theta1 = rand(1,1) * (2 * INIT_EPSILON) - INIT_EPSILON;
训练步骤
- 随机初始化权重
- 向前传播,得到$h_\theta(x^{(i)})$
- 计算cost function $J(\theta)$
- 向后传播,计算偏导数
- 使用梯度检验,之后关闭
- 使用梯度下降等方法最小化成本函数
建议
- $训练:测试:验证=6:2:2$
- $高方差 or 高偏差$
- 正则化的作用
- 学习曲线
收集更多数据量对高方差是有作用的。
总结:
- 收集更多数据量:高方差
- 尝试更少的特征数:高方差
- 收集更多的特征:高偏差
- 增加多项式次数:高偏差
- 减小$\lambda$:高偏差
- 增加$\lambda$:高方差
朴素贝叶斯
特征量
如果每个特征需要N个样本,那么对于10个特征将需要N10个样本,对于包含1000个特征的词汇表将需要N1000个样本。可以看到,所需要的样本数会随着特征数目增大而迅速增长。如果特征之间相互独立,那么样本数就可以从N1000减少到1000×N。
朴素贝叶斯常见模型
高斯模型
假设这些一个特征的所有属于某个类别的观测值符合高斯分布,目前还没看到例子,不理解多项式模型
按照次数作为特征,常用于文本伯努利模型
出现/不出现,对应01向量
k-means聚类
步骤
- 随机初始化k个点
- 将样本归类到最近的点
- 计算同个簇的点的均值点,作为新的簇中心点
- 将23重复,直到样本归类不再发生变化
k的取值
肘部法:最近一次明显下降的点。
PCA降维
步骤
- 特征均值化
- 计算协方差矩阵$\Sigma = \frac{1}{m} \sum_{i=1}^n (x^{(i)})(x^{(i)})^T$
- $[U,S,V]=svd(Sigma);$
- $Z = U(1:K)’*X;$
- 重建:$X=U(1:K)*Z$
K的取值
根据贡献率选取:
贡献率:99%
上式同等于:
作用
- 特征降维,以提高运算速度,减少内存使用;
- 降至2~3维,以可视化数据;
- 不可用于改善过拟合。
异常检测
高斯分布检测系统
- 选取正常样本
- 计算参数$\mu,\sigma^2$
- 来了一个检测样本,计算$p(x)$
$判断p(x) < \varepsilon$
仍然要分出训练集、测试集和交叉验证集
异常检测 vs 监督学习
异常检测
- 只有少量的异常样本
- 许多不同的异常类别
- 未来可能出现新的异常类别
监督学习
- 大量的正常和异常样本
特征选择
将样本特征画图,如果不像正态分布,可用多种函数映射成正态分布。
多元高斯分布检测分布
动机:当出现以下这种异常点,无法检测。
协方差矩阵$\Sigma$
步骤
- 计算$\mu,\Sigma$
- 计算$p(x)$
$判断p(x) < \varepsilon$
当$m >> n$时,才使用多元高斯分布,其他情况使用普通高斯分布。
推荐系统
$n_u = 用户数量$
$n_m = 电影数量$
$r(i,j) = 1 如果用户j给电影i评了分$
$y^{(i,j)} = 用户j给电影i评的分$
基于内容的推荐系统
$对于每个用户j,我们要学习出一个\theta^{(j)};而对于每部电影i,我们要学习出一个x^{(i)},则预测评分为(\theta^{(j)})^T(x^{(i)})$
$m^{(j)} = 用户j评分的电影部数$
$优化目标为:$
$\space$
$梯度下降法:$
$基于内容的推荐系统需要事先对每部电影给出x^{(i)},操作性不够强$
基于协同过滤的推荐系统
$假设每个用户的\theta^{(j)}已给出,则要学习出x^{(i)}$
$优化目标:$
$结合基于内容的推荐系统,我们可以先随机取值\theta,然后学习出x,再学习出\theta……$
$不用那么麻烦的办法,同时训练学习出\theta和x:$
步骤
- $随机初始化x和\theta为小的随机值$
- $使用梯度下降法,最小化J(x^{(1)},…,x^{(n_m)},\theta^{(1)},…,\theta^{(n_u)})$
- $\theta^Tx即为预测评分$
均值化
- 每行求平均值
- 矩阵每个值都减去该行的平均值
- 最后算出来的评分再加上该平均值$(\theta^{(j)})^T(x^{(i)})+\mu_i$
Map-reduce
将样本分开到每个计算机计算,之后再加和。
有将样本加和的步骤都可以采用Map-reduce。