第十六章 异常检测
问题动机
异常检测算法
红色为数据集,绿色为测试集
应用
- 用户欺骗检测
- 制造业检测
- 计算机数据中心检测
算法
1.选择特征向量
2.拟合参数
3.测试新样本(其中下图3中,公式为高斯分布)
检测例子
ε为设定值
开发和评估检测算法
数据集分布
算法评估
异常算法检测和监督学习
建议
数据集特征转化,如下图,可以对特征进行log()或者是开更,使得数据集看起来比较接近高斯分布.
异常算法的特征
误差分析的过程:看看哪里出错了,看看这个算法没有标记出来的异常样本,看看能不能启发我们创建一些新特征,利用原有的特征和新的特征.可以检测出该异常样本
多变量高斯分布
左图为右边两个特征值构成的样本分布图,这样构建的分布图的误差在于,左图中圆圈中的概率是一样的,也就是红色样本附近的绿色的样本与非红色的概率是一样的.事实上是大得多的.
改良:多元高斯分布
描述
不同矩阵的多元高斯分布如下
改变∑值
改变μ值的多元高斯分布
多元高斯算法描述
改良后的高斯分布算法(通过改变μ值和∑值适应于实际的图像)
多元高斯模式是多个原始高斯模型组合的一种特殊形式
原始的模型与多元模型,原始的模型:手动构建新特征,多特征少样本数,
多元模型:自动构建相关特征,计算量大,必须训练样本数m>10*n
第17章推荐系统
电影预测评分
nu表示第几个用户,nm表示第几部电影.当r(i,j)=1时,表示用户j有给电影i评分,当前仅当r(i,j)=1时,得到y(i,j),表示用户j对电影i所给出的评分,所以y(i,j)∈{0,1,2,3,4,5}
推荐系统的作用是给出了r(i,j)和y(i,j)数据,然后去查找没有被评级的电影,并试图预测这些电影的评分.实现:构造模型和学习算法,一个能自动为我们填补用户没有接触的电影的算法,然后把这类电影推送给该用户
ex:预测用户Alice对电影Cute puppies of love的打分.
实现步骤:
X(3)=[x0,x1,x2]=[1,0.99,0].x0为默认特征值0,假设得到θ(1)=[0,5,0].
prediction=X(3)×θ(1)=5*0.99=4.95
公式描述
最小化对象
下降梯度
协同过滤
在实际过程中,我们很难去让每个人看完电影后告诉我们这部电影爱情与动作之间的比值是多少.
所以我们用矩阵θ(i)=[0,5,0]来表示每个人对爱情电影的喜爱程度和对动作电影的喜爱程度,i∈{人数},[0,5,0],θ1为默认特征值,θ2为喜欢爱情电影的程度,θ3为喜欢动作电影的程度.
然后用θ(i)×x(i)=用户i给电影j的评分.
如下图右下角:,计算出X(1)=[[1],[1.0],[0.0]]
我们将这一学习问题标准化到任意特征X(i),得到最小化的目标
总结一下:在之前我们是通过用户给的电影特征程度X(i)(如爱情的动作的比例)得到该用户的电影偏好θ(i),从而预测其它电影的评分,在决定是否推送该电影给该用户.
后面我们是通过用户给的电影偏好θ(i)得到该电影的特征程度X(i)(如爱情的动作的比例),且同上.
任意一个θ,得到x,在得到θ,然后在得到
上面的模型建立在每位用户都对数个电影进行了评价,并且每部电影都被数位用户打分的情况下才能使用这个循环.
协同过滤算法指的是当我们执行算法的时候,要观察大量的用户,观察这些用户的实际行为来协同得到更佳的每个人对电影的评分值,每一个用户的评价都帮助了算法更好地进行特征学习.
协同过滤算法
把之前的两个最小化合并在一起
可以同时计算出θ和x,这里的θ和x都是∈Rn,而不是之前的n+1维,放弃这个初始特征值惯例的原因是:我们现在是在学习所有的特征,我们没有必要将一个特征值硬编码为1,因为如果算法真的需要一个特征永远为1,它可以选择靠自己去获得1这个数值,如果算法想要的话,它可以将特征值x_1设定为1.
协同算法流程:
- 把x和θ初始为小的随机值
- 利用梯度算法或者是其他高级优化算法最小化目标函数J.
- 最后,给定一个用户,该用户有一些参数θ以及一部电影带有已知的特征x,我们可以预测该用户给这部电影的评分会是θT×x
矢量化:低秩序矩阵分解
把用户和电影构成矩阵
这个矩阵也可以从θT×X得到.
寻找相似电影
实施细节:均值归一化
前提我们不实用均值归一化:当预测一个新用户(该用户Eve未评论过任何一部电影)对电影评分时,得到的分数会是全0,显然这个不是一个很好的分数
当我们使用均值归一化之后:
我们在预测结果后面加上一个均值μ,均值μ由前几个用户的平均值得来.这样显然会比之前的全0好很多.
第18章大规模机器学习
大规模数据集
当我们拥有100,000,000条数据的时候,在使用梯度下降的时候,求1亿的和往往是很困难的.
所以在初期我们不使用1亿条数据,而是在一亿条数据中随机选择1000条数据,如果1000选取的好的话,1000条数据也是没问题的.
随机梯度下降
相比于批次梯度下降,随机梯度下降算法不需要对全部m个样本求和来得到梯度项,而是只需要对单训练个样本,求出这个梯度项,不需要对所有的数据进行扫描,我们就能对参数进行修改,使其达到全局最小值,随机梯度下降算法只关注单个训练样本.
随机梯度下降算法具体描述:
首先先随机打乱数据集,然后遍历数据集,外循环取决于我们自己的选择,内循环要遍历整一个数据集.在图像描述中,随机下降算法,不会向普通的梯度下降那样一直向最优点前进,而是随机地选择方向,但是总体都是向着最优化点.
Minni-Bat梯度下降
批量梯度下降算法,每一次循环都使用全部的样本,随机梯度下降算法则是每一次循环使用1个样本,而Minni-Bat则是使用b个样本进行梯度下降
算法描述:,我们要确定的b的大小.
随机梯度下降收敛
批量梯度下降算法的收敛,要计算出J,而随机梯度下降则是每1000步计算出cost()函数的平均值.通过J和cost()函数的平均值来验证该算法是否收敛
图像描述:
如果图像像左上那样,则该算法一直在收敛,当我们加大批次的数值,则可以得到一条平滑的曲线(如右上图),要是得到像左下的图像,则说明算法并没有再学习(调整学习速率或调整特征),也有可能是批次的步数太小,导致曲线求平均值的样本太小,包含了太多的的噪声,所以看不出收敛.如果得到的图像像右下那样的显示,则说明算法发散,需要使用一个更小的学习速率α
学习速率α的选择,一种是保持常数,另一种是随着梯度的下降,不断地减小α,由于后者需要确定的减小α的参数,需要更多的时间去确定,这会使得这个算法变得更复杂,所以一般采用常数的做法.
在线学习
通过在线的机制让用户实时输入数据来拟合出更好的模型,这种方式也可以逐渐适应环境的变化,也会适应用户的新特点.
搜索引擎,用用户输入的字词来匹配我们的手机,然后选出10台手机给用户,让用户自己点击这10台手机,最终地我们获得相应的手机概率P
这种在线学习的机制,相比于随机梯度下降算法不同的是,我们没有固定的数据集,而是获取一个用户样本,从按个样本中学习,然后丢弃这个样本,继续处理下一个.前提是我们需要一个长期稳定的数据流.这个的模型具有较强的适应性.
减少映射与数据并行
Map-reduce的思想就是分布式,把400个样本分成4个,然后并行运算,速度提高4倍.4个结果给回到中心服务器,再相加
适用条件:该算法可以分成多个单体来运算,并且最终可以相加.
也可以采用多核的方法
开源系统:Hadoop
第十九章,机器学习的应用
问题描述OCR pipeline
照片OCR问题:注重的问题是如何让计算机读出图片文字的信息
光学文字识别(Optical Character Recognition,OCR)步骤
识别流水线:(模块功能分开)
滑动窗口分类器
行人识别:(人体具有相似的长宽比)
有监督学习:
滑动窗口:利用定义好大小的窗口进行对图像进行滑动扫描,窗口大小可以调,下一步移动的像素距离也可调,从左到右滑动,再往下移动,再从左到右,遍历完整张图片,通过分类器进行识别
最终得到
相似地:
图片中的文字识别:
通过滑动窗口的识别:,扫描完之后,使用算法扩大该识别出文字的矩形,然后剪出图上的矩形,进入下一个流水器字符分割
字符分割:同样地使用滑动窗口进行监督学习,判断是否为两个字母之间,然后进入流水线的下一个分类器:字符识别.可以参考识别MNIST手写数字识别例子
整体流水线:
获取大量数据和人工数据
左边是真实的数据,右边是人工合成的数据(用大量字体随机复制到任意背景图上)
也可以拉伸任意一张图片,使其能够变成更多的样本.
同样的,如果是语音识别,可以向纯净的语音添加各种噪音,使其变成更好的样本.相反地如果只是随机的无意义的噪音加入到数据中并没有多大的帮助
关于获得大量的数据集:有一个要避免的是:花大量的时间在收集数据集上面,而不是放在模型上面,获取大量数据集的方式:1.人工合成,2.自己标记,3.外包出去
上限分析
在流水线上的不同的组成的提升都可以提升总系统的,但是不同提升不同的组件对总体的提升不一样,所以.我们把时间放在能够大幅度提升总系统上面的组件.
人脸识别流水线:
预处理:把背景去掉
使用滑动窗口识别出人脸,下一步识别出眼睛,然后是鼻子,再然后是嘴巴
针对这个流水进行分析上限.得到我们应该把时间放在哪一个上面.
作者表示:他本人从事多年的机器学习方面的工作,但是遇到问题的时候,还是不能相信自己的直觉进行判断自己的工作,而是把问题分成多个模块,然后做一下上限分析,然后决定把时间放在哪一个上面.
第二十章 总结
课程的主要内容: