分类是机器学习中使用的最多的一大类算法,我们通常也喜欢把分类算法叫做”分类器”
这个说法其实也非常形象,在我们看来,这就是一个黑盒子,有个入口,有个出口.我们在入口丢进去一个”样本”,在出口期望得到一个分类的”标签”.比如,一个分类器可以进行图片内容的分类标签.我们在入口丢进去一张老虎的照片,在出口得到老虎这样一个描述标签;而当我们在”入口”丢进去一张飞机的照片,在出口得到”飞机”这样一个描述标签,这就是一个分类器最为基本的分类工作过程.
一个分类器模型在他诞生的时候其实是不具备这种功能的,只有通过给予他大量的图片以及图片所对应的标签分类,让他自己进行充分的总结和归纳,才能具备这样一种能力.
在刚刚看到的逻辑回归这种方式中,我们已然看到了一些端倪.逻辑回归和普通的线性回归不同,他的拟合是一种非线性的方式.而最终输出的”标签值”虽然是一种实数变量,而最终分类的结果却期望是一种确定的值”是”或”不是”.其他各种分类器的输出通常也是离散的变量,体现出来也是非线性的分类特点.
我们在编写代码教会分类器怎么做学习的时候,其实是在教他如何建立一种输入到输出的映射逻辑,以及让它自己调整这种逻辑关系,使得逻辑更为合理.而合理与否的判断也非常明确,那就是召回率和精确率两个指标–召回率指的是检索出的相关样本和样本库(待测对象库)中所有的相关样本的比率,衡量的是分类器的查全率.精确率是检索出的相关样本数与检索出的样本总数的比率,衡量的是分类器的查准率.
具体来说,譬如有一个1000个样本的训练集,是1000张照片,里面有200张是猫,200张是狗,600张是兔子,一共分成3类.我们将每个照片向量化后,加上标签:
猫–0
狗–1
兔–2
这相当于一个x和y的对应关系,把它们输入到训练集去训练(但是这个地方的标签0,1,2并不是实数定义,而是离散化的标签定义,通常习惯用one-hot独热编码的方式来表示).经过多轮训练之后,分类器将逻辑关系调整到了一个相对稳定的程度,然后用这个分类器再对这200张猫,200张狗,600张兔子图片进行分类的时候,发现:
200张猫有180张正确识别,20张误判为狗
200张狗全部正确识别
600张兔子,550张正确识别,30张误判为猫,20张误判为狗
所以
猫的召回率为 180/200=90%
兔子的召回率为550/600=91.7%
狗的召回率为200/200=100%
猫的精确率为 200/210
狗的精确率为 200/240
兔子的精确率为 600/550
分类训练过程和回归训练的过程一样,都是极为套路化的程序:
1.输入样本和分类标签
2.建立映射假说的某个y=f(x)的模型
3.求解出全局的损失函数LOSS和待定系统w的映射关系,LOSS=g(w)
4.通过迭代优化逐步降低LOSS,最终找到一个w能使召回率和精确率满足当前场景需要,注意,这里尤其指在验证数据集上的表现.
大家请注意这4个步骤,我们从前面最简单的机器学习的例子中已经总结出来一个最为有概括性的科学性流程.这种流程广泛使用,并且在其他机器学习的场景中也是可以顺利落地的.
分类器的训练和工作过程就是这个样子,听起来分类器的过程非常简单,但是要知道人的智能行为其实就是一种非常精妙或者完美的分类器.他能够处理极为复杂,极为抽象的输入内容–不管是文字,声音,图像,甚至是冷,热,刺痛感这种难以名状的刺激,并且能够在相当短的时间内进行合理的输出(各种反应和表现)
从定义的角度上来说,人其实就是一种极为复杂且极为智能的分类器,而我们在工业上使用的分类器这通常是非常片面的,只研究一种或几个事物的”专业性”的分类器,和人类的分类能力区别就太大了.