绪论
1、请介绍一下机器学习的整体框架
机器学习和模式识别基本一个东西,模式识别是工业界的称呼而已。机器学习是人工智能下属的子领域,用来辅助在大数据时代进行数据分析与数据管理,应用于数据挖掘工作。人工智能的其他子领域包括比如NLP CV等领域。
机器学习根据是否有监督可以分为:全监督学习(比如naive bayes、回归、SVM),无监督学习(聚类、降维),半监督学习 按照是否应用了神经网络可以分为:传统机器学习和神经网络(如果使用了深度神经网络,那么为深度学习)
2、介绍一下机器学习的历史吧
56-60 数学家主要在进行自动定理证明系统的研究
70-80 创造出了各种专家系统,将知识交给系统
90s到现在 让机器自己学习
3、机器学习和大数据有什么关系?
大数据时代,我们收集、传输、存储数据,通过机器学习 云计算 众包分析数据,将其转化成有用的信息供我们使用。
(机器学习帮助我们分析数据)
4、机器学习的基本术语,请用自己的语言表述
监督学习:有标签
无监督学习:没标签
数据集、训练、测试:train set 和 test set,包含特征信息和如果有的话 标签
示例、样本:数据集中的每条记录
样例:?带标签的记录?
属性、特征:描述样本的信息单元
属性值:mp hp
属性空间、样本空间、输入空间:属性 样本张成的空间
特征向量:映射组合成向量模式方便处理
标记空间、输出空间:输出的是映射到语义空间后的分类结果也好,判断也好 标记1001010011
假设、真相、学习器:对于模型而言的
分类、回归、二分类、多分类、正例负例、独立同分布、泛化:字面意思
5、机器学习的基本过程是什么呢?
首先进行表示:将数据进行特征化表示,通过向量表示法
然后进行训练,给定数据样本集从中学习出规律模型,找出最优的拟合函数
最后进行测试:对于新的数据样本利用学到的模型进行预测
6、No free lunch therom
不存在哪个模型和算法是完美的
前提:所有问题出现的机会相同,所有问题同等重要
7、既然没有完美模型,模型如何进行选择和评估?
主要原则:要找到泛化能力强的学习器
想要拟定一个评价标准,首先我们要衡量误差的大小
7.1 误差有哪几种类型呢?
训练误差(经验误差)、测试误差
泛化误差:除了训练以外的所有样本
经验误差不能过小,否则会过拟合;也不能太大,否则会欠拟合
我们现在有了误差的定义,相当于发明了阿拉伯数字,我们的最终目的是选择出好的模型,那么很自然地提出三个问题:怎么获得测试结果?怎么度量性能?怎么判断差别?
7.2 评估的方法3种
现在我们手上有数据、模型,可以求得误差。但是数据怎么划分就是评估的关键。
原则:测试集和训练集应该互斥才行,要不然作弊了
常用:留出法 交叉验证法 自助法
7.2.1 留出法
留出法将数据集拆分成测试集和训练集(互补)通常比例在2:1到4:1
7.2.2 k折交叉验证
数据分成k个大小相似的互斥子集,每次用k-1个子集的并集作为训练集,剩下1个当测试集,最终返回k个测试结果的均值。k最常用10
随机划分p次进行上面的操作叫做p次k折交叉验证
如果k==数据中样本大小,称留一法
7.2.3 自助法
对数据做m次有放回采样,D/D’作为测试集
约有1/3样本没在训练集中出现,对于集成学习帮助很大,在数据集小,难以有效划分训练集、测试集的时候很有用。但是导入了估计偏差,所以数据量够的时候还是用留出法
一个模型,即使算法相同,但是里面有很多的参数的不同也将导致最终答案不同效果不同
7.2.4 参数调整
算法人工设定的参数:超参数
模型参数:一般由学习确定
先产生若干模型,然后基于某种评估方法进行选择参数
要知道训练集 测试集和验证集之间的区别:参数选定后需要用训练集+验证集重新训练模型
模型最终的参数确定了,如何划分测试数据也确定了,下面可以进行训练了。但训练完后我们还得分析数据...
7.3 如何评估性能优劣?性能度量
性能度量用来反映泛化误差,衡量标准不同产生的结果不同(比如回归问题一般用均方误差
7.3.1 对于分类任务我们用什么?
我们使用错误率和精度来进行衡量
错误率是我分类分错了的占总体比重
精度是分对了的占总体的比重
7.3.2 介绍一下混淆矩阵和查准率与查全率吧
TP(真正例)TN(真反例) FP(假正例)FN(假反例)
后面一个字母表示我把它分到了什么类,前面一个字母代表我分对了没
查准率:意思是我认为是对的这些里面有多少是真的对的
P=TP/(TP+FP)
查全率:意思是在所有真的正确的当中我查出了多少
R=TP/(TP+FN)
PR是此消彼长的
7.3.3 有了查全率与查准率,我们可以用什么模型?更常用的是什么模型?
P-R曲线,BEP点 曲线无法区分的时候可以使用BEP
Fscore更常用 F1= 2PR/P+R
Fb=(1+b^2)PR/(b^2*P)+R b>1偏向于查全 b<1偏向于查准
还有额外的一个AUC ROC模型
横纵轴是tpr和fpr表示 真正正例中分对的 和 真正负例中但是被错分成负例的的 他俩是一起增减的
7.3.4 对于不同模型训练出来的数据,如果采取相同的评估方法在相应度量下比大小,结论严谨吗?
不可以。
因为测试性能不等于泛化性能,测试性能随着测试集变化而变化,且大多数机器学习算法本身具有一定随机性。所以需要第三步:假设检验。从统计学的意义上推断出A的性能是否优于B以及这个结论的把握有多大。
现在我们已经了解了如何划分数据以及如何度量模型的好坏,我们来研究一下更加抽象的问题:误差究竟是哪儿来的?人为什么能分对的机器分不对?
7.4 偏差-方差分解
对于回归任务,泛化误差可以拆解为bias var 和常数epsilon
bias是指期望输出和真实输出之间的差别 学习能力
var是指同样大小的训练集的变动导致的性能变化 数据充分性
epsilon是当前任务任何学习算法所能达到的期望泛化误差下限 学习任务本身的难度
偏差和方差通常存在冲突
训练少时偏差大,训练大时方差大
以上是机器学习绪论部分,主要向我们阐述了1、什么是机器学习以及 2、如何去对模型,对数据进行处理,得到最适合的模型。但是还没有教我们模型是什么,以及如何表达特征,所以从下一章开始我们就要正式学习这两者进行实践了。每个模型要把握住他的作用、思想和他的优缺点所在(和如何改进),接着对其数学原理要非常熟悉考试才能ok。但在开始模型之前,我们还得对特征的提取方法更加熟悉一些。表达、训练、测试三步走,表达也是很重要的。所以我们下面将介绍两个cv领域的特征子,熟悉线性滤波,尺度变换,核函数,梯度直方图等多种数学工具。从而对机器学习的第一步:表达 有更加深刻的理解。
01 HOG特征
histogram of gradient
1、总结HOG作用、思想、优缺点
作用:提取局部特征边缘、形状的特征描述子
思想:图像存在边缘,对应灰度图一定有较大梯度。其本质是梯度的统计信息来作为特征
擅长:几何和光学转化不变性,色彩影响较小,可描述局部形状
不擅长:尺寸大的图形(通过PHOG解决,把一串HOG连起来)速度慢,不能实时,遮挡问题,噪点敏感
2、数学预备知识
自行默写离散情况下x y方向梯度表达式,梯度强度 梯度方向 sobel算子 卷积核线性滤波(卷积进行180翻转,协相关不需要)
3、具体步骤
现在手上有一幅图,比较大,所以我们先要进行窗口移动算法
(1)窗口移动
选取出我们需要检测的位置
好了,窗口得到了,下一步我们需要对图像进行处理。主要是为了减少光照影响
(2)Gamma校正
调节图像对比度,减少图像的光照不均和局部阴影,对于即将过曝或曝光不足的照片进行矫正
ok图像变成灰度图了,下面可以开始计算梯度了
(3)计算图像梯度
梯度图移除非显著信息,加强了显著特征。水平垂直方向使用的是Sobel算子
要会计算一个像素的梯度值和梯度方向哦
现在我们获得了两张表:一张表示梯度值,一张表是梯度方向。然后我们把它们化成直方图。那么就需要横轴和纵轴。怎么画?
(4)以Cell为单位计算梯度直方图
我们窗口还是太大,还可以继续缩小成8*8的小格,称为一个cell
180分成9个栏,每个20度,看梯度值和对应梯度方向,属于哪个该栏就加该梯度值,于是就得到了直方图啦
这样可以减少计算量,对于光照等环境也更加鲁棒
好滴,那么现在直方图也有了,我们可以进一步进行归一化来彻底让描述子独立于光照的变化
(5)以block为单位进行归一化
窗口 cell block,block居于两者中间16*16 4个cell
归一化的方法是让向量的每一个值除以向量的模长
数据处理完毕,我们看看得到了什么?
(6)组合成HOG特征向量
每个block 16*16 ,分成4快8*8, 每个8*8中都进行了梯度直方计算,分了9栏。所以一个block里有4*9 36个特征。再乘以block的数量就可以得到最后的特征总数啦~
我们得到了一维特征向量*1,接下来我们用训练好的分类器,将该一维特征向量输入后就得到了我们所要识别和检测的内容的分类信息了。是不是很简单呢?
WGG CBH
02 SIFT特征
scale of invariant feature transform 尺度不变特征变换
我们想要拍全景照片,那么只要在不同位置拍摄出的照片找出对应的相同点然后合成一下就完事儿了。但是不同时间不同光照不同位置的像对应起来,传统算法经常提取角点或边缘,对于环境的适应能能力差。所以需要一种能够适应上述情况的目标识别方法。
1、SIFT的作用、思想、优缺点
作用:将一幅图像映射成一个局部特征向量集
思想:将图像变换成一个局部特征向量集,本质是在不同尺度空间上查找特征点(关键点)并计算出关键点方向的问题。
优点:具有平移、缩放、旋转不变性,同时对于光照变化,仿射投影也有一定不变性。辨别力强,多量,可扩展性(与其他特征向量联用)。
缺点:实时性差,特征点不足 PCASIFT降维主成分分析 CSIFT彩色尺度特征不变 SURF超快 ASIFT等
2、具体步骤
我们上面说了,只要找到特征点把他描述出来,然后再匹配一下就ok了。那首先我们来研究怎么检测出来特征点:
尺度空间就是如果给你一棵树,那就忽略细节观察宏观;如果给你树叶,那就关注细节观察微观。这样就可以得到不同尺度空间下的序列啦。
构建尺度空间采用高斯核函数,因为他是唯一尺度不变的核函数,而且可以获得多组多层图像,他还是线性的。尺度空间图像生成的就是当前图像和不同的核函数参数卷积运算后获得的图像。
尺度空间有层和组之分,层间最低一幅图是通过隔点采样获得的图像,一层里有很多组。
(1) 构建尺度空间
构建高斯金字塔 对图像做高斯平滑和降采样,加上高斯滤波保证连续性。产生多组图像
欠采样时进行低通滤波处理,保证不出现高频虚假信息;减小图像尺寸时使用高斯模糊
高斯差分:是对于组间的图两层相减获得的,所以像素值的变化越大说明他是轮廓
ok,现在我们获得了一个很反常识的尺度空间,它里面有很多层,层间是通过上一层降采样获得的。每一层有很多组,组间是通过高斯模糊得到的。
接下来我们要寻找特征点,从而确定我们要找的点。一个像素要和自己周边的8个和上下2*9个26个点进行比较,确定在尺度空间和二维空间中都是极值点。
(2)特征点定位
关键点是由DOG空间的局部极值点组成的。
嘛这样说确实很不精确,特征点在三位尺度空间的局部极值点,xy是整数像素,delta是离散尺度,需要DoG空间拟合进行精确定位。
DoG核函数可以近似为LoG函数,LoG定义为原始图像I与一个可变尺度的2维高斯函数G的卷积运算
特征点精确定位推导自己推一遍~(泰勒展开求偏导得到偏移量然后取极值点)
如果偏移量在任何分量上的取值大于0.5,说明精确极值点更接近邻近点,换邻近点重复上述流程
还需要去除不稳定的特征点
这样就可以在不同的视角,光照,旋转,尺度变化下得到相同的特征点啦。然后我们需要确定特征点的主方向。因为光光找到点还不行,照片旋转了的话怎么才能将他们重叠呢?如果特征点有一个方向信息就好了。
(3)特征点主方向确定
尺度不变性:尺度空间求得的极值
方向不变性:将圆周分为36份,计算特征点附近的像素梯度和幅值,根据每个像素幅值和距离中心的高斯距离绘制梯度直方图,将直方图中最大方向作为特征点主方向(如果有其他值达到80%),则指定为辅方向)
OK,图像的关键点检测完毕了,每个关键点有位置、尺度、方向三个信息,这样就保证了关键点就算平移,旋转,缩放也不会发生变化。
然后我们要用向量来记录这些点。是不是只记录一下特征点就行呢?还可以做得更好。我们可以把对于特征点有贡献的像素也记录下来,让特征点具有更多的特性:光照变化,视角变化等。那么怎么才能认为这个点是有贡献的呢?我们可以对特征点周围图像区域分块,计算块内的HOG。
(4)特征描述
首先确定描述子的窗口大小,坐标轴旋转,x正方向和主方向重合
旋转角度后新坐标公式,默一下(叉乘)
然后计算窗口内每个像素梯度幅值和方向
将窗口划分成4*4子区域
计算每个子区域梯度幅值直方图 8bins 一栏45度
得到4*4*8=128维向量描述子 这128维的向量就叫做SIFT特征向量
好了,特征向量终于求出来了,我们的每个