吴恩达机器学习笔记

吴恩达机器学习笔记


第一周 基本概念

  • 监督学习

分为回归算法和分类算法

  • 无监督学习
    事先没有正确答案。例如将客户群分成不同类,混合的声音区分开

先在Octave或者matlab实现,可行,再尝试用Java或者python或者C++重新写出来

只考虑两个变量的线性回归:例如找出一条函数拟合房价的那个例子里面的数据点。
数据集:输入x[i],输出y[i],中间函数是h。使用成本函数(即方差误差,这里假设是只有房屋大小这一个变量,所以线性函数是一条直线,用两个参数表示,m是样本的个数)来衡量我们的假设函数的准确性:
吴恩达机器学习笔记_第1张图片

吴恩达机器学习笔记_第2张图片
假设θ[0]=0,测试θ1。最低点误差为0,刚好就是实际函数h
吴恩达机器学习笔记_第3张图片
测试θ[0]θ[1]。有点类似高中地理的地势图
吴恩达机器学习笔记_第4张图片
吴恩达机器学习笔记_第5张图片
把上面那张图用立体显示出来就是下面这样,变量x和y就是θ[0]θ[1],输出变量z是误差(越小越好)。用梯度下降函数来调整θ[0]θ[1],该函数的第二个部分是导数,注意所有θ要同时调整。可以看到原本位置相差不大的两个点,下降的路径却完全不同。这里的梯度下降函数其实就是找局部最低点。
吴恩达机器学习笔记_第6张图片
吴恩达机器学习笔记_第7张图片
α可以影响下降的步长(导数的值也会影响),下降的方向就是斜率(导数)的方向,越接近局部最低点,导数的值越来越小,步长也越来越小(α保持不变)
吴恩达机器学习笔记_第8张图片
矩阵A的转置和逆矩阵,用matlab测试一下
吴恩达机器学习笔记_第9张图片

第二周 单变量线性回归

线代的向量用来代表样本,下标n代表变量(属性),如年龄,面积等等。上标m代表第几个样本。
吴恩达机器学习笔记_第10张图片
**考虑多个变量(多元)**的情况下,即h=θ0+θ1x1+θ2x2+θ3x3+θ4x4+θ5x5+…+θn*xn,其中x0=1,故省略,成本函数(误差):
吴恩达机器学习笔记_第11张图片
梯度下降函数:对比J(θ)可知,是在J(θ)的公式里面去掉平方,乘上x而已
这种梯度下降函数又称为批量梯度下降函数,因为“批量”就表示在画蓝色边框的这个式子里面,每次都得考虑所有的样本进行求和。
吴恩达机器学习笔记_第12张图片
特征缩放feature scaling
能够帮助梯度下降函数更快的运行:如下图所示,当考虑两个变量即n=2时,成本函数(误差)画成平面(类似等势图)会是一个椭圆,梯度下降会使θ从边缘从中心点(值最小的点)靠近,但靠近的路径会是来回振荡而缓慢的。通过下图的右边所示,将变量x1和x2通过缩放的方法限制在0到1之间,可以使椭圆变得类似正圆,梯度下降就会很快。
吴恩达机器学习笔记_第13张图片
均值归一化:不一定是要0到1,负的0.5到正的0.5,或者-3到3等等都是可以的。但不能是-0.00001到0.00001这么小,也不能是-100到100这么大。如下图所示,可以这样缩放成-0.5到0.5
吴恩达机器学习笔记_第14张图片
补充:为什么梯度下降函数中的[a’hua]取值过大会发散
如下图右边所示的A点到B点。由于B点比A点高(函数值大),更加陡峭,故导数更大,导数与α相乘,箭头(步长)就越长了,所以就发散了。而α过小则收敛缓慢,如下图右边绿色的箭头所示。
吴恩达机器学习笔记_第15张图片
下面的这种图,是选定一个α后,迭代次数(横轴)和误差值(纵轴)之间的关系。
吴恩达机器学习笔记_第16张图片
选取合适的特征值来构建模型
1.例如可以选取房屋的大小这一个值(一元),也可以选取房屋的长和宽这两个值(二元)构建函数。
2.对于下面这个数据集(一元),用一条直线取拟合并不合适;选二次函数取拟合,如蓝色的线条所示,到后面会下降,也不合适;故选取三次函数(右边绿色方框所示,其实采取开根号的幂函数更好),比较合适。但是如果通过如图下方所示,(size)及其平方,立方数量级差距有点大。
吴恩达机器学习笔记_第17张图片
其中一个解决办法是令x1=(size),x2=(size)开根号,x3=(size)开立方根。类似题目如下:
吴恩达机器学习笔记_第18张图片
正规方程(标准方程)法(Normal Equation)
梯度下降算法需要一步步迭代找到误差最低值,而我们可以利用所学到的微积分的知识,知道函数最低点就是导数为0的点。正规方程就是用来找到这个点的。如下图所示,构建出矩阵X和向量y,用最下方的红色方框圈出来的那个公式直接求出最终的θ
可以用matlab实现这个公式
吴恩达机器学习笔记_第19张图片
梯度下降算法和用正规方程的优缺点对比:梯度下降算法需要不断尝试α以及多次迭代,而正规方程可以一步到位,而且不需要特征缩放。但是正规方程在计算"矩阵X的转置乘以矩阵X"这一步时,时间复杂度是O(n^3),但n到达一万的时候就会开始有点慢了,而梯度下降算法就算百万级别都可以。而且正规方程在有些复杂的算法中不适用,只能用梯度下降算法。
吴恩达机器学习笔记_第20张图片
备注:当矩阵X是不可逆矩阵的时候,可能原因和解决办法如下:
吴恩达机器学习笔记_第21张图片

第三周 分类问题及逻辑回归

  • 概念

分类问题,y=0成为负类,y=1称为正类。
用线性回归来预测分类问题:例如我们设置阈值为0.5,即意味着函数值大于等于0.5则y=1,否则y=0(函数值等于0.5时也可以是y=0)。
P=(y=1|x;θ)表示在x和参数θ情况下,y=1的概率。

  • 逻辑函数(等同于S型函数(sigmoid))-> 逻辑回归(以线性回归为基础)
    该函数坐标趋向于0,右边趋向于1,x=0时y=0.5,并且左右对称。 因此正好可以利用这一点,将自变量换成h=θx,当h>0时预测y=1,h<0时预测y=0
    吴恩达机器学习笔记_第22张图片
    注意g(z)是1./ 不是 1/
    吴恩达机器学习笔记_第23张图片
    现在tanh函数几乎在任何场景都比sigmoid函数好,除了二分类。如果不知道用哪个,就用relu函数,更快。

  • 决策边界
    不一定只使用一次幂,可以使用多阶函数。例如h=θ0+θ1x1+θ2x2+θ3*x12+θ4*x22等等。或者可以使用其他更复杂的函数,只要变量个数正确即可,例如只有两个变量就只能是x1和x2。
    h=θx画出来的线就是决策边界,由θ决定,而不是数据集决定。
    吴恩达机器学习笔记_第24张图片

  • 逻辑回归的成本函数(误差)
    分情况讨论Cost(θ),而不再是线性回归里面简单的h(x)-y
    吴恩达机器学习笔记_第25张图片
    上面两种情况可以合二为一,以及向量化实现**(向量化实现,也就是用numpy库,可以避免使用for循环,大幅度提高运行效率,“避免使用for循环”是一个经验法则):**
    (但是有些情况,例如神经网络的正向传播,显式for循环是避免不了的)
    吴恩达机器学习笔记_第26张图片

  • 逻辑回归的梯度下降函数,以及向量化实现:
    吴恩达机器学习笔记_第27张图片

  • matlab里面的句柄(符合:@)!!
    https://www.cnblogs.com/Hand-Head/articles/8863702.html
    注意掌握两种用法,一种是类似自定义函数 myfunc=@(x)(x^2-2*x+1) 再 myfunc(2)。一种是自定义函数,例如在myfunc.m文件里面定义函数myfunc,然后就可以func1 = @myfunc 再 func1(2)

  • matlab里面的fminunc函数!!
    https://www.cnblogs.com/Hand-Head/articles/8863702.html
    1.这个函数的功能是传入一个函数,计算这个函数的最小值,例如可以[a,b,c]=fminunc(@(x)(x^2-2*x+1),-1),a是x值,b是y值,c表示是否收敛。
    2.而在机器学习里面,我们用这个函数来计算成本函数(误差)最小值时的θ值(也就是x值)。可以用第1点提到的用法去用,matlab会调用比梯度下降函数更加高级(速度也快得多)的方法去计算(计算下一步应该用哪个θ值(x值)测试)。
    也可以用我们自己定义的梯度下降函数,具体做法是在传入的成本函数的返回值里面,设置第一个返回值是y值,第二个返回值是下图中方框计算出来的值,matlab会自动调整设置α,然后得到下一次要用到的θ值(x值)。然后在fminunc函数里面加个options参数,值为options = optimset('GradObj','on','MaxIter','10')matlab的函数的参数很多有这种key-value,key-value对应的关系,如这里’GradObj’和’MaxIter’是指定变量,'on’和10是变量的值。
    吴恩达机器学习笔记_第28张图片

  • 一对多分类
    吴恩达机器学习笔记_第29张图片

  • 过度拟合(overfit)
    1.概念
    1)欠拟合 = 高偏差
    2)拟合过度 = 高方差
    3)泛化 即 能够推广,拟合新的数据
    吴恩达机器学习笔记_第30张图片
    吴恩达机器学习笔记_第31张图片
    2.解决办法
    1)减少变量(特征值):手动选择需要保留的变量 或者 使用模型选择算法
    2)正则化:可以保留所有变量

  • 正则化
    思路:例如在房价的那个例子里面,高次幂反而会导致过度拟合,于是在成本函数(误差)里面添加对某些θ的惩罚
    吴恩达机器学习笔记_第32张图片
    对除θ0以外的θ都进行惩罚,会有比较好的结果,公式如下。但如何公式里面的λ过大,会导致欠拟合,因此需要合理设置λ
    image.png-10.2kB
    正则化后的成本函数(误差)
    image.png-17.1kB
    正则化后的梯度下降函数
    吴恩达机器学习笔记_第33张图片
    正则化后的正规方程(直接用矩阵算出)
    吴恩达机器学习笔记_第34张图片

第四周 神经网络正向传播

上面用到的回归模型可以看成是只有输入层和输出层的神经网路模型。

  • 神经网络(nn)原理

如果变量很多,例如100个,即使只考虑两两组合,即x1x2,x2x2这种,也有5000个θ,如果考虑三个组合,则上百万个θ
在识别汽车的例子中,5050个像素就2500个变量了,太大。
神经网络模仿生物的神经元,树突接受输入,轴突输出。
吴恩达机器学习笔记_第35张图片
第一层是输入层,最后一层是输出层,中间是隐藏层。θ[上标j]表示从j层到j+1层的θ矩阵,如果第二层有4个神经元,第一层有2个神经元,那么θ[上标1]的维度是4
(2+1)= 4*3。注意每一层在输出的时候都会加上一个第0个神经元,赋值为1。
吴恩达机器学习笔记_第36张图片
神经网络每一层到下一层都是g(z)也就是逻辑回归函数计算的。也可以是ReLU线性整流函数。从第一层到最后的输出层,这样的顺序也称为前向传播。
向量化实现:
image.png-3.4kB

  • 例子

异或XOR : 两个全为0或全为1,返回1
异或再取反XNOR : 两个里面有且只有一个为1
1.首先是逻辑或的神经网络例子:h(x)=θ0+θ1x1+θ2x2,当θ=[-10,20,20]时,就是逻辑或,因为只有当x1和x2全为0时,h(x)才为0,其他情况都为1
吴恩达机器学习笔记_第37张图片
逻辑与的例子,取θ=[-30,20,20]
吴恩达机器学习笔记_第38张图片
如果取θ=[10,-20,-20],可以表示(NOT x1)AND(NOT x2)
2.将上面三种结合起来,两层神经网络就可以实现XNOR了
吴恩达机器学习笔记_第39张图片

  • 用神经网络解决一对多分类
    例如有下图中要区分出四种物品,即有四类,则神经网络最后一层(输出层)有四个神经元,例如h=[1,0,0,0]表示对应第一类
    吴恩达机器学习笔记_第40张图片

第五周 反向传播BP算法

  • 学习神经网络
    神经网络加了正则化后的代价函数/成本函数(误差)
    吴恩达机器学习笔记_第41张图片
    可以近似看成:
    吴恩达机器学习笔记_第42张图片
  • 反向传播算法(BP算法) ==》用来求出成本函数的导数
    计算过程的简图如下:
    吴恩达机器学习笔记_第43张图片
    详细过程:https://www.coursera.org/learn/machine-learning/supplement/pjdBA/backpropagation-algorithm
    参考知乎用户YE Y的回答:https://www.zhihu.com/question/27239198(里面的图简单明了)
  • 通过reshape()将参数存储为矩阵,在函数里面再还原取出来
    matlab的reshape()命令
    吴恩达机器学习笔记_第44张图片
    用法:
    吴恩达机器学习笔记_第45张图片
  • 梯度检验 grad check
    其实就是利用导数的定义,取1e-4,判断下BP算法(也可以检验其他算法)得到的导数值是否正确。记得最后要把梯度检验的代码注释掉,因为梯度检验很慢。
    吴恩达机器学习笔记_第46张图片
    吴恩达机器学习笔记_第47张图片
  • 参数值初始化
    不能把θ设为全0或者全是相同的一个数,这样算不出来的,要随机赋不同的接近0的值
    吴恩达机器学习笔记_第48张图片
  • 总结:神经网络的六步
    吴恩达机器学习笔记_第49张图片

第六周 机器学习的应用设计及神经网络步骤

  • 将数据集三七分,七分训练三分测试
    如果训练集的误差很小,但测试集的误差很大,说明过拟合
    吴恩达机器学习笔记_第50张图片

  • 将数据集六二二分,六分训练、二分cv调整(validation set 交叉验证)、二分测试
    这里用来调整函数的最高次幂d
    吴恩达机器学习笔记_第51张图片
    高方差variance(过拟合)与高偏差bias(欠拟合)
    吴恩达机器学习笔记_第52张图片
    λ是惩罚高次幂项的那个参数,λ很小时训练集误差最小,拟合度最高,但会导致过拟合;λ很大时训练集误差会比较大,拟合度降低,但能防止过拟合。
    吴恩达机器学习笔记_第53张图片
    我们要找出上图中指出的那个点
    吴恩达机器学习笔记_第54张图片
    高偏差bias的话,增大数据量是没有用的
    吴恩达机器学习笔记_第55张图片
    高方差的话,增大数据量是有用的
    吴恩达机器学习笔记_第56张图片
    六种操作分别可以解决的问题
    吴恩达机器学习笔记_第57张图片

  • 偏斜类
    例如换癌症的人大约占总数的0.5%,因此就算全都预测为0(不患癌症),准确率也有99.5%。
    说明:一般令y=1代表概率很少发生的事情,例如患癌症
    解决办法:通过计算precision和recall的值来看(准确率和召回率)。如果阈值设置得很高,例如设为h(x)>=0.9才令y=1,则准确率很高,召回率很低,很可能会漏判;如果令阈值为0.3,则准确率很低,召回率(即预测y=0的正确率)很高。
    吴恩达机器学习笔记_第58张图片
    再计算F值,值越高说明算法越好,权衡了准确率和召回率。这个测试应该放在cv test里面
    吴恩达机器学习笔记_第59张图片

第七周 支持向量机SVM

  • 支持向量机SVM
    参考!!!:https://blog.csdn.net/u010665216/article/details/78382984
  1. SVM用来替换逻辑回归神经网路模型,可以更好地用于分类问题。SVM不属于神经网路。
  2. SVM就是画一条线(即超平面)将数据集(有几个特征值就有几维,不包括y)分类,既以“准确分类”为前提,又能“忽略异常值”。鲁棒性也就是指健壮性、稳健性、强健性。
  3. 核函数也就是kernel函数,用于参考链接中的场景5,把低维空间映射到高维空间。这种线性不可分的情况也称为软间隔。
  4. SVM的工作原理是:确定分类器(即超平面),得到一个凸二次规划的问题 =》使用拉格朗日乘子法可得到其对偶问题 =》使用二次规划求解工具求解对偶问题,需要用到SMO算法。
  5. 使用sklearn库来实现SVM,除了指定kernel函数,还可能需要指定C(惩罚系数)和gamma参数 吴恩达机器学习笔记_第60张图片
  6. 补充:
    1)s.t的意思是subject to,也就是在后面这个限制条件下的意思
    2)针对不同的问题或者场景选择不同的kernel函数。“不带核函数的SVM”等同于“带线性函数的SVM”(因为这个时候不需要将低维空间映射为高维空间),适用于函数简单,或特征非常多而实例非常少的情况。
    3)大多数支持向量机软件包都有内置的支持多分类的功能
    4)关于逻辑回归模型和SVM之间选择哪个的问题——下图中的每一句话都很重要!
    吴恩达机器学习笔记_第61张图片

第八周 聚类和降维

  • 聚类
    聚类是无监督学习算法中的一种。
    K-means算法(K均值算法)
    算法流程:
    吴恩达机器学习笔记_第62张图片
    1)给定两个点作为簇类中心(cluster centroids),计算数据点到这两个点的距离,距离短的就属于那个簇,染色。计算误差函数J(θ)
    2)计算各个簇的所有数据点的平均值,将平均值作为那个簇的簇类中心。
    3)褪色,重复1)和2)步骤。
    补充:C[上标4]=3 表示第4个点属于第3个簇。
    说明:
    1)**误差函数J(θ)**公式如下,会不断减少,不会上升。
    吴恩达机器学习笔记_第63张图片
    2)一开始簇类中心应该随机分布,尝试多次才会有比较好的结果。例如下图中,虽然都是三个簇类中心,但右下角两个明显是由于初始化不好导致了不好的分类。
    吴恩达机器学习笔记_第64张图片
    3)关于一开始要选取多少个簇类中心,也就是簇类中心数K是多少。首先应该根据需求,其次可以尝试多个簇类中心数画出曲线,如果有肘点就选那个点。
    吴恩达机器学习笔记_第65张图片

  • 降维
    降维的动机
    1)数据压缩,以节省内存和硬盘空间。例如下图中一个是厘米和英寸冗余,可以降至一维;一个是把3维降到2维。
    吴恩达机器学习笔记_第66张图片
    2)高维数据可视化。例如一个国家的数据有50个特征,如GDP,人均寿命等等,降至二维或者三维,就能将数据画图出来了(可视化顶多画出3D,也就是三维)。问题在于,降维算法只负责减少维数,新产生的特征的意义就必须由我们自己去发现了。
    降维的算法——PCA(主成分分析)
    1)PCA问题的公式描述
    a)PCA 要做的是找到一个方向向量(Vector direction),当把所有的数据都投射到该向量上时,投射平均均方误差尽可能小。如下图,右边是PCA,找的是点到向量的垂直距离;而左边是线性回归,找的是误差值(y值误差)。
    吴恩达机器学习笔记_第67张图片
    b)PCA问题要将n维数据降至k维,目标是找到向量u(1) ,u(2) ,…,u(k) 使得总的投射误差 Projected Error 最小
    2)PCA算法过程
    a)零均值化。计算出所有特征的均值,然后令 xj = xj − μj 。如果特征是在不同的数量级上,还需要将其除以标准差 σ2 。
    吴恩达机器学习笔记_第68张图片
    这里x的均值是1.81,y的均值是1.91,于是变成
    吴恩达机器学习笔记_第69张图片
    b)计算协方差矩阵(covariance matrix) sigma Σ
    下图中第一个∑是协方差矩阵的意思,第二个Σ是求和的意思。
    image.png-4.5kB
    c)计算协方差矩阵 Σ 的特征向量(eigenvectors):在 Matlab 里我们可以利用奇异值分解(singular value decomposition)来得到特则向量矩阵 U,调用方式为 [U, S,V] = svd(sigma) 。(注:函数返回的矩阵 S 也有用,后续会讲到)
    吴恩达机器学习笔记_第70张图片
    d) 如果希望将数据从 n 维降至 k 维,只需要从 U 中选取前 k 个向量,获得一个 n × k 维度的矩阵,用Ureduce 表示,然后通过如下计算获得要求的新特征向量 z(i):
    image.png-3.7kB
    3)重建原始特征
    当 x 为 2 维,z 为 1 维,z = UreduceT * x, 则相反的方程为: xappox = Ureduce ⋅ z, 这时有 xappox ≈ x。
    4)如何选择主成分的数量K(也就是压缩后的维数)
    首先计算“平均均方误差与训练集方差的比例”,如果结果是1%,那就说明有99%的原本数据的偏差被保留了下来。通常95%到99%是最常用的取值范围。(注:许多数据集都可以在保留大部分差异性的同时大幅降低数据的维度,因为大部分现实数据的许多特征变量都是高度相关的。)
    公式如下:
    吴恩达机器学习笔记_第71张图片
    得到K的过程如下:
    a) 先令 k = 1,然后进行主要成分分析,获得Ureduce 和z,然后计算比例是否小于1%。
    b) 如果不是的话,再令k = 2,如此类推,直到找到可以使得比例小于 1%的最小k 值。
    改进:
    第a)步中,我们在svd()的时候除了得到U,也得到了S,可以用S来直接计算“平均均方误差与训练集方差的比例”。就不需要算那个麻烦的公式了,直接一点点增大下式中的k即可。
    吴恩达机器学习笔记_第72张图片
    应用建议:
    机器学习中的应用:降维,将通过Ureduce得到的z替换原来的x,然后进行机器学习预测。(n是指n维,k是指k维,m是指样本个数,R[上标n]是指n维的数据(有理数集))
    吴恩达机器学习笔记_第73张图片
    正确用法:
    1)压缩数据,然后可以用来减少内存/磁盘空间,或者加快算法运行速度。
    2)可视化数据(二维或者三维)
    错误用法:
    1)用于减少过拟合。(应该用正则化)
    2)在项目开始时便将PCA考虑进去。(先不用PCA,必要的时候才用)
    额外备注
    还有一种自编码器autoencoder也可以用于降维(比喻:将一幅图片打上马赛克,还可以重新还原)

第九周 异常检测与推荐系统

  • 异常检测
    异常检测(Anomaly detection)问题是机器学习算法的一个常见应用。这种算法虽然主要用于无监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
    应用场景:飞机检测异常引擎,欺诈检测(用户异常行为),数据中心的计算机是否有异常等等。
    高斯分布(即正态分布)
    通常如果变量 x 符合高斯分布 x∼N(μ, σ2 ),其中μ为所有数据的平均值,σ2为方差(标准差σ的平方),则其概率密度函数为 :
    image.png-11.7kB
    平均值决定位置,方差决定宽度(半山腰的整个宽度,不是一半)
    吴恩达机器学习笔记_第74张图片
    平均值和方差的计算公式如下:
    吴恩达机器学习笔记_第75张图片
    异常检测算法过程
    吴恩达机器学习笔记_第76张图片
    系统搭建与评价
    主要是数据集划分:将已有数据分开,从中选择一部分正常数据作为训练集,剩下的正常数据和异常数据混合构成交叉检验集和测试集。例子如下:
有 10000 台正常引擎的数据,有 20 台异常引擎的数据。 我们这样分配数据:

6000 台正常引擎的数据作为Training set;
2000 台正常引擎和 10 台异常引擎的数据作为CV set
2000 台正常引擎和 10 台异常引擎的数据作为Test set

计算p(x),对比ε,预测哪些数据点异常。
由于正常的数据比异常的数据多很多,是偏斜类,因此要根据计算出precision和recall来评价。
吴恩达机器学习笔记_第77张图片
异常检测与监督学习的对比
吴恩达机器学习笔记_第78张图片
异常检测的选择特征
1)最好还是将数据转换成高斯分布,例如: 使用对数函数 x = log(x + c),其中 c为非负常数; 或者 x = xc ,c为 0-1 之间的一个分数。
2)一些异常的数据可能也会有较高的p(x)值,因而被算法认为是正常的。如下图。
吴恩达机器学习笔记_第79张图片
解决办法:通常可以通过将一些相关的特征进行组合,例如增加两个特征值的比例这一特征。例如下面这个例子,用 CPU负载与网络通信量的比例作为一个新的特征,当CPU负载很高但网络通信量很低(说明不是网络通信造成的CPU负载高)时,说明出现了异常。
吴恩达机器学习笔记_第80张图片
多元高斯分布
所需场景:
吴恩达机器学习笔记_第81张图片
算法过程如下,最后跟原来的一样,计算出p(x)后跟ε比较即可:
吴恩达机器学习笔记_第82张图片
其中,协方差矩阵对模型的影响(不懂。。。):
吴恩达机器学习笔记_第83张图片
均值μ对中心点的影响:
吴恩达机器学习笔记_第84张图片
原始高斯分布模型和多元高斯分布模型对比
吴恩达机器学习笔记_第85张图片
a)原高斯分布模型使用较广泛,如果特征之间在某种程度上相互关联,可以通过构造新特征的方法来捕捉这些相关性。
b)如果训练集不是太大,并且没有太多的特征,可以使用多元高斯分布模型。

  • 推荐系统
    基于内容的推荐系统
    对比着前面笔记记录的梯度下降,成本函数,正则化,可以模仿着构建出来系统。关键是定义。已经有的评分是已知数据,问号的是要预测的值,x看成是输入层(这里代表的含义是电影的类型比例,加上前面的1是偏置值),θ是权重(由我们自己预定义初始值,我猜是这样:第一项是0对应偏置值的权重是0,第二项和第三项我们自己看表说话,这里分别对应用户对于爱情片和动作片的权重)。
    到最后会训练出合适的θ参数。
    吴恩达机器学习笔记_第86张图片
    吴恩达机器学习笔记_第87张图片
    吴恩达机器学习笔记_第88张图片
    协同过滤
    在之前的基于内容的推荐系统中,使用电影的特征,训练出了每一个用户的参数。相反地,如果拥有用户的参数,可以学习得出电影的特征(应该就是把原先的x当作θ,把θ当作x)。
    如果既没有用户的参数,也没有电影的特征,可以使用协同过滤算法,同时学习这两者。
    协同过滤算法就是在梯度下降的时候,同时最小化x和θ
    吴恩达机器学习笔记_第89张图片
    预测出电影的类型比例x后,可以通过特征向量之间的距离 ∥x(i) − x(j)∥,寻找另一部相似电影 x(j)
    细节:加入全新的用户
    这里主要是加入一位新的用户,没有为任何电影打过分,如果把该用户的θ都初始化为0,最后算法得到的预测值都是0,没有意义。于是将已经原有的打分全部均值归一化,并且加入均值,这样算法最后得到的结果就是电影的平均分了。
    吴恩达机器学习笔记_第90张图片

第十周 大规模数据的机器学习

1.如果数据集特别大,则首先应该检查这么大规模是否真的必要
2.两种替换批量梯度下降函数的函数(因为数据集很大的时候,每次都遍历所有数据来统计误差,计算量太大了):
随机梯度下降函数(SGD)
吴恩达机器学习笔记_第91张图片
吴恩达机器学习笔记_第92张图片
小批量梯度下降 Mini-Batch Gradient Descent
小批量梯度下降算法,介于批量梯度下降算法和随机梯度下降算法之间,每计算常数b次训练实例,更新一次参数 θ
通常会令 b 在 2-1024(2的整数次幂) 之间。小批量梯度下降的好处在于可以用向量化的方式来循环b个训练实例,如果用的线性代数函数库能支持平行处理,那算法的总体表现将与随机梯度下降近似。
注意:如果b=m,就是批量梯度下降;如果b=1,就是随机梯度下降SGD
吴恩达机器学习笔记_第93张图片
SGD的收敛图像
1.当数据集很大时使用随机梯度下降算法,这时为了检查随机梯度下降的收敛性,我们在每1000次迭代运算后,对最后1000个样本的cost值求一次平均,将这个平均值画到图中。
2.可以令α的值随着迭代次数的增加而减小,这样可以让收敛的时候震荡越来越小。
吴恩达机器学习笔记_第94张图片
在线学习机制
吴恩达机器学习笔记_第95张图片
映射化简和数据并行 Map Reduce and Data Parallelism
大规模数据下,批量梯度下降函数的代价很大,因此可以用map reduce分流而治的思想。例如求和任务可以分配:
image.png-269.8kB
很多高级的线性代数函数库能够利用多核 CPU 的来并行地处理矩阵运算,这也是算法的向量化实现如此重要的缘故(比调用循环快)。

#第十一周 Photo OCR 应用实例:图片文字识别
https://www.cnblogs.com/maxiaodoubao/p/10222391.html
建立一个从图片中识别出文字的系统需要三步:
1.文字侦测(Text detection)——将图片上的文字与其他环境对象分离开来
2.字符切分(Character segmentation)——将文字分割成一个个单一的字符
3.字符分类(Character classification)——确定每一个字符是什么
获得更多数据的几种方法: 1.人工数据合成;2.手动收集、标记数据;3.众包
不要根据直觉,而是使用上限分析判断应该改进哪个模块:

如何知道哪一部分最值得花时间和精力去改善呢?可以使用流程图进行上限分析,流程图中每一部分的输出都是下一部分的输入。

在上限分析中,我们选取一部分,手工提供 100%正确的输出结果,然后看应用的整体效果提升了多少。假使当前总体效果为 72%的正确率:
1) 如果让文字检测部分100%正确,系统的总体效果从 72%提高到了89%。这意味着很值得投入时间精力来提高我们的文字检测的准确度
2) 接着让字符切分结果100%正确,系统总体效果只提升了 1%,这意味着字符切分部分可能已经足够好了
3) 最后让字符分类100%正确,系统总体效果又提升了10%,这意味着我们可能也会应该投入更多的时间和精力到分类这部分

你可能感兴趣的:(机器学习)