关于机器学习的定义
-
(1959)Arthur Samuel对机器学习的定义:在没有明确设置的情况下,使计算机具有学习能力的研究领域。[跳棋程序]
-
(1998)Tom Mitchell对机器学习的定义:计算机程序从经验E中学习,解决某一任务T,进行某一性能度量P 。通过P测定在T上的表现因经验E而提高。
监督学习与无监督学习
目前有很多不同类型的学习算法,最主要的有两大类,监督学习和无监督学习。
监督学习:我们给算法一个数据集,其中包含了正确答案。
-
以房价预测为例,我们给它一个房价数据集,在这个数据集中的每个样本,我们都给出正确的价格,即这个房子的实际卖价。算法的目的就是给出更多的正确答案,例如为你朋友想要卖掉的这所新房子给出估价,它也被称为回归问题。
[回归问题]:我们想要预测连续的数值输出,也就是价格,技术上而言,价格能够被圆整到分,因此价格实际上是一个离散值,但通常我们认为房价是一个实数,标量或是连续值。回归这个术语是指,我们没法预测连续值的属性。
-
以乳腺癌预测为例,假设在你的数据集中,横轴是肿瘤的尺寸,纵轴为1或0,代表是或否,即我们看到的肿瘤样本是否是恶性的,恶性的对应1,良性的对应0。机器学习的问题就是,你能否估计出肿瘤是良性的还是恶性的概率,它也被称为分类问题。
[分类问题]:我们设法预测一个离散值输出。0或1,恶性或良性。实际上在分类问题中,有时你也有两个以上的可能的输出值。在实际例子中就是,可能有三种类型的乳腺癌,因此,你可能要设法预测离散值0,1,2或3。
无监督学习:对于监督学习中的每一个样本,我们已经被告知了什么是所谓的正确答案。比如在肿瘤预测中,数据集中每个样本都被标明为阴性样本或阳性样本,即恶性肿瘤还是阳性肿瘤。而在无监督学习中没有任何标签,都具有相同的标签或者都没有标签。
-
以基因组学中的应用为例,这里是一个DNA微阵列数据的例子。基本的思想是给定一组不同的个体,对于每个个体,检测他们是否拥有某个特定的基因,也就是要检测,特定基因的表达程度。这些颜色,红、绿、灰等等,展示了不同个体拥有特定基因的程度。然后你能做的就是运行一个聚类算法,把不同的个体归入不同的类,或归为不同类型的人。
这就是无监督学习,因为我们没有提前告知这个算法,这些是第一类人,这些是第二类人,这些是第三类人等等。相反我们只是告诉算法这儿有一堆数据,我不知道这些数据是什么,我不知道谁是什么类型,我甚至不知道都有哪些类型,但你能自动找出这些数据的结构吗?虽然事先我并不知道有哪些类型,你能自动按得到的类型把这些个体分成簇吗?因为我们没有把数据集的正确答案给算法,所以这就是无监督学习。
无监督学习或聚类算法在其他领域的应用:
- 用来组织大型的计算机集群,找出哪些机器趋向于协同工作,如果你把这些机器放在一起,你就可以让你的数据中心更高效的工作。
- 社交网络的分析,如果可以得知你email最频繁的联系人,或者知道你的Facebook好友,或者你Google+圈,我们是否可以自动识别同属一个圈子的朋友,判断哪些人互相认识?
- 在市场细分中的应用,许多公司拥有庞大的客户信息数据库,对于一个客户数据集,你是否能自动找出不同的市场分割,并自动将你的客户分到不同的细分市场,从而能自动高效地在不同的细分市场中进行销售。
- 用于天文数据分析
鸡尾酒会问题:鸡尾酒会问题(机器可以同时识别多人对话吗?)算法,(无监督学习的一种算法)分理出多个被叠加到一起,被混合到一起的音频源。
一些标志:
m = Number of training examples
x’s = “input” variable / features
y’s = “output” variable / “target” variable
( x , y ) = one training example
(
x
(
i
)
x^{(i)}
x(i) ,
y
(
i
)
y^{(i)}
y(i) ) =
i
t
h
i^{th}
ith training example
假设函数 代价函数
假设函数是用来进行预测的函数。
代价函数用来衡量模型预测出来的值h( θ \theta θ)与真实值之间差异的函数。
- 以线性函数版本为例
Hypothesis : h θ h_{\theta} hθ(x) = θ 0 \theta_0 θ0+ θ 1 \theta_1 θ1x
问题:如何选择 θ 0 \theta_0 θ0和 θ 1 \theta_1 θ1
选择标准:在线性回归中,我们要解决的是一个最小化问题。(尽量选择参数值使得我们能合理准确地预测y的值。)
Parameters: θ 0 , θ 1 \theta_0,\theta_1 θ0,θ1
Cost Function:
J ( θ 0 , θ 1 ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta_0,\theta_1) = \tfrac{1}{2m} \sum_{i=1} ^ m (h_\theta(x^{(i)}) - y^{(i)})^2 J(θ0,θ1)=2m1i=1∑m(hθ(x(i))−y(i))2
Goal : θ 0 , θ 1 m i n i m i z e J ( θ 0 , θ 1 ) ^{minimize}_{{\theta_0,\theta_1}} J(\theta_0,\theta_1) θ0,θ1minimizeJ(θ0,θ1)
梯度下降法
可以将代价函数J最小化。它不仅被用在线性回归上,还被广泛应用于机器学习的众多领域。
(也可以用梯度下降算法最小化其他函数。)
- Gradient descent algorithm
repeat until convergence {
θ j \theta_j θj := θ j \theta_j θj - α ∂ ∂ θ j J ( θ 0 , θ 1 ) \alpha \tfrac \partial {\partial \theta_j} J(\theta_0,\theta_1) α∂θj∂J(θ0,θ1) (for j = 0 and j = 1)
}
注意
-
:=是赋值运算符。
-
参数 α \alpha α称为学习速率,它控制我们以多大的幅度更新这个参数 θ j \theta_j θj。
-
你需要同时更新 θ 0 和 θ 1 \theta_0和\theta_1 θ0和θ1。
即Correct:Simulataneous update如下
temp0 := θ 0 \theta_0 θ0 - α ∂ ∂ θ 0 J ( θ 0 , θ 1 ) \alpha \tfrac \partial {\partial \theta_0} J(\theta_0,\theta_1) α∂θ0∂J(θ0,θ1)
temp1 := θ 1 \theta_1 θ1 - α ∂ ∂ θ 1 J ( θ 0 , θ 1 ) \alpha \tfrac \partial {\partial \theta_1} J(\theta_0,\theta_1) α∂θ1∂J(θ0,θ1)
θ 0 \theta_0 θ0 := temp0
θ 1 \theta_1 θ1 := temp1 -
如果使用非同步更新的方式,可能也会正确工作,但这并不属于梯度下降法,而是具有不同性质的其他算法。
-
即使学习率 α \alpha α不变,梯度下降法也可以收敛到局部最低点,故实际上没有必要再另外减小 α \alpha α。
在梯度下降法中,在我们接近局部最低点时,梯度下降法会自动采取更小的幅度,这是因为当我们接近局部最低点时,根据定义,在局部最低时,导数等于零,所以当我们接近局部最低点时,导数值会自动变得越来越小,所以梯度下降将自动采取较小的幅度。
梯度下降和代价函数结合得到线性回归
我们要做的就是将梯度下降法应用到最小化平法差代价函数。
线性回归的代价函数总是凸函数,这个函数没有局部最优解,只有一个全局最优。只要你使用的是线性回归,它总是会收敛到全局最优。
Batch梯度下降算法
Batch梯度下降意味着每一步梯度下降,我们都遍历了整个训练集的样本。
如何处理无穷多的特征
如何在计算机中存储无穷多数量的事物,因为你的计算机内存可能会溢出。
- 以支持向量机算法为例。
提到了但没讲的,待补充: - 如何处理无穷多的特征
- 聚类算法
- 正规方程组法求代价函数最小值 (事实上相比于正规方程组法,梯度下降适用于更大的数据集。)