吴恩达《机器学习》笔记

写完这个笔记才觉得,太难了,上传图片。怪不得CSDN上有那么多排版乱七八糟的文章,这个排版,太难了!!

机器学习笔记

 

绪论

1.监督学习:

给算法一个数据集,其中包含了正确结果。算法的目的是为了的出更多正确的结果。

回归问题:预测连续的数值输出。从离散值中找到连续值。更像是推断。

分类问题:设法预测一个离散值的输出。有时可能有多值输出。如其名。

多特征、多属性的机器学习问题。

2.非监督学习

1)聚类算法:

没有标签的数据集的基础上,划分出不同的簇(聚类算法)。

没有提前告知算法。自动找出数据的结构。没有给予数据集的正确结果。

聚类算法应用:服务器集群、社交圈、市场分割、天文数据分析。

2)鸡尾酒算法

分离出被混合在一起的声音。

(Octave推荐、Matlab)

 

单变量线性回归

1.模型

回归问题:预测问题的结果(离散输出)。

学习算法:提供训练集-》输出学习算法-〉h

如何设定h假设函数。

2.代价函数

如何选择模型参数,在单变量线性回归情况下。

通过代价函数来衡量函数的准确度。

1)平方误差代价函数

J_((θ_0,θ_1))=1/2m ∑_(i=1)^m▒〖(h(x_i)-y_i)〗^2 

求出线性关系h_θ (x_i )=θ_0+θ_1 x_i中θ的参数。

结合图像分析假设函数和代价函数之间的关系。引入了等高线图说明图像的三维情况。将0,1作为笛卡尔坐标系坐标。

3.梯度下降法

求最小化函数  J_((θ_0…θ_n))。多个局部最优解。

:= 赋值符号

α 表示学习速率,α 越大下降越快,表示我们更新的速度。

θ_j:=θ_j-α ∂/(∂θ_j ) J_((θ_0,θ_1))

需要实现同步更新。若已在局部最优解,梯度下降法不再进行下一步(原地)。随着梯度下降,下降的尺度会不断减少,知道收敛于最低点。

4.线性回归的梯度下降

 

弓形一定会下降到最优解。

Batch梯度下降法,每一次都遍历整个训练集。\也存在只遍历子集的下降方法。

 

线性代数回顾

矩阵表示、矩阵加减法、矩阵向量乘法、矩阵乘法、乘法特征、矩阵逆运算、转制运算。

安装Matlab

多变量线性回归

1.多功能

在多变量(特征)条件下,确定假设函数,的各前置参数。(有点像求拉格朗日乘数法

2.多元梯度下降法

 

单元与多元梯度下降的对比。

            特征缩放

    确保所有的特征取值都在一定相似的范围内。通过缩放其范围,方便进行梯度下降更快,且更少迭代。

通常将特征缩放到(-1,1),接近就都可以,也不能选择范围太小的。

均值归一化:u为均值,s为符合特征的最大值。

x_i=(x_i-u_i)/s_i 

2)学习率 α

需要测试曲线是否收敛,建议通过图像分析而不是自动测试收敛,因为阈值难以选择。

正常情况或学习率太小收敛图像:

 

学习率太大情况下:

 

一般选择时,0.001、0.003、0.01……1 。

3.特征和多项式回归

如何选择函数与数据集进行拟合?根据数据集图像和多项式的特征。存在算法自动选择函数。

4.正规方程法

对于有些线性回归问题,更方便求得 θ的最小化。

θ=〖(X^T X)〗^(-1) X^T y

    如果使用正规方程,不需要进行特征缩放。

梯度下降的问题:需要选择学习率,找到学习率;需要更多次数的迭代。对于正规方程法,无需上述两个问题。

梯度下降在大数据集情况下非常有效,而正规方程法需要计算矩阵相乘,在这里需要花费大量的计算代价。

正规方程法在矩阵不可逆情况下的替代方案:首先是很少发生,在matlab上是可以直接计算的。

 

Matlab教程

eye(n):生成单位矩阵,n表示阶。

hist(w):形成变量w的直方图。

size(A):矩阵A的行列。size(A,1):A的行

who:显示内存中所有变量。

load():加载文件形成矩阵。

clear:清除所有变量。

A(3,2):第三行第二列。

A(2,:):第二行

A.*B:元素按位相乘。

1./v:求逆

A’:A的转置。

find(A>7):找到满足条件的元素的位置。

flipd():垂直翻转矩阵

plot():绘制图像。

hold on:维持画布。

matlab中,if、while需要end。

 

 

 

Logistic回归

1.分类

不适用线性回归。

logistic回归视为一种分类算法,使得预测值在(0,1)内。

2.假设陈述

logistic函数:假设函数的表示方法。

g(z)=1/(1+e^(-z) )

假设函数:参数向量,乘以特这向量

 

h_θ (x)=g(θ^T x)

3.决策界限:

假设函数在计算什么?输出y=1的概率。

将上式展开,h_θ (x)=g(θ_0+θ_1 x_1+θ_2 x_2 )

参数向量 θ = [θ_0,θ_1,θ_2]

if h_θ (x) >= 0,predict “y=1”.

在图像上,将表示为一块区域,这一区域通过直线(决策边界)来划分。

决策边界是假设函数的一个属性,决定于其参数,而非决定于数据集。

 

通过在特征中增加复杂的多项式,可以得出更加复杂的决策界限。

4.代价函数(优化目标)

    如何拟合logistic回归。

输出预测值hx,而实际为y时的情况。

如果使用线性回归的计算方法,会得到非凸函数,无法适用梯度下降法。

if y=1:

 

如果预测值和实际值不同,即〖 h〗_θ (x) 趋于0情况下,意味着将付出极高的代价,来惩罚这一模型。

if y=0:

 

 

5.简化代价函数与梯度下降

    原函数:

 

第一步简化后:

〖Cost(h〗_θ (x),y)=-ylog(h_θ (x))-(1-y)log⁡(h_θ (x))

因此代价函数就可以变为:(极大似然法)

 

(通过梯度下降法,得出代价函数的最小值。)

 

梯度下降在线性回归中和logistic回归中,具有相同的式子,但是其假设函数 h_θ (x) 所代表的意义不同,因此不同。

特征缩放适用于logistic回归情况。

6.高级优化

 

高级数值计算,包括共轭梯度法、BFGS和L-BFGS等方法。

优点:1.自动计算学习率a;2.比梯度下降法收敛速度更快

缺点:太过于复杂。

为了解决大型的机器学习问题时,采用高级优化。

7.多元分类

(邮件分类、诊断病情、判断天气)

 

    将问题划分为多个二分类问题。各自训练一个标准的逻辑回归分类器。

    

正则化

在目标函数后面添加一个系数的“惩罚项”是正则化的常用方式,为了防止系数过大从而让模型变得复杂。L^1正则化通过让原目标函数加上了所有特征系数绝对值的和来实现正则化,适用于特征选择;而L^2 正则化通过让原目标函数加上了所有特征系数的平方和来实现正则化,适用于防止模型过拟合。

1.过拟合问题

 

因为假设函数太过于符合数据集的分布,(千方百计的拟合数据集,以至于无法解决泛化的问题。)导致失去其预测能力的情况。如上图中图三所示。

解决问题:1.人工选择数据集中的特征(后期特征选择算法) 2.正则化,保留特征变量,但是减少量级、或者theda的大小。

(后期使用工具来解决过拟合或者欠拟合问题

2.代价函数

    如果参数值较小,就意味着一个更简单的参数模型。对参数加入惩罚项,因而简化整个式子。惩罚从θ_1开始,不考虑θ_0。

 

通过正则化项部分,使得函数以更加合理的姿态拟合数据,在图像上表现为,更加的平滑。

后部分⋋表示为正则化参数,决定了参数的惩罚程度。防止出现欠拟合情况。

3.线性回归的正则化

    对于线性回归内的两个算法,进行正则化。

惩罚从θ_1开始,不考虑θ_0。

    1)梯度下降法

 

    2)正规方程法

 

4.logistic回归的正则化

对梯度下降法和高级优化法进行正则化。

梯度下降的正则化流程如线性回归所示,但是假设函数所代表的意义不同。

 

我们通过代价函数的最小值,来找到假设函数当中theda参数的适合值。而梯度下降等算法,是用于找到最小值所采用的方法。

 

神经网络学习

1.非线性假设

    研究神经网络学习的目的?(在有线性回归和逻辑回归的基础上,为什么还要研究)

实际机器学习问题中,往往具有很多特征,采用回归方法,首先计算要求大、同时还容易出现过拟合现象。

2.神经元与大脑

用于解决特征数量n过大的情况。

将大脑的学习过程,看作一个算法概念的过程。比如通过传感器直接刺激大脑,大脑就会学会使用外部的链接设备。(给蛙移植第三只眼,就会学会使用)

3.模型分析

在运用神经网络时,我们如何表示自己的假设模型?

将神经元模拟成逻辑单元。我们通过传入通道,输入一些信息,由神经元计算后输出。(输出为假设函数)

 

有时候加入x0,叫做偏置单元,有时候可以方便模型。

在部分神经网络文献中,认为theda是特征的权重。三层网络。输入层/隐藏层/输出层。下图。

 

神经网络究竟在做什么?

 

第一层得第二层、第二层得第三层。

通过上述方程,计算出三个隐藏单元的激活值。然后利用这些值,计算输出假设函数。

模型说明了,神经网络的向前传播(正向传播)。

下图说明将上述方程,向量化。

 

不是使用传统x_1,x_2,x_3的作为特征,而是利用a_1,a_2,a_3来做为特征计算的logistic回归。自己训练逻辑回归参数a_j ,来作为假设函数的分析。如果从第二层往后看,其实这一神经网络模型实际上是逻辑回归算法。

具有更加复杂的特征计算方法,因此可以形成更加复杂的非线性假设函数。

神经网络架构,就是不同的神经元连接方式。(更多的层、每层不同的单元等)

4.例子

实际一个复杂的机器学习问题,可以理解为,学习一个非线性的判断边界,来区分所有的正负样本。

 

说明了神经元是如何实现逻辑运算的,包括AND函数、OR函数等。主要还是看theda(权重值)的取值。

多个简单的网络和整了一个复杂的神经网络。下图中,说明了实现XNOR函数。

    

 

手写数字识别的例子。

一层又一层计算出更为复杂的特征,最终用于构建逻辑回归分类器。

5.多元分类

本质上是一对多方法的拓展。

建立具有多个输出单元的神经网络结构,不同的输出单元代表是否符合某一特征要求0/1,利用特征向量整合输出结果,分析。

 

 

神经网络参数的反向传播算法

1.代价函数

 

神经网络的代价函数,考虑的是,多个输出单元情况的。

不将偏差值正则化。

2.反向传播算法

用于求的最小化的代价函数,指从输出层返回计算δ的过程。

前向转播过程:计算每个神经单元的激活值

 

δ_j^((l))代表了第l层第j个单元的误差值,α_j^((l)) 代表了第l层第j个单元的激活值。有

δ_j^((l))=α_j^((l))-y_j

3.理解反向传播(?)

 

 

上图表示各层delta的计算方式,以及delta其实表达的是cost函数的偏导数。

4.梯度检测

反向传播算法容易产生错误,但运行情况很好。

利用梯度检测来检测前向传播和反向传播算法的正确性。

双侧差分或单侧查分来计算代价函数的偏导数值。

 

(在实际使用神经网络算法时,要关闭梯度检测,梯度检测将会利用大量的计算。

5.随机初始化

在进行算法计算前,为theta选取一些初始值。

初始化为0:进行梯度下降后,每条线的权重,仍然相等,导致算法无法得出有效的结果,阻止了神经网络去学习新的特征。(对称权重问题)

 

随机(-ε,ε):

 

然后再进行代价函数最小化计算。打破对称性的过程。

6.整体回顾

    进行神经网络算法流程:

            选择一个神经网络架构(几层几单元),随机初始化权重。

    输入层的单元数由特征的维度决定,输出层由分类问题的维度决定。如果选择多隐藏层,每个隐藏层具有相同数量的单元。通常情况下隐藏单元越多越好,但需要注意计算量。

            执行前向传播算法

            利用代码计算出J(θ) 

            利用方向传播算法计算所有的偏导数值。有些算法会放弃for循环计算,但是第一次计算使用for循环较好。

 

            通过梯度检测检测算法的准确度

            使用进一步优化的梯度下降算法,或共轭梯度法等方法,和反向传播相结合计算偏导数的值。

 

在神经网络算法中应用梯度下降法,反向传播算法的目的就是计算出梯度下降的方向。找到最优的参数值,使得神经网络的输出值,与训练集中观测到的数据拟合。

基于反向传播的神经网络算法得出的无人驾驶汽车。

 

应用机器学习的建议

1.决定下一步

    确保在进行解决机器学习问题时,能够选择有效的方法。

(获取更多的训练数据可能是没有用的、尝试更小的数据集来解决过拟合或者获取更多特征解决欠拟合、增加多项式、增加正则化值)

评价算法和诊断法,确定机器学习系统性能。

2.评估假设

如何评估机器学习得到的假设函数。

将数据随机划分为训练集和测试集(7:3)。

训练集上的结果在测试集上应用。

3.模型选择、训练、验证、测试集

 

有问题的选择:首先选择一个模型,然后得到第一个参数1,再选择另一个模型,来训练另一个参数2。不断重复,来选择出合适的多项式形式。

 

考虑到泛化能力的选择:引入训练集/交叉验证集/测试集,6:2:2。首先选择模型计算最小化代价函数,得到参数。利用交叉验证集来来观察在验证集上效果。然后再通过测试集观察最终选择的模型效果。

4.诊断偏差与方差

训练误差可能随数据集的增多而增加,但是会出现过拟合问题。

 

 

 

    根据图片分析过拟合和欠拟合问题。

5.正则化和偏差、方差

正则化参数λ的大小,影响假设函数的拟合程度。λ小,高方差,过拟合现象。λ大,高偏差,欠拟合现象。

 

如何选择λ?

            选取一系列λ值0,0.01,0.02,0.04,0.08……等12组模型

            然后对每一个模型,计算所有的参数theda值。

            用交叉验证集,评价其误差。

            选择误差最小的λ,测试其在测试集上的表现。

6.学习曲线

诊断一个学习算法存在方差问题还是偏差问题。

J(θ)指平均误差平方和。J_train (θ)和J_cv (θ),随着m(training set size)正增加的变化曲线。

高偏差时学习曲线:

 

使用更多训练数据可能无法使得误差变小,没有意义。

高方差时学习曲线:

注意存在一个巨大的间隔。增加训练数据,可能有效改进机器学习算法的效果。

 

7.决定接下来做什么

 

相应方法以及其解决的问题。

小型神经网络的优点是计算规模小但可能发生欠拟合。而大型的神经网络容易出现过拟合现象以及计算量问题。但大型神经网络往往具有更好效果,同时还可以通过正则化来缓解过拟合问题。

 

机器学习系统设计

1.确定执行的优先级

    (邮件分类例子)

如何选择邮件的特征向量。(可以选择100个单词,实际可能用到10k-50k)

2.误差分析

    推荐方法:a)从简单的机器学习问题开始,快速开发,在编程过程中,不要急于进行优化。 b)使用学习曲线优化问题 c)误差分析,从分类错误的数据中,更新特征。

设计自己的算法,返回一个数值评价数据,更易于进行优化。

在交叉验证集上进行误差分析

3.不对称性分类的误差评估

正例和负例的比率非常接近于一个极端情况,例子中正样本的数量与负样本的数量相比非常非常少,我们把这种情况叫做偏斜类。

一个类中的样本数与另一个类的数据相比多很多。因此使用分类误差或者分类精确度来作为评估度量可能会产生问题。

引入准确率和召回率,定义如图,以癌症分类为例子。

 

4.准确率和召回率的权衡

如何设定临界值,使得y=1/y=0。

依据实际问题的需要,对准确率和召回率的注重程度。

 

如何自动选择临界值?

引入F值。

 

 

5.机器学习数据

目的:说明数据训练集大小和特征变量的多少对算法效果有很大关系

 

    在有些条件下,得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来获得一个具有良好性能的学习算法。    

并不是拥有最好算法的人能成功,而是拥有最多数据的人能成功。

 

支持向量机

1.优化目标

在学习复杂非线性方程时候。

画一条直线,它和logistic代价函数的曲线非常相似,两端直线组成。它的效果将和logistic回归非常相似,但是支持向量机将拥有计算上的优势,并且使得之后的优化问题变得简单,更容易解决。

 

 

    和logistic回归不同,SVM并不会输出概率,相对的我们得到的是通过优化这个代价函数,得到一个参数θ,支持向量机所做的是进行了一个直接的预测,预测y = 0/1。下图为其代价函数,以及假设函数形式。

 

2.直观上对大间隔的理解

    最大间距分类器。

    将正样本和负样本以最大间距分隔开。忽略异常点,得到分离平面。

3.大间隔分类器的数学原理(?)

    对优化目标函数来说,支持向量机做的就是最小化参数向量θ的范数的平方,或者说是长度的平方。

 

参数向量θ事实上是与决策边界90度正交的,令θ = 0,那么决策边界必须过原点。

 

支持向量机优化目标函数最终会找到大间距分类器:试图最大化这些p^(i)的范数,也就是训练样本到决策边界的距离。

    

4.核函数(?)

想你想要得到一个决策边界,划分正负样本,一种方法是使用多项式函数;另一种方法是核函数。

高斯核函数:

 

 

σ^2对核函数存在的影响:

 

可以看出σ^2越大,变化越缓慢,σ^2越小,变化越剧烈。衡量的是特征变量的值减小的速度。

 

上图就是我们如何定义标记点和核函数来训练出非常复杂的非线性决策边界的方法。我们通过标记点和相似性函数来定义新的特征变量,从而训练复杂的非线性边界。

如何选择标记l^((i) ):

我们拥有的每一个样本点,直接将训练样本作为标记点。

 

 

通过解决最小化问题,就得到了支持向量机的参数。这就是支持向量机的学习算法。

大多数支持向量机在实现的时候,其实是替换掉θ^T θ,用θ^T乘以某个矩阵M,这依赖于你采用的核函数,再乘以θ。这其实是另一种略有区别的距离度量方法,我们用一种略有变化的度量来取代θ的模的平方,这意味着我们最小化了一种类似的度量。这是参数向量θ的缩放版本并取决于核函数。这个数学细节,使得支持向量机能够更有效率的运行。为什么支持向量机做这种修改,这可以使它应用更大的数量集。这个具体的实现细节,尽管略微改变了优化目标,但它主要是为了计算效率。

核函数不太好应用到线性回归和逻辑回归上,但是可以和支持向量机相得益彰。

5.使用SVM

提出参数C的选择

选择内核参数核相似函数(无核或者高斯核

 

    不是所有你可能提出来的相似函数都是有效的核函数,高斯核函数、线性核函数以及你有时可能会用到的核函数,这些函数都需要满足一个技术条件,它叫做默塞尔定理。需要满足这个条件的原因是因为支持向量机算法或者SVM的实现函数有许多熟练地数值优化技巧。核函数的其他选择。

 

    逻辑回归为什么和支持向量机放到一起?

    因为逻辑回归和不带核函数的支持向量机,它们是非常相似的算法,都会做相似的事情,并给出相似的结果。但是根据实际情况,其中一个可能会比另一个更加有效。但是随着SVM复杂度的增加,当你使用不同的内核函数来学习复杂的非线性函数时,你特征变量的数量是相当大的,那是一个非常常见的体系,也许在这个体系里,带有核函数的支持向量机就会表现的相当突出。

    什么时候使用神经网络?

    考虑问题的实际。

无监督学习

1.无监督学习

将系列没有特征的数据,输入到算法中,找到数据中的结构。

聚类算法:找到数据集中的簇(cluster)。

2.K-Means算法

自动的算法将数据划分为多个簇。K均值算法。

            生成两个点,叫做聚类中心。

            移动聚类中心,与其同色的点的平均距离处。

            更新点的簇划分,同时计算其余点到聚类中心距离。2)

            直到聚类中心不再移动

 

    如果出现了没有点的聚类中心,去除。

    即使数据集中的数据不能直观的划分为多个簇,但是K均值算法仍能使其划分。

3.优化目标

帮助对算法进行调试;帮助算法找到更好的聚类中心

 

找到失真代价函数的最小值。

具体步骤,把变量c和变量u分成两组,首先它会最小化J关于变量c,接着最小化J关于变量u,然后保持迭代。

4.随机初始化

如何使算法避开局部最优,找到聚类中心。

当运行K均值算法时,随机挑选K个训练样本,使得聚类中心就为这几个点。

尝试多次随机初始化,以确保可以避开局部最优。

在聚类数量较少的情况下,多次随机初始化可能带来更明显效果。如果K值很大,那么多次使用K均值算法就不会有太大改善。

5.选取聚类数量

如何选择K的值。

观察可视化图像/观察聚类算法输出结果。

主要还是,手动选择聚类数量。无监督学习的特征,即数据集没有特征,就决定了无法采用自动化的方法解决聚类数量的问题。

肘部法则。畸变函数的值随聚类数量K改变,在拐角选择K值。但实际上肘部法则也不是特别有效,可能无法在图像中,找到正确拐点。如下图。

 

如果聚类算法的结果可以给你一个评价指标,那么通过观察这一指标,来选择聚类数量。比如衣服的尺码需求,如下图。

 

    

降维

第二类无监督学习算法。

1.目标1数据压缩

使数据使用更少的内存和硬盘,同时能加快机器学习算法速度。

就是通过,高维向低维的投影,来进行压缩。

2D->1D:

 

3D->2D:

 

2.目标2可视化

降维可以使得数据变得可视化。

3.主成分分析问题规划(?)

    PCA(Principal Component Analysis)

 

    PCA会找一个低维平面,然后将数据投影到上面,使蓝色线段的平方最短,这些蓝色线段的长度被称为投影误差。即它会试图寻找一个投影平面对数据进行投影,使得最小化这个距离。

PCA和线性回归的差别:

都是拟合一条直线(一个平面),但是PCA是为了最小化点到线的垂直距离,而线性回归在意的是所指示的y值的准确度(不一定垂直)。

 

在使用PCA之前,首先要做的是进行数据预处理,执行均值标准化,对数据进行特征缩放(分母sj是特征j的一些测量值(最大值减去最小值),或者是一个特征j的标准偏差)

 

寻找最小化投影距离的向量:下面三张ppt说明整个降维的数学计算流程。

计算协方差Σ。在Octave中采用svd()将协方差矩阵sigma分解为USV。

 

提取出想要投影的数据方向,k个向量。计算z^i。

 

计算矩阵的正确向量化公式:

 

PCA算法是尝试找到一个线或者一个面把数据投影到这个面或者线上以便于最小化平方投影误差。

4.主成分数量选择

    如何选择PCA的k值。我们希望在平均均方误差与训练集方差的比例尽可能小的情况下选择尽可能小的k值。

 

我们可以先令k=1,然后进行主要成分分析,获得Ureduce和z,然后计算比例是否小于1%。如果不是的话再令k=2,如此类推,直到找到可以使得比例小于1%的最小k 值(原因是各个特征之间通常情况存在某种相关性)。

利用S矩阵,来计算平均均方误差与训练集方差的比例。

 

    在压缩过数据后,我们可以采用如下方法来近似地获得原有的特征:

 

5.压缩重现

回到高维表示,公式如下。

X_approx^((i))=U_reduce Z^((i))

 

 

 

6.应用PCA的建议

使用PCA加速机器学习算法。

PCA所做的是定义一个从x到z的映射,这个映射只能通过在训练集上运行PCA来定义,具体而言,PCA学习的这个映射所做的就是计算一系列参数,进行特征缩放和均值归一化,它还计算Ureduce。在

定义了x到z的映射后,可以将这个映射用在交叉验证集或者测试集上的其他样本上。

 

PCA的应用:

压缩数据;加速学习算法;(都是选择K:同时需要保留99%的方差)

可视化应用;(降维绘图)

相比于,通过减少数据维度来解决过拟合不是一种很好的方法。使用PCA防止过拟合不合理。

总结:应该首先考虑使用最原始的数据x^((i)),只有这么做不能达到目的的情况下,才考虑使用PCA和z^((i)),因此使用PCA之间,与其考虑减少数据维度,不如考虑放弃PCA这一步,在原始数据上直接训练算法往往是更好的。只有当你的算法运行速度很慢,或内存不足,或硬盘空间太大,因此需要PCA。

 

异常检测

异常检测问题可以概括为两类:一是对结构化数据的异常检测,二是对非结构化数据的异常检测。

对结构化数据的异常检测的解决思想主要是通过找出与正常数据集差异较大的离群点,把离群点作为异常点。问题:一是需要定义一个清晰的决策边界,界定正常点与异常点;二是维数灾难及交叉指标计算之间的高频计算性能瓶颈。

1.问题动机

    建立模型p(x),将xtest与p(x)进行比较:

 

2.高斯分布(正态分布)

    两个参数,均值u;方差σ^2

    u控制钟形曲线的中心位置,σ^2控制钟形曲线的宽度

 

   阴影部分的面积均为1。

 

    参数估计问题:对于给定数据集,能找到能够估算出u和σ平方的值:

    

    极大似然估计:

 

 

 

3.算法

    基于高斯分布建立异常检测算法:

    我们处理异常检测的方法是:我们要用数据集建立起概率模型,p(x),我们要试图解决哪些特征量出现的概率比较高,哪些特征量的出现概率比较低,因此x就会是一个向量。x1到xn上的独立假设:

 

    异常算法使用:

    1)选择特征量,它能帮我们指出那些反常的样本

    2)给出训练集,计算u和σ(向量化公式)

3)计算新样本的p(x)

 

例子:

 

    如何估计p(x)的值,即x的概率值,检测算法。

    即用给定的数据集,拟合了参数,对参数进行评估,来得到参数u和σ的值,然后用新的例子,说明其是否为异常。

4.开发和评估一场检测

实验评估的重要性:它的主要思想是当你为某个应用开发一个学习算法时,设计返回一个评价值,来评估你的算法。

5.异常检测VS监督学习

    a)异常检测算法:

    正常例子很少

    很少的正样本,大量的负样本

    明天的异常你预料不到

    b)监督学习:

    大量的正负样本

关键区别是在异常检测中,我们通常只有很少量的正样本,因此对于一个学习算法而言,它是不可能从这些正样本中学习到足够的知识的。就可以使用大量的负样本,让这个算法学到足够多的内容。实例:

 

 

 

6.选择要使用的功能

选择什么特征来实现异常检测算法。

先完整训练出一个算法,然后在一组交叉验证集上运行算法,然后找出那些预测出错的样本,依据错样本来优化特征选择。

 

 

7.多变量高斯分布

多元高斯分布有一些优势也有一些劣势,它可以捕捉到一些之前的算法检测不出来的异常。

 

∑是一个协方差矩阵,它衡量的是方差,或者说特征变量x1和x2的变化量。

    多元高斯分布的优势是能描述两个特征变量之间可能存在正相关或者负相关的情况。

8.使用多变量高斯分布的异常检测

    参数估计问题:

 

如何开发一个异常检测算法?

a)用数据集拟合该模型p(x),

b)当你有一个新样本后,使用公式计算p(x),和设定值比较。

 

多元高斯分布模型和原始模型的关系?

原始模型相比于多元高斯模型,多元高斯模型的轮廓(等高线)总是轴对齐的。所以原始模型只是高斯多元模型的一种特殊情况。

 

 

如何在两个模型之间进行选择?

原始模型需要你手动建立特征值之间的关系,而你一旦建立了这种关系,算法就可以运行的很好。多元高斯模型本身就可以识别出这种特征值之间的关系,原始模型的优势就是它的计算成本比较低,换一种说法就是它能适应巨大规模的n,即适应数量巨大的特征。下图表示比较内容

 

异常检测算法,可以帮助自动的捕捉正样本和负样本各种特征值之间的联系。如果发现某些特征值的组合是异常的,将会标记为异常样本。

推荐系统

1.问题规划

推荐系统是机器学习中的一个重要应用。

预测用户对于没有评分行为的项目的评分。

2.基于内容的推荐算法

每一部电影都可以用一个特征向量来表示。

我们接下来可以把每个用户的评价预测值看作是一个线性回归问题。我们要预测用户j评价电影i的值,也就是向量θ和特征量x^((i))的内积。对每一个用户应用一个不同的线性回归副本,这就是我们预测评价的方法。

 

我们用m^((j))表示评价了电影j的用户数量。

               

通过这个机器学习系统,如果把参数θ(j)最小化,就可以得到参数向量θ(j)的估计值。

对所有用户的θ(j)进行求和,并且最小化这个总体优化目标函数,将得到每个用户的参数向量,就可以用这个来对所有用户进行预测。

 

3.协同过滤

(自行学习所需要使用的特征)

θ(j)向我们指明了它们对不同题材电影的喜欢程度,如果我们能从用户那里得到这些参数的值,我们理论上就能推导出特征的值。

 

    优化问题:

 

这个推荐系统建立在每位用户都对数个电影进行了评价,并且每部电影都被数位用户评价过的情况下。因此仍需解决在冷启动问题,以及数据稀疏度问题。

基本的协同过滤思想:

当你执行算法时,要观察大量的用户,观察这些用户的实际行为,来协同得到更佳的每个人对电影的评分值。用户在帮助算法计算电影的特征值,这个特征又可以用来预测其他用户的评分。

4.协同过滤算法

    传统的计算方法,过于冗杂。

将关于x和θ的两个代价函数结合起来,提出一个综合的优化目标问题:

把目标函数视为特征x和用户参数θ的函数,对它整体最小化,作为一个既关于x也关于θ的函数。同时进行最小化计算。

 

 

    协同过滤算法:

 

5.矢量化:底秩矩阵的分解

预测评分矩阵:

 

利用已经学习到的属性来找到相关的电影。

向量化的实现来计算所有用户对所有电影的评分预测值,也可以实现利用已经学到的特征来找到彼此相似的电影或商品。

6.均值规范化

 

对于没有评分数据的用户,

 

使用均值归一化,赋予默认评分。计算每个电影所得评分的均值,把它们放在一个u的向量内,观察一下这些电影评分,然后减去均分,把电影评分矩阵的每一行都减去那个电影的平均评分。

可以将均值归一化认为是协同过滤的预处理步骤。

大规模机器学习

1.学习大数据集

采用低偏差的学习算法,并用大数据进行训练。即决定效果好坏的往往不是算法的好坏,而是谁的训练数据多。

大数据学习的问题:计算问题

高效的计算方法用来处理大数据:

a)随机梯度下降

b)减少映射

2.随机梯度下降

对于很多机器学习算法,例如线性回归、逻辑回归和神经网络,我们推导算法的方法是提出一个代价函数,或提出一个优化目标,然后使用梯度下降的算法求代价函数的最小值。由于训练集太大,为了减少计算量而采用改进的梯度下降算法:随机梯度下降法。

 

如果每次迭代不需要考虑全部样本。

            随机打乱所有数据

            代入随机打乱的训练样本,对代价函数进行优化,知道全局收敛。

迭代效率增加,同时不需要对所有训练样本进行求和。

    两者相比,收敛方式是不同的。随机梯度下降法就是连续不断地在某个区域内朝着全局最小值徘徊,而不是直接达到全局最小值。但在实际使用时,随机梯度下降就可以达到一个很好的全局最小值。

3.Mini-Batch梯度下降

比随机梯度下降法还要效率。一次只使用b个样本。

 

这一方法中,可以对b个样本进行并行运算。

缺点:需要向量化过程。

4.随机梯度下降收敛

确保算法收敛:要确保代价函数在每一次迭代中都是下降的。

通过绘制每次迭代后的cost()函数的平均值,观察成图。

 

    如果使用一个更小的学习速率,震荡就会变小,最终结果也会变好一点(区别可以忽略)。

    增大训练样本的数量,得到的曲线更平滑。但是速度会变慢。

    样本太少,噪声明显。增大训练样本,曲线会变得优化,如果没有变好,说明你需要调整学习速率或调整特征或者算法的其他东西。

曲线上升,需要用更小的学习速率α。

 

在大多数随即梯度下降应用中,学习速率α是不变的。但如果想要达到局部最小值的收敛结果,可以使学习速率α随时间逐减。

 

 

 

5.在线学习

依照连续产生的数据流,适应用户变化的偏好,从而放弃固定的样本集。

其优点主要体现在适应性上面。

6.减少映射与数据并行

应用云计算思想,引入Map-reduce的任务分解计算的思路。

 

要求学习算法可以表示成一系列的求和形式,或者表示成在训练集上对函数的求和形式。进而实现并行运算。

 

 

照片OCR

1.问题定义和OCR pipeline

    照片OCR技术:

    a)复杂。一个复杂的机器学习系统是如何被组装起来的。

b)机器学习流水线。如何分配资源来对下一步计划做出决定。

c)机器学习中的想法和概念。

像这样一个系统,我们称之为机器学习流水线:需要人为设计。

 

 

2.天花板分析(下一步工作的pipeline)

上限分析。

采用一个数值评估度量,来分析算法的效率。

 

 

 

 

    机器学习例子:假设存在一个质检员,他通过长时间的学习,才掌握了判断一个产品是否合格的能力。我们使用机器学习,让机器代替这样的人的存在,判断一个产品是否合格。其中机器也存在一个学习过程,所以我们研究机器学习使其具有接近人甚至超越人的能力。

 

 

 

 

 

你可能感兴趣的:(学习笔记,机器学习,人工智能)