分类问题和回归问题
在实际生活中,人们面临的问题无非就是离散的和连续的。
比方区分出某个人属于男性还是女性,比方衣服是什么颜色的,什么种类的,这些都是在有限数量的结果中寻找答案,也就是最终结果只能是N个里面的某一个,这种问题就是分类问题 。分类问题预测的是类别,每个结果都是平等的,不存在好坏的区分。
另一种问题,结果可以有无限多的可能,比方玩游戏有个得分,最终是要让这个分数越高越好,而且结果有很多可能,但最终结果只有一个分数,每个结果并不是平等的,有个好坏差别,分数越高越好,这种问题就是回归问题
在机器学习中,分类问题输出的是一个概率分布,比方一个三分类的问题,最终输出的结果可能是
0.1,0.7,0.2\],每个值表示的是所属分类的概率,因此\[0.1,0.7,0.2\]表示的是这次预测的结果是第二个分类的可能性最高,概率为70%。而回归问题输出的是一个值,比方FlappyBird,最后得分是23。 不同的问题,我们所用的TensorFlow模型是不一样的,后面实战中会讲到。 #### 目标函数概念 首先,为什么需要目标函数?来看这么一个三分类的问题。 如果A模型预测一件衣服是T恤,衬衫,毛衣的最终概率输出是\[0.1,0.7,0.2\],而B模型预测的概率输出是\[0.3,0.5,0.2\],显然这两个模型预测的结果都是这件衣服是个衬衫,如果实际这件衣服就是个衬衫,那么很显然,A模型预测是要比B模型的好,因为A模型预测它是衬衫的概率比B模型的高。那么在模型的预测结果都是衬衫的情况下,怎么去评估哪个模型更加准确以实现帮助我们评估和优化模型的目的呢,这就需要目标函数了。 比方上面A、B两个模型,实际最正确的概率分布应该是\[0,1,0\],那么A模型的目标函数可以这么定义f(x)=1n∑x,y(y−model(x))2f(x) = \\frac{1}{n} \\displaystyle\\sum_{x,y} (y-model(x))\^{2}f(x)=n1x,y∑(y−model(x))2 上面的 y 表示实际的概率,model(x)表示模型预测的概率。套用到上面A\[0.1,0.7,0.2\]、B\[0.3,0.5,0.2\]两个模型的预测结果上,就可以分别得出他们的目标函数是: A=((0−0.1)2+(1−0.7))2+(0−0.2)2)/3=0.14A=((0-0.1)\^{2}+(1-0.7))\^{2}+(0-0.2)\^{2})/3=0.14A=((0−0.1)2+(1−0.7))2+(0−0.2)2)/3=0.14 B=((0−0.3)2+(1−0.5))2+(0−0.2)2)/3=0.38B=((0-0.3)\^{2}+(1-0.5))\^{2}+(0-0.2)\^{2})/3=0.38B=((0−0.3)2+(1−0.5))2+(0−0.2)2)/3=0.38 由公式可以很容易看出平方差损失函数评估的是实际预测结果离正确结果的误差,也就是说f(x)越小表示预测的结果越准确,所以,上面可以看出A的目标函数小于B的,A的模型预测效果更好。如果有个C模型预测结果是\[0,1,0\]那么得到的目标函数损失自然是0了,也就是完美命中。 #### 目标函数有哪些 分类问题: 上面介绍的是取各个值之间的差值做平方差来作为目标函数,也即: **平方差损失:** f(x)=1n∑x,y(y−model(x))2f(x) = \\frac{1}{n} \\displaystyle\\sum_{x,y} (y-model(x))\^{2}f(x)=n1x,y∑(y−model(x))2 除了平方差损失,还有交叉熵损失,也是描述模型好坏的一个函数: **交叉熵损失:** f(x)=1n∑x,yy.ln(model(x))f(x) = \\frac{1}{n} \\displaystyle\\sum_{x,y} y.ln(model(x))f(x)=n1x,y∑y.ln(model(x)) 根据平方差损失,很容易联想到其实,绝对值也可以用于描述误差: **绝对值损失:** f(x)=1n∑x,y∣y−model(x))∣f(x) = \\frac{1}{n} \\displaystyle\\sum_{x,y} \\mid y-model(x)) \\midf(x)=n1x,y∑∣y−model(x))∣ 这些都可以用于分类问题的目标函数计算。 回归问题: 由于回归问题最终输出是一个值,因此,它的目标函数是比较简单的,就是和真实值平方差计算,或者取差值的绝对值,最终得到它离真实的值的误差,用这个误差来评估预测的好坏。 **平方差损失:** f(x)=(y−model(x))2f(x) = (y-model(x))\^{2}f(x)=(y−model(x))2 **绝对值损失:** f(x)=∣y−model(x))∣f(x) =\\mid y-model(x)) \\midf(x)=∣y−model(x))∣ TensorFlow的训练过程其实就是不断的喂数据,然后通过目标函数的值来进行参数的调整,最终使目标函数趋于目标值的过程。