大白话5分钟带你走进人工智能-第二十节逻辑回归和Softmax多分类问题(5)算法
上一节中,咱们讲解了逻辑回归的优化,本节的话咱们讲解逻辑回归作多分类问题以及传统的多分类问题,咱们用什么手段解决。网络
先看一个场景,假如咱们如今的数据集有3个类别,咱们想经过逻辑回归建模给它区分出来。但咱们知道逻辑回归本质上是区分二分类的算法模型。难道没有解决办法了吗?办法仍是有的,既然想分出3类,咱们姑且称这3个类别号为0,1,2。想经过逻辑回归作二分类的话,那么咱们就分别判断每一条样本数据属不属于0号类别,属不属于1号类别,属不属于2号类别去判断,这样至关于创建3个逻辑回归的模型,分别训练,既照顾了逻辑回归二分类的本质,也照顾了多分类的需求。假如咱们训练出来的3个模型, 第一个模型判断是否是1号类别的几率是0.8 第二个模型判断是否是2号类别的几率是0.1 第三个模型判断是否是3号类别的几率是 0.6 ,综合来看0.8>0.6>0.1,因此咱们对这条样本判别为1号类别。剩下的全部样本数据亦如此。这种用逻辑回归解决问题的方式就是OVR( ovr one vs rest )。这里问个问题,这三个模型判断出来各自的几率相加结果是1 吗?确定不是。由于咱们是对每一个模型单独训练出来的。函数
咱们先总结一下OVR思路就是:1,修改数据的lable。2,而后训练N个逻辑回归模型。3,根据输出结果几率输出。测试
这里须要注意一个问题就是样本不均衡的问题。逻辑回归就怕样本不均衡,当负例比正例或者正列比负例多不少的时候,模型判断会不许确,逻辑回归,最喜欢的是1:1的正负例。 由于假若有一个训练集只有一条正例,其它的全都是负例,那么哪怕把全部的条目都判断为负例,正确率仍是99%。由于在训练过程当中,咱们是找了一组w带来总的预测正确率最高,但这样状况下当样本不均衡的时候就会对正例特别的不公平,由于它只追求总的预测正确率最高,无论是正例仍是负例,都会对少的那一部分很不公平,它会着重的想把多的预测准确了,得到更大的收益,对它来讲这个w是更好的w。因此当样本不均衡的时候不必定会很差,可是颇有可能的模型会不稳定。优化
怎么解决样本不均衡的问题?人工智能
一般的办法是对多的进行降采样。 好比说只有30%的正例,有70%是负例,第一对70%的负例里面进行一个降采样,不要所有的负例了。第二,创造一些新的正例样本,属性随机采样,就是说把正例样本的每一个属性对应的值随机采起点出来,组合出一个新的正例样原本,这样凡是涉及到人工建立的训练集一般不太好,可是它是没办法的办法,已经不均衡了,没有更多的训练集了。按理说用降采样,可是发现不光负例多,正例还特别少,才几十条正例这会这已经很难了,只要样本少,谁也帮不了,神仙也救不了,惟一能自救的方法就是重采样一下。适当的生成出一些新的训练集,但生成的东西并不必定能表明客观规律,这是没办法的事儿,确实少,也只能试一试。因此能够经过对少的样本进行重采样,经过对多的样本进行降采样,来必定程度上缓和咱们样本不均衡的问题。除此以外,使用决策树的方法。那么它对于样本不均衡,要比逻辑回归要坚固的多,鲁棒性要好得多,因此换句话说,须要选择其它的算法来解决这个问题。spa
除此以外,咱们引入一种叫softmax的方式,它比OVR对样本不均衡的问题要稍好一些,并且它的分类效果更好。它其实就是一个跟逻辑回归相似的一个专门解决多分类的模型,它有本身的判别函数,也有本身的损失函数,是逻辑回归的一种拓展,逻辑回归是softmax的一种特例。3d
若是如今只让用一个模型去判断一个5分类任务,这个模型要输出什么?至少得输出5个几率出来,才能判断。只输出两个几率,我怎么判断剩下3个?输出形式必定要出现5个几率。因而它特别简单,它就搞出了5组w,其实就有点神经网络的感受了。神经网络咱们还没讲,不过不要紧,你先有个大致的概念。之后咱们再会对神经网络里面softmax函数详细解释,由于它很重要。几乎能够说是任何多分类问题最后的一步。咱们这里就直到softmax就是一个单层的神经网络就能够了,如下关于神经网络解释softmax的问题听不懂不要紧,后面在神经网络里面会详细说的。我们说五分类,5组模型,W1,W2,W3,W4,W5,如今一个x扔进来以后,要同时交给每组W算出一个结果,获得了W1^Tx,W2^Tx,W3^Tx,W4^Tx,W5^Tx,接下来把获得的每个结果几率化输出,为:rest
,
,
,
,
code
在 softmax回归中,咱们解决的是多分类问题(相对于 logistic 回归解决的二分类问题),类标y能够取k个不一样的值(而不是两个)所以,对于训练集,咱们有
,(注意此处的类别下标从 1 开始,而不是 0)。对于给定的测试输入x,咱们想用假设函数针对每个类别j估算出几率值p(y=j|x),也就是说,咱们想估计x的每一种分类结果出现的几率。
所以,咱们的假设函数将要输出一个k维(k个类别)的向量来表示这k个估计的几率值。具体地说,咱们的假设函数h(θ)形式以下:
其中是模型的参数,
这一项对几率分布进行归一化,使得全部几率之和为 1。实际上就是把一个x(i)丢在一个hθ里面要输出一组几率,好比这个例子里面要输出5个几率,每一个几率实际上它的判别函数都是它们共用同一个分母,只不过度子部分不一样,第一个几率就是第一组w算出来分数扔到e的上面得出来的结果,每个都是每一组w对于同一个x(i)的运算结果,分母又是全部分子的加和,所以它们整体的加和必定是等于1的。这个就是softmax的判别函数。
为了方便起见,咱们一样使用符号θ来表示所有的模型参数,将θ用一个k*n的矩阵来表示,k个类别,n个属性值,每一类这这些属性上面都对应着一组参数。该矩阵是将每组按照行罗列起来获得的。以下所示:
有了这一组θ,咱们的h(x)就可使用了,那怎么获得最好的一组θ?仍是经过最大似然来推导损失函数。咱们先来看下示性函数的表示就是1,其取值规则为:1{值为真的表达式}=1,1{值为假的表达式} =0。举例来讲,表达式:1{2+2=4}的值为1 ,由于2+2=4是正确的值为真,因此1{2+2=4}的值为1。同理, 1{2+2=5}的值为 0。
回顾下逻辑回归的损失函数:
这个函数中,虽然每一项加和的部分是两部分yi*log h(x)+(1-yi)*log (1-h(x))组成,可是由于yi不是0就是1,前面在后面就没了,后面在前面就没了,因此对每一条样原本说就只能存活下来一项,这个是针对二分类来讲的。把其写成示性函数的表达就是:
解释下:好比一条样本标签真实值yi是0,根据咱们上面的描述yi*log h(x)+(1-yi)*log (1-h(x))这里面只能存在一项就是后面一项。而对于示性函数来讲这个里面j是累加到1,两个取值,j先为0的时候,yi=j=0为真。1{值为真的表达式}=1,因此当j为0的时候值保留下来,当j为1的时候yi=j=1≠0,1{值为假的表达式} =0,因此当j为1的时候值没有累加。所以真正每一条样本计算的就是其对应真实y的时候那一部分几率值。
而对于多分类来讲咱们须要像推导逻辑回归损失函数同样,把每一条样本预测正确的几率连乘,使得似然最大。那多分类的每一条样本预测正确的几率就是:
在Softmax回归中将x分类为类别j的几率为:
举例来讲,假如是3分类,这个预测就输出3个几率,也就是3个数,对每一条样原本说,其中第一个几率表明是我预测它最后类别是1的几率,第二个是表明我预测它类别为2的几率,第三个就是我预测它类别为3的几率,它实际的类别假如为1的话,我预测对了的几率是第一个数,第二个数仍是第三个数?应该是第一个数。就从里边挑出应该预测正确的几率放在这,这就是它正确的几率,由于对每个样原本说yi只能取一个值,因此里面的加和也只会存活下来一项。每一条样本yi等于多少其对应的hθ(x)的值就留下来。好比第一个样本真实分类是0,那就保留这一部分,第二个真实样本类别是1 ,那就保留
这一部分,第三个真实样本分类是2,那就保留
这一部分,损失函数只取决于预测对的那一项的几率,其它的几率其实损失函数角度是不关心的。因此它尽可能,想让训练集上所有预测的总正确率最大,就须要把每条数据被预测正确的几率给连乘起来,求最大似然,加个log,连乘变连加,而后加个负号就获得这个损失函数了。最后推导出来的softmax损失函数以下:
能够看到,Softmax代价函数与logistic 代价函数在形式上很是相似,只是Softmax损失函数中对类标记的k个可能值进行了累加。
对于J(θ)的最小化问题,当前尚未闭式解法。所以,咱们使用迭代的优化算法(例如梯度降低法,或 L-BFGS)。通过求导,咱们获得梯度公式以下:
有了上面的偏导数公式之后,咱们就能够将它代入到梯度降低法等算法中,来最小化J(θ)。例如,在梯度降低法的标准实现中,每一次迭代须要进行以下更新:
获得一组θ使得模型表现最好。此时获得θ就是softmax训练出来的结果。因此无论它是什么损失函数,你总能够交给sgd或者l-bfgs进行最小化,获得一组θ使得模型表现最好。
对于softmax,你它的本质是把好几个逻辑回归塞到一块儿去了,可是它判别函数又变了变,原来是1/{1+exp(-z)},如今变成了e的z求和,有多少个z就求和多少次,加起来以后当分母,而后分子为对应部分预测的几率,这样它们输出的每一个几率就都进行了归一化。
softmax有一个有趣的特色:softmax的形式是有几个分类,就有几组w向量,好比三类,最终训练出来的参数实际上就是θ1,θ2,θ3,原来逻辑回归是一组θ,如今是三组θ。你把这三组θ都减去一个相同的向量φ,好比φ全是1。 假如这θ长度为五,φ是五个1也好,五个2也好,12345也好,只要把每个θ的向量都减去同一个φ,你就会发现他们预测结果没有任何变化。假如我拿每个θ都减去了同一个φ,我把θj-φ看成原来的θj,即:
经过上面公式展开,也就是说减φ与不减φ不影响最终的预测结果。这说明softmax参数有冗余,既然随便减一个φ能够,那我都给他减一个θ1,也能够,那么就是把θ1全变成零了,θ2变成θ2-θ1了,θ3变成θ3-θ1了。因此实际上咱们只须要保存两组参数就够了。
咱们再来看下Softmax回归与Logistic 回归的关系:当类别数k=2时,softmax 回归退化为 logistic 回归。这代表 softmax 回归是 logistic 回归的通常形式。具体地说,当k=2时,softmax 回归的假设函数为:
利用softmax回归参数冗余的特色,θ1全置为0,θ2变成θ2-θ1:那么h(x)会输出两个结果。即:
咱们就会发现 softmax 回归器预测其中一个类别的几率为,另外一个类别的几率就是
此时的softmax回归就是参数为θ2-θ1的逻辑回归。