Tag Archives: 机器学习

在之前的学习中我们知道,如果在算法的训练样本量m不足的时候得到的模型具有高方差(High Variance),那么此时我们需要更多的训练样本。但是如果算法具有高偏差,提高样本数量并不会显著改善模型的性能。

在今天,数据集很容易就可以达到m=100,000,000这样的数量级(比如人口调查、通讯消息等)。在这样的背景下,梯度下降算法每一步都需要汇总上亿个训练样本来完成一次迭代。那么我们能不能通过一些方法来分流如此大量的计算呢?

一、异常检测(Anomaly Detection)
1.导论(Problem Motivation)
和其他学习问题一样,已知一个数据集​​\( x^{(1)}, x^{(2)},\dots,x^{(m)} \)。

接下来我们又得到一个新的样本​\( x_{test} \)​,现在,我们想要知道这个样本是不是异常/坏点。

我们定义了一个“模型”(“model”) p(x)来告诉我们该样本是否异常。我们也使用了一个阈值ϵ作为评判样本是否异常的分界线。

一个常见的异常检测使用案例是诈骗检测:

​\( x^{(i)}= \)​用户活动的特征量
从数据而得的模型p(x)
通过p(x)<ϵ这一条件找出异常的用户 如果最后我们的异常检测算法标记出的异常样本太多了,那我们需要减小阈值ϵ,以此降低被划为异常样本的样本数。

算法概述
K-Means算法是时下最流行且应用广泛的自动聚类算法。它的实现流程基本如下:

随机设置两个初始点,称作聚类中心(cluster centroids)。
聚类分配:将每一个样本归入到离它最近的聚类中心所属的分类中。
移动中心:对于每一个聚类中心,计算它集合中所有的样本点的平均值,然后将该聚类中心移动到平均值的位置。
重复(2)和(3)直到实现聚类。

我们来回顾一下逻辑回归的代价函数:

\[ \begin{align*}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{1}{m}\sum_{i=1}^m -y^{(i)} \log\Big(\dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big) – (1 – y^{(i)})\log\Big(1 – \dfrac{1}{1 + e^{-\theta^Tx^{(i)}}}\Big)\end{align*} \]

​为了引入向量支持机,首先,我们将代价函数的第一项转化为​\( -\log(h_{\theta}(x)) = -\log\Big(\dfrac{1}{1 + e^{-\theta^Tx}}\Big) \)​,第二项转化为​\( -\log(1 – h_{\theta(x)}) = -\log\Big(1 – \dfrac{1}{1 + e^{-\theta^Tx}}\Big) \)​。这样,我们就得到了SVM的代价函数。

为了分析代价函数的趋势,得出其优化解,我们把这两项关于z即\( θ^Tx \)​的函数图像画出来,得到两条光滑的sigmoid函数曲线。进一步地,使用两段直线来尝试替代曲线,这被称作hinge loss 函数

目前为止,我们已经掌握了很多用于预测的算法,并且我们可以通过如下几种方式改善误差度:

使用更多的训练集
减少设置的特征量
增加特征量
增加高次项
增加或减少λ
Andrew Ng建议,不要随机的选取上面的解决方案,而是通过接下来要说的方式来评估当前模型,选择合适的方法。

一、代价函数(Cost Function)
学习算法依然是从学习代价函数开始,在此之前,先回顾几个定义:

L = 神经网络的总层数
​\( s_l \)​ = 第L层的单元数量(不含偏置单元)
K = 输出单元/类型的数量
​\( h_\Theta(x)_k \)​ = 假设函数中的第k个输出
在这章里,神经网络的代价函数是逻辑回归代价函数的推广,我们先回顾逻辑回归的代价函数:

\[ J(\theta) = – \frac{1}{m} \sum_{i=1}^m \large[ y^{(i)}\ \log (h_\theta (x^{(i)})) + (1 – y^{(i)})\ \log (1 – h_\theta(x^{(i)}))\large] + \frac{\lambda}{2m}\sum_{j=1}^n \theta_j^2 \space\space\space\space\space\space(1.1)\]

接着推广到神经网络,先回顾一下它的模型:

 \[ \begin{align*}\begin{bmatrix}x_0 \newline x_1 \newline x_2 \newline\cdots \newline x_n\end{bmatrix} \rightarrow\begin{bmatrix}a_0^{(2)} \newline a_1^{(2)} \newline a_2^{(2)} \newline\cdots\end{bmatrix} \rightarrow\begin{bmatrix}a_0^{(3)} \newline a_1^{(3)} \newline a_2^{(3)} \newline\cdots\end{bmatrix} \rightarrow \cdots \rightarrow\begin{bmatrix}h_\Theta(x)_1 \newline h_\Theta(x)_2 \newline h_\Theta(x)_3 \newline h_\Theta(x)_4 \newline\end{bmatrix} \rightarrow\end{align*} \] 

神经元和大脑(Neurons and the Brain)

我们知道,目前大脑拥有最厉害的“机器学习”算法,那我们能否模仿它来实现更好的机器学习算法呢?神经网络可以在一定程度上模仿大脑的运作机制。这一领域早就已经有了很多概念,不过因为运算量大而难以进一步发展;近年来,随着计算机速率的提升,神经网络也得到了发展的动力,再次成为热点。

我们对于不同的数据处理需求可能会提出各种不同的算法,那么,有没有可能所有需求都由一个算法来实现,就像物理一样,人类追求一个大一统的“统一场论”呢?

科学家尝试做过这么一个实验:将大脑中听觉皮层与耳朵之间的神经连接切断,并且将听觉皮层与眼睛相连,结果发现听觉皮层可以“看到”东西。

目前我们已经掌握了一些基础的回归和分类算法,本章需要讨论一下拟合模型的适用性问题,以及对应的优化措施。

一、过拟合问题(Overfitting)
我们知道,机器学习训练的目的是为了让模型更好的拟合实际情况,从而指导我们进行预测。评价一个模型拟合度是否优良的参考之一是它与实际数据集的偏差程度,我们用代价函数来定量,一般代价函数越小越好。那么,是否会有一些意外情况出现呢?

我们来看下面这个问题,对于图中的数据集,分别使用了不同次数的多项式进行拟合:线性回归模型下,模型预测与数据集有一些差距,但是大方向是不错的;二次多项式模型下,模型与数据集的偏差更小了,模型曲线光滑平整;四次多项式模型下,模型与数据集完全对应上,没有偏差,但是曲线歪曲,在大方向上似乎并不是特别准。

这三种模型,让你实际使用的话,凭直觉来看,你更偏向于使用哪一个呢?相信你会更相信二次多项式的模型吧。

一、0-1分类(Binary Classification)
这章我们讨论分类问题,先从简单的0-1分类说起。

与回归问题不同的是,分类问题中,输出y不是连续的值,只能是0或者1。并且,0一般用来代表“消极的类型”,1代表“积极的类型”,当然也可以任意指定。

一种分类方法是,使用线性回归来划分,将h函数的输出按小数点后一位四舍五入,那么当h>0.5时,即认为y=1;这种算法并不是特别好,因为分类问题毕竟不是线性的(如下图中,最右的那个数据)。

一、多元线性回归(Multivariate Linear Regression)的数值计算法 1.多元假设方程( The multivariable form of the hypothesis function) 若我们的假设方程h有多个特征量,如:​ \( x_1 \) ​表示房屋的面积,​ \( x_2 \) ​表示房间数, \( x_3 \) 表示层数,​ \( x_4 \) ​表示房屋的年龄,那么新的假设方程为: \[ h_\theta=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4 \] 也就是说,我们可以推广单变量假设得到多变量假设方程:\[ h_\theta=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+…+\theta_nx_n \space\space\space\space\space\space(1.1)\]

Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert