学习视频:[中英字幕]吴恩达机器学习系列课程
学习资料: https://github.com/fengdu78/Coursera-ML-AndrewNg-Notes
GitHub不好用的话,我在CSDN资源区也上传了开源资料,0积分下载,期待和大家一起进步!
我们将要让计算机学习无标签数据,而不是此前的标签数据。
K-均值是一个迭代算法,假设我们想要将数据聚类成 n 个组,其方法为:
首先选择个随机的点,称为聚类中心(cluster centroids);对于数据集中的每一个数据,按照距离个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
K-均值最小化问题,是要最小化所有的数据点与其所关联的聚类中心点之间的距离之和。
因此 K-均值的代价函数(又称畸变函数 Distortion function) 为:
在运行 K-均值算法的之前,首先要随机初始化所有的聚类中心点:
你会发现这种模式,它的畸变值会迅速下降,从 1 到 2,从 2 到 3 之后,你会在 3 的时候达到一个肘点。在此之后,畸变值就下降的非常慢,看起来就像使用 3 个聚类来进行聚类是正确的,这是因为那个点是曲线的肘点,畸变值下降得很快, = 3之后就下降得很慢,那么我们就选 = 3。
当你应用**“肘部法则”** 的时候,如果你得到了一个像上面这样的图,那么这将是一种用来选择聚类个数的合理方法。
谈论第二种类型的无监督学习问题,称为降维。数据压缩不仅允许我们压缩数据,因而使用较少的计算机内存或磁盘空间,但它也让我们加快我们的学习算法。
在许多及其学习问题中,如果我们能将数据可视化,我们便能寻找到一个更好的解决方案,降维可以帮助我们。
问题是要将维数据降至维,目标是找到向量(1),(2),…,()使得总的投射误差最小。
主成分分析 | 线性回归 |
---|---|
最小化投射误差 | 最小化预测误差 |
目的:降维 | 目的:预测 |
PCA 技术的一大好处是对数据进行降维的处理。我们可以对新求出的“主元”向量的重要性进行排序,根据需要取前面最重要的部分,将后面的维数省去,可以达到降维从而简化模型或是对数据进行压缩的效果。同时最大程度的保持了原有数据的信息。
之前记录过:MATLAB学习笔记_Day13主成分分析在论文中写作
主要成分分析是减少投射的平均均方误差:
我们也可以先令 = 1,然后进行主要成分分析,获得和,然后计算比例是否小于1%。如果不是的话再令 = 2,如此类推,直到找到可以使得比例小于 1%的最小 值(原因是各个特征之间通常情况存在某种相关性)。
在以前的视频中,我谈论 PCA 作为压缩算法。在那里你可能需要把 1000 维的数据压缩100 维特征,或具有三维数据压缩到一二维表示。所以,如果这是一个压缩算法,应该能回到这个压缩表示,回到你原有的高维数据的一种近似。
假使我们正在针对一张 100×100 像素的图片进行某个计算机视觉的机器学习,即总共有 10000 个特征。
如果我们有交叉验证集和测试集,也采用对训练集学习而来的。
错误的主要成分分析情况:
①将PCA应用于防止过拟合中,应该用正则化处理过拟合问题。
原因在于主要成分分析只是近似地丢弃掉一些特征,它并不考虑任何与结果变量有关的信息,因此可能会丢失非常重要的特征。然而当我们进行正则化处理时,会考虑到结果变量,不会丢掉重要的数据。
②将主要成分分析作为学习过程中的一部分。
虽然很多时候有效果,最好还是从所有原始特征开始,只在有必要的时候(算法运行太慢或者占用太多内存)才考虑采用主要成分分析
小结:根据已有的数据建立起估计函数,这样我们可以依据概率能判断新的数据是正常的,还是异常的。
对于异常检测算法,我们使用的特征是至关重要的,下面谈谈如何选择特征:
异常检测假设特征符合高斯分布,如果数据的分布不是高斯分布,异常检测算法也能够工作,但是最好还是将数据转换成高斯分布。
假使我们有两个相关的特征,而且这两个特征的值域范围比较宽,这种情况下,一般的高斯分布模型可能不能很好地识别异常数据。其原因在于,一般的高斯分布模型尝试的是去同时抓住两个特征的偏差,因此创造出一个比较大的判定边界。
小结:多元高斯分布将方差转化成了协方差矩阵,进而控制高斯函数的性状和算法的计算。
代表用户的数量
代表电影的数量
(,) 如果用户 给电影 评过分则 (,) = 1
(,) 代表用户 给电影 的评分
代表用户 评过分的电影的总数
我们希望构建一个算法来预测每个人可能会给他们没看过的电影打多少分,并以此作为推荐的依据。
在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这些数据是有关这些东西的特征。
上面的代价函数只是针对一个用户的,为了学习所有用户,我们将所有用户的代价函数求和
在之前的基于内容的推荐系统中,对于每一部电影,在已知可用的特征,使用这些特征训练出了每一个用户的参数。相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征。
但是如果我们既没有用户的参数,也没有电影的特征,这两种方法都不可行了。协同过滤算法可以同时学习这两者。
如果一位用户正在观看电影 (),我们可以寻找另一部电影(),依据两部电影的特征向量之间的距离∥() − ()∥的大小。
电影 有一个特征向量(),找到一部不同的电影 ,保证两部电影的特征向量之间的距离()和()很小。
总结:当用户在看某部电影 的时候,为了能给用户推荐新电影,你需要做的是找出电影 ,使两者间距离最小。这样就能给用户推荐不同的电影了。
首先应该做的事是去检查一个这么大规模的训练集是否真的必要,也许我们只用 1000个训练集也能获得较好的效果,我们可以绘制学习曲线来帮助判断
左图为高方差,显然增加数据量是可以减小误差的。
右图为高偏差,显然增加数据量无法减小误差。
对于许多机器学习算法,例如:线性回归,逻辑回归,聚类,降维,神经网络…我们推导算法的方法是提出一个优化目标或优化方程,然后用梯度下降的算法来求得最小值。
回顾一下线性回归中的梯度下降 (批量梯度下降法)。
如果数据量很大,为例收敛结果,你需要花费很长的时间,因此我们对梯度下降算法进行改进。
首先,要对数据进行重组。
随机梯度下降讲的是,针对每一个数据,算法都会更新一次参数 ,而不需要首先将所有的训练集求和。
每一次求得的参数都为了能更好的拟合下一次的预测,总的来看,我们的参数是朝着全局最小的方向前进的。
总结:随机梯度下降是朝着一个最小值的区域内迂回前进的。
外层的Repeat决定了循环的次数,一般来说一次就够了,不过仍要取决于你的数据集的数据量有多少。如果很大的话,可能一次大循环就能找到最合适的参数值。
当你在运行代码的过程中,你如何知道调试已经完成,参数已经收敛到最优值。并且,如何调整算法中的学习速率呢?
批量梯度下降法:画出代价函数的图像来判断是否达到了最优值。但是,如果数据集的数据量太大,sum那一项将会导致计算速度非常慢。
随机梯度下降法 :在随机梯度下降中,我们在每一次更新 之前都计算一次代价,然后每次迭代后,求出这次对训练实例计算代价的平均值,然后绘制这些平均值与次迭代的次数之间的函数图表。
对于左上图,当我们适当降低学习率,图线可能有蓝色变为红色。表现为收敛速度变慢了,但收敛后的值更好了。
另一种方法:
随着迭代的次数不断增加,学习速率也越来越低,迫使算法收敛而非在最小值附近徘徊。
但是你要花时间去确定这两个常数。
总结:要每次对最后 1000(x) 个,求一下平均值。检查我们设置的学习率是否符合要求。还可以设置一种随迭代次数变化而变化的学习率,但你要自己确定常熟1,2。
我们每次给用户反馈10个手机,看看用户会点开哪个手机的界面。在这之后,我们会得到10个(x,y)数据对。x代表手机,y代用户是否选择了该手机。 然后运用在线学习算法,来更新参数,对这10个数据运用10步梯度下降算法,来更新参数。然后就可以扔到这些数据。
一旦对一个数据的学习完成了,我们便可以丢弃该数据。这种方式的好处在于,我们的算法可以很好的适应用户的倾向性,算法可以针对用户的当前行为不断地更新模型以适应该用户。
具体而言,如果任何学习算法能够表达为,对训练集的函数的求和,那么便能将这个任务分配给多台计算机(或者同一台计算机的不同 CPU 核心),以达到加速处理的目的。
很多高级的线性代数函数库已经能够利用多核 CPU 的多个核心来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。
OCR(Optical Character Recognition)光学字符识别
从数据集中收集一些正负样本,来训练分类器。
在训练集训练出来的窗口尺寸是82*36。运用在测试图片上,图中绿色的窗口从左上方开始,依次向右遍历完第一行。再向第二行遍历,从此实现该图片所有像素点的识别。每一次将框住的图像送入分类器,检测是否为行人。
白框代表可能有文字,根据框的性状,初步判断白色区域是不是文本信息。
Character classification
最后一个阶段是字符分类阶段,利用神经网络、支持向量机或者逻辑回归算法训练一个分类器即可。
获取数据的方式:
① 从0开始自己制作数据
② 基于已有的小的数据集,然后已某种方式扩充训练集。
首先需要确定的是:
如果我们的模型是低方差的,那么获得更多的数据用于训练模型,是能够有更好的效果的。
在机器学习的应用中,通常需要通过几个步骤才能进行最终的预测,如何能够知道哪一部分最值得我们花时间和精力去改善呢?这个问题可以通过上限分析来回答。
完结撒花花~