分类与回归
本节部分转载于穆文发表于知乎的分类与回归区别是什么下面的回答,获得原作者授权
分类与回归的模型本质一样,分类模型可将回归模型的输出离散化,回归模型也可将分类模型的输出连续化。
Logistic Regression&Linear Regression:
- Linear Regression:输出一个标量wx+b,这个值是连续值,用以回归问题
- Logistic Regression:将上面的wx+b通过sigmoid函数映射到(0,1)上,划分阈值,大于阈值的分为一类,小于的分为另一类,用以处理二分类的问题
- 对于N分类问题,可以先计算N组w值不同的wx+b ,然后归一化,比如softmax函数变成N个类上的概率,用以多分类
SVR &SVM
- SVR:输出wx+b,即某个样本点到分类面的距离,是连续值,属于回归问题
- SVM:将SVR的距离用sign(.)函数作用,距离为正的样本点属于一类,为负的属于另一类
Naive Bayes用来分类和回归
前馈神经网络(CNN系列)用于分类和回归
- 回归:最后一层有m个神经元,每个神经元输出一个标量,m个神经元的输出看做向量v,现全部连接到一个神经元上,这个神经元的输出wv+b,是一个连续值,处理回归问题,和Linear Regression的思想一样
- 分类:将m个神经元最后连接到N个神经元,有N组不同的wv+b,进行归一化(比如softmax),就变成N个类上的概率,如果不用softmax,而是每个wx+b用一个sigmoid,就变成多标签问题
循环神经网络(RNN系列)用于分类和回归
- 回归和分类与CNN类似,输出层的值y=wx+b,可做分类和回归,区别在于,RNN的输出和时间有关,即输出的是{y(t),y(t+1),..}序列
Logistic回归&SVM
两种方法都是常见的分类算法,从目标函数来看,区别在于逻辑回归采用的是logistical loss,svm采用的是hinge loss。这两个损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是只考虑support vectors,也就是和分类最相关的少数点,去学习分类器。而逻辑回归通过非线性映射,大大减小了离分类平面较远的点的权重,相对提升了与分类最相关的数据点的权重。两者的根本目的都是一样的。此外,根据需要,两个方法都可以增加不同的正则化项,如l1,l2等等。所以在很多实验中,两种算法的结果是很接近的。^1
线性模型的表达式为
$$
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+…+\theta_nx_n
$$
将线性模型的输出送给sigmoid函数,就得到logistic回归模型;将线性模型表达式中的xi换为fi,就得到SVM模型的表达式。其中fi是xi的核函数,也就是xi的非线性多项式,例如f1=x1*x2,所以线性kernel的SVM(fi=xi),在选择和使用上跟logistic回归没有区别。
用n表示Feature数量,m表示训练集个数。下面分情况讨论^2:
- n很大,m很小
n很大,一般指n=10000;m很小,一般m=10-1000。m很小,说明没有足够的训练集来拟合非常复杂的非线性模型,所以这种情况既可以选择线性kernel的SVM
,也可以选择Logistic回归
。 - n很小,m中等
n很小,一般指n=1-1000;m很小,一般m=1000-10000。m中等,说明有足够的训练集来拟合非常复杂的非线性模型,此时适合选择非线性kernel的SVM
,比如高斯核kernel的SVM
。 - n很小,m很大
n很小,一般指n=1-1000;m很大,一般m=50000-1000000。m很大,说明有足够的训练集来拟合非常复杂的非线性模型,但m很大的情况下,带核函数的SVM
计算也非常慢。所以此时应该选线性kernel的SVM
,也可以选择Logistic回归
。n很小,说明Feature可能不足以表达模型,所以要添加更多Feature。
一些概念
迁移学习^3:
有监督预训练(supervised pre-training),把一个任务训练好的参数拿到另一个任务作为神经网络的初始参数值。
- NMS(非极大值抑制):
在物体检测中NMS(Non-maximum suppression)非极大抑制应用十分广泛,其目的是为了消除多余的框,找到最佳的物体检测的位置。在RCNN系列算法中,会从一张图片中找出很多个候选框(可能包含物体的矩形边框),然后为每个矩形框为做类别分类概率。非极大值抑制(NMS)非极大值抑制顾名思义就是抑制不是极大值的元素,搜索局部的极大值。例如在对象检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分类及分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是某类对象的概率最大),并且抑制那些分数低的窗口。
定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。 所谓非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从小到大分别属于车辆的概率分别为A、B、C、D、E、F。
(1)从最大概率矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个设定的阈值;
(2)假设B、D与F的重叠度超过阈值,那么就扔掉B、D;并标记第一个矩形框F,是我们保留下来的。
(3)从剩下的矩形框A、C、E中,选择概率最大的E,然后判断E与A、C的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记E是我们保留下来的第二个矩形框。
就这样一直重复,找到所有被保留下来的矩形框。
- IoU(交并比):
物体检测需要定位出物体的bounding box,比如车辆检查中,我们不仅要定位出车辆的bounding box ,还要识别出bounding box 里面的物体就是车辆。对于bounding box的定位精度,有一个很重要的概念,因为我们算法不可能百分百跟人工标注的数据完全匹配,因此就存在一个定位精度评价公式:IOU。IOU表示了bounding box 与 ground truth 的重叠度。即IoU是定位精度的评价公式
$$
IoU=\frac{A\cap B}{A\cup B}
$$
准确率&精确率&召回率:
准确率是正确预测的样本占总的预测样本比例
精确率是预测为正的样本中有多少是真的正类
召回率是样本中有多少正例被正确的预测
F值=准确率*召回率*2/(准确率+召回率),是准确率和召回率的调和平均值
TP:正类被预测为正类
FN:正类被预测为负类
FP:负类被预测为正类
TN:负类被预测为负类
$$
准确率=\frac{TP+TN}{TP+TF+FN+FP}
$$
$$
精确率=\frac{TP}{TP+FP}
$$
$$
召回率=\frac{TP}{TP+FN}
$$
卷积计算后的图片尺寸:
$$
outputsize=\frac{imagesize+2*padding-kernelsize}{stride}+1
$$
感受野计算
感受野的定义是 卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。通俗的说,感受野就是输入图像对这一层输出的神经元的影响有多大,影响大不一定好,也许会带来用不着的糟粕,影响小也会阻碍学习。
具体计算例子参考:https://zhuanlan.zhihu.com/p/31004121
RankBoost:
RankBoost的思想比较简单,是二元Learning to rank的常规思路:通过构造目标分类 器,使得pair之间的对象存在相对大小关系。通俗点说,把对象组成一对对的pair,比如一组排序r1>r2>r3>r4,那可以构成pair:(r1,r2)(r1,r3),(r1,r4),(r2,r3)(r3,r4),这样的pair是正值,也就是label是1;而余下的pair如(r2,r1)的值应该是-1或0。这样一个排序问题就被巧妙的转换为了分类问题。近来CV界很多又用这种learning to rank的思想做识别问题,先把识别转换为排序问题再转换为分类问题
真阳率,假阳率,AUC,ROC
$真阳率=\frac{a}{a+c}$:含义是检测出来的真阳性样本数除以所有真实阳性样本数。
$假阳率=\frac{b}{b+d}$:含义是检测出来的假阳性样本数除以所有真实阴性样本数
ROC曲线就是把假阳率当x轴,真阳率当y轴画一个二维平面直角坐标系。然后不断调整检测方法(或机器学习中的分类器)的阈值,即最终得分高于某个值就是阳性,反之就是阴性,得到不同的真阳率和假阳率数值,然后描点。就可以得到一条ROC曲线。
需要注意的是,ROC曲线必定起于(0,0),止于(1,1)。因为,当全都判断为阴性(-)时,就是(0,0);全部判断为阳性(+)时就是(1,1)。这两点间斜率为1的线段表示随机分类器(对真实的正负样本没有区分能力)。所以一般分类器需要在这条线上方
AUC就是ROC曲线下方的面积,越接近1表示分类器越好。