使用神经网络二分类的时候误把输出层神经元个数设置位1,应该设置为类别的数目才是正确的。
后来我想,如果分类问题的输出维度设置为1,那不就成了回归了吗?深究发现并不是这么简单。
拿分数预测为例,分数 >=90 为优, 80<=分数<90为良,60=<分数<80为合格,分数<60为差
以下分为三种情形:
情形一:
以学习效率和学习时间预测分数,为回归问题,输出维度为1。
情形二:
以学习效率和学习时间做优、良、合格、差四分类,为分类问题,输出维度为4。
情形三:
以学习效率和学习时间做优、良、合格、差四分类,输出维度改为1,用数字0,1,2,3表示四个分类。
对于情形一、二没有什么问题,但对于情形三,这样正确吗?或者说,合适吗?如果合适,属于回归还是分类?
对于情形三,如果是多分类,输出层使用softmax做激活函数。
首先从输出数值上来说就是错误的。因为softmax输出值在【0,1】之间,而标签不仅仅是0,1,loss恐怕很难收敛。不过对于二分类却没有这个问题。
然后看目标函数,如果使用多类交叉熵目标函数:
这时标签不再是one-hot向量,而是数值0,1,2,3,对应目标函数中的t,相当于给t乘上了一个系数,会导致不同类别的单个数据loss大小失衡,会把模型拉到标签值大的数据上。同样,对于二分类,相当于是预测为1的概率。
然后有人可能会说,不用分类的目标函数,用回归的目标函数,比如平方和误差函数:
这相当于去拟合一个分段函数。我们来比较两种情况:
一、用平方和误差函数,输出层不用激活函数,输出维度为1,目标值为0,1,2,3进行拟合。
二、用多类交叉熵误差函数,输出层用softmax激活函数,输出维度为4,目标值为one-hot向量(情形二)。
这两种情况的梯度是等价的(参考 逻辑回归 - 简书 ),但是细节上还是不太一样。比如,对于第一种情况,把0预测为3会导致较大的误差,但对于第二种情况,把0预测为3和把0预测为1的误差却没有差别。这里其实体现出了分类和回归的差别,对于回归问题,目标值之间是有距离关系的,对于分类问题,目标值之间可能就如one-hot向量那样是完全无关的。从这方面来看,第一种情况更容易学到数据的真实特征,第二种情况反而丢失了目标值之间的距离特征。
如果这里不用平方和误差函数和交叉熵误差函数,哪种效果好就很难说了。但是不变的是,回归的目标值之间是有距离关系的,不论是曼哈顿距离、欧几里得距离还是其他距离度量。
同样,如果是二分类,就没有这个差异了(开挂的二分类。。。)。
分类和回归的差异总结如下:
1、激活函数,如果是神经网络,最后一层不加激活函数。
2、目标函数不同。
3、回归的目标值(标签)之间有距离特征,分类的没有。
至于别人说的回归的输出是连续的,分类的输出是不连续的,这点没有触及本质而且我也不认同,像上面说的分段函数的情况,回归的输出也可以是离散的。而且分类输出概率也是连续的。
部分想法和这位知友不谋而合:分类与回归区别是什么? - 知乎
相关链接:分类与回归区别是什么? - 知乎
网友评论