GREAT THANKS TO:http://cs231n.github.io/linear-classify/#softmax

  • 1..softmax分类

    • SVM和softmax是两大常用的分类方法,softmax分类器是二项逻辑回归在多分类问题上的应用.
    • 多项逻辑回归:P(Y=k|x)=exp(ωkx)1+∑k=1K−1exp(ωkx) ,k=1,2,..,KP(Y=k|x)=exp(ωkx)1+∑k=1K−1exp(ωkx),k=1,2,..,KP(Y=k|x)=\frac{exp(\omega_kx)}{1+\sum\limits_{k=1}^{K-1}exp(\omega_kx)} \space,\hspace{0.2in}k=1,2,..,KP(Y=K|x)=11+∑k=1K−1exp(ωkx)P(Y=K|x)=11+∑k=1K−1exp(ωkx)P(Y=K|x)=\frac{1}{1+\sum\limits_{k=1}^{K-1}exp(\omega_kx)}
    • 在多分类支持向量机中,输出的评分是未经过修剪的,没有一个直观的解释。在softmax分类方法中,其输出是归一化的类的概率,有了直观的意义。
    • 其评分函数为:f(ω)=ωx+bf(ω)=ωx+b\hspace{0.2in} f(\omega)=\omega x+b
    • softmax分类方法的损失函数:Li=−log(efyi∑jefj)也可写成Li=−fyi+log∑jefjLi=−log⁡(efyi∑jefj)也可写成Li=−fyi+log⁡∑jefj\hspace{0.2in} L_i = -\log\left(\frac{e^{f_{y_i}}}{ \sum_j e^{f_j} }\right) \hspace{0.2in} \text{也可写成} \hspace{0.2in} L_i = -f_{y_i} + \log\sum_j e^{f_j}
    • 信息论观点的解释:实际的分布p和估计的分布q定义的交叉熵为:H(p,q)=−∑xp(x)logq(x)H(p,q)=−∑xp(x)log⁡q(x)\hspace{0.2in}H(p,q) = - \sum_x p(x)\log q(x)\hspace{0.2in},在softmax分类方法中,实际的分布p就是p=[0,1,...]只有在yiyiy_i处的概率为1其余为0,估计的分布就是q=efyi/∑jefjq=efyi/∑jefjq = e^{f_{y_i}} / \sum_j e^{f_j},所以softmax分类方法就是要最小化上述分布组成的交叉熵。交叉熵可以写成熵和相对熵(KL散度)的和,H(p,q)=H(p)+DKL(p||q)H(p,q)=H(p)+DKL(p||q)H(p,q) = H(p) + D_{KL}(p||q)。
    • 概率观点的解释:P(yi∣xi;W)=efyi∑jefjP(yi∣xi;W)=efyi∑jefjP(y_i \mid x_i; W) = \frac{e^{f_{y_i}}}{\sum_j e^{f_j} }\hspace{0.2in},从此式中可得,其输出是W与相应的X做运算得到的类别yiyiy_i的概率。从概率的角度来说,softmax损失函数是最小化正确类的负对数似然,也就是说,对正确的类进行最大似然估计,这样也可以把正则化项R(W)R(W)R(W)看成是关于W的先验概率分布,若使用的是L2L2L_2正则化,则W是服从高斯分布的。这样就是在通过最大化后验概率来分类的。
    • 实际中的问题:数值稳定性:因为这里面用到了指数运算efyiefyie^{f_{y_i}},有可能会产生很大的值,这会导致计算机在运算的时候不稳定。解决这个问题常用的方法是efyi∑jefj=CefyiC∑jefj=efyi+logC∑jefj+logCefyi∑jefj=CefyiC∑jefj=efyi+log⁡C∑jefj+log⁡C\frac{e^{f_{y_i}}}{\sum_j e^{f_j}}= \frac{Ce^{f_{y_i}}}{C\sum_j e^{f_j}}= \frac{e^{f_{y_i} + \log C}}{\sum_j e^{f_j + \log C}},在这里,令logC=−maxjfjlog⁡C=−maxjfj\log C = -\max_j f_j。
    • 可能的困惑:在多分类支持向量机中使用的合页损失函数,也称为最大间隔损失(max-margin loss),而,softmax分类器使用的是交叉熵损失函数,将原始的类别评分压缩到了归一化的和为1的正值。不能称之为softmax损失,因为softmax函数在此只是相当于激励函数。
  • 2.SVM和softmax分类的比较

    • 上图中比较了使用同一个评分函数的,svm和softmax的输出值和损失值。值得注意的是这些损失值不具备可比性,只在当前的分类器中损失值的比较才有意义。
    • softmax函数提供了每个类的“概率”,SVM给出了未经裁剪不好解释的每个类的评分,但是softmax给出了每个类可能的“概率”。例如,SVM可能给出[12.5,0.6,-23.0]作为类“猫”,“狗”和“船”的评分。softmax给出的是这三个类对应的概率[0.9,0.09,0.01],可以将其当成对应的类的置信水平。但是,在这里之所以给概率加上了引号是因为,这里的概率还取决于正则参数λλ\lambda的使用。例如,假如说某三个类的对数可能性对应输出为[1,-2,0],则其sotfmax计算的结果为:[1,−2,0]→[e1,e−2,e0]=[2.71,0.14,1]→[0.7,0.04,0.26][1,−2,0]→[e1,e−2,e0]=[2.71,0.14,1]→[0.7,0.04,0.26][1, -2, 0] \rightarrow [e^1, e^{-2}, e^0] = [2.71, 0.14, 1] \rightarrow [0.7, 0.04, 0.26]现在如果正则化参数λλ\lambda变大,则权重参数W将被惩罚的更厉害,这样得到的权值也就更小,假如权重小了一半则f输出为[0.5,-1,0],则softmax的计算结果为:[0.5,−1,0]→[e0.5,e−1,e0]=[1.65,0.37,1]→[0.55,0.12,0.33][0.5,−1,0]→[e0.5,e−1,e0]=[1.65,0.37,1]→[0.55,0.12,0.33][0.5, -1, 0] \rightarrow [e^{0.5}, e^{-1}, e^0] = [1.65, 0.37, 1] \rightarrow [0.55, 0.12, 0.33]可见正则化参数调大时,softmax输出的概率更趋于一致。所以啊,softmax输出的概率也同SVM的分数一样,只是表示一个置信水平,在原理上也没有可解释性。
    • 实际应用中SVM和sotfmax通常拿来比较,SVM和softmax的分类性能区别是很小的。SVM使用的是更局部的目标函数数, 可以把其当成缺点也可以当成特点。SVM不考虑单个类别的细节,像[10,-100,-100]和[10,9,9]则对于Δ=1Δ=1\Delta = 1的支持向量机是相同的,因为最大间隔已经满足了,其损失值就为0。但是,对softmax分类器来说这两种情况就不同了,很明显[10,9,9]的损失值更大。softmax分类器永远不会对其输出的分数满意,它会不停的要求提高正确类的概率降低错误类的概率,减小损失值。但是,SVM却不是这样,只要误分类的评分比正确分类的评分小最大间隔那么大就OK了,这也可以被当作一个特殊的功能,譬如为了训练一个货车和汽车的分类器,那么这个分类器应该致力于将汽车和货车分开而不受到已经评分很低的青蛙的影响(这很可能已经聚集为另一个不同的类了)。
  • 3.程序实现:

数据获取地址同上一篇多分类支持向量机

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sun Jul 29 17:15:25 2018
@author: rd
"""
from __future__ import division
import numpy as np
"""
This dataset is part of MNIST dataset,but there is only 3 classes,
classes = {0:'0',1:'1',2:'2'},and images are compressed to 14*14
pixels and stored in a matrix with the corresponding label, at the
end the shape of the data matrix is
num_of_images x 14*14(pixels)+1(lable)
"""
def load_data(split_ratio):tmp=np.load("data216x197.npy")data=tmp[:,:-1]label=tmp[:,-1]mean_data=np.mean(data,axis=0)train_data=data[int(split_ratio*data.shape[0]):]-mean_datatrain_label=label[int(split_ratio*data.shape[0]):]test_data=data[:int(split_ratio*data.shape[0])]-mean_datatest_label=label[:int(split_ratio*data.shape[0])]return train_data,train_label,test_data,test_label"""compute the cross entropy loss without using vector operation,
While dealing with a huge dataset,this will have low efficiency
X's shape [n,14*14+1],Y's shape [n,],W's shape [num_class,14*14+1]"""
def lossAndGradNaive(X,Y,W,reg):dW=np.zeros(W.shape)loss = 0.0num_class=W.shape[0]num_X=X.shape[0]for i in range(num_X):scores=np.dot(W,X[i])cur_scores=scores[int(Y[i])]loss+=-cur_scores+np.log(np.sum(np.exp(scores)))for j in range(num_class):if j==int(Y[i]):dW[int(Y[i]),:] += -X[i]+np.exp(cur_scores)/np.sum(np.exp(scores))*X[i]else:dW[j,:]+=np.exp(scores[j])/np.sum(np.exp(scores))*X[i]loss/=num_XdW/=num_Xloss+=reg*np.sum(W*W)dW+=2*reg*Wreturn loss,dWdef predict(X,W):X=np.hstack([X, np.ones((X.shape[0], 1))])Y_=np.dot(X,W.T)Y_pre=np.argmax(Y_,axis=1)return Y_predef accuracy(X,Y,W):Y_pre=predict(X,W)acc=(Y_pre==Y).mean()return accdef model(X,Y,alpha,steps,reg):X=np.hstack([X, np.ones((X.shape[0], 1))])W = np.random.randn(3,X.shape[1]) * 0.0001for step in range(steps):loss,grad=lossAndGradNaive(X,Y,W,reg)W-=alpha*gradprint"The {} step, loss={}, accuracy={}".format(step,loss,accuracy(X[:,:-1],Y,W))return Wtrain_data,train_label,test_data,test_label=load_data(0.2)
W=model(train_data,train_label,0.0001,25,0.5)
print"Test accuracy of the model is {}".format(accuracy(test_data,test_label,W))

refer
[1] https://zhuanlan.zhihu.com/p/31562236

softmax分类(多项逻辑回归)的Pyhon实现及其与SVM的比较相关推荐

  1. R语言多项逻辑回归-因变量是无序多分类

    因变量是无序多分类资料(>2)时,可使用多分类逻辑回归(multinomial logistic regression). 使用课本例16-5的数据,课本电子版及数据已上传到QQ群,自行下载即可 ...

  2. softmax分类器_[ML] 逻辑回归与 Softmax 回归

    Logistic Regression (LR) 译为逻辑回归,但实际上这是一种分类模型(二分类或多分类).下面精要地把模型中的核心概念.推导梳理一下.本文主要内容如下: 逻辑回归的概率模型 逻辑回归 ...

  3. 逻辑回归和多项逻辑回归

    文章目录 一.逻辑回归 逻辑回归模型 极大似然估计法求w 损失函数 梯度下降求解w 二.多项逻辑回归 三.问题 1.逻辑回归如何处理多标签问题? 2.为什么不用平方误差(MSE)作为Logistic回 ...

  4. 神经网络(二):Softmax函数与多元逻辑回归

    文章目录 一. Softmax函数与多元逻辑回归 二.广告时间 一. Softmax函数与多元逻辑回归 为了之后更深入地讨论神经网络,本节将介绍在这个领域里很重要的softmax函数,它常被用来定义神 ...

  5. R语言分类模型:逻辑回归模型LR、决策树DT、推理决策树CDT、随机森林RF、支持向量机SVM、Rattle可视化界面数据挖掘、分类模型评估指标(准确度、敏感度、特异度、PPV、NPV)

    R语言分类模型:逻辑回归模型LR.决策树DT.推理决策树CDT.随机森林RF.支持向量机SVM.Rattle可视化界面数据挖掘.分类模型评估指标(准确度.敏感度.特异度.PPV.NPV) 目录

  6. ML:基于自定义数据集利用Logistic、梯度下降算法GD、LoR逻辑回归、Perceptron感知器、SVM支持向量机、LDA线性判别分析算法进行二分类预测(决策边界可视化)

    ML:基于自定义数据集利用Logistic.梯度下降算法GD.LoR逻辑回归.Perceptron感知器.支持向量机(SVM_Linear.SVM_Rbf).LDA线性判别分析算法进行二分类预测(决策 ...

  7. R语言编写自定义函数计算分类模型评估指标:准确度、特异度、敏感度、PPV、NPV、数据数据为模型预测后的混淆矩阵、比较多个分类模型分类性能(逻辑回归、决策树、随机森林、支持向量机)

    R语言编写自定义函数计算分类模型评估指标:准确度.特异度.敏感度.PPV.NPV.数据数据为模型预测后的混淆矩阵.比较多个分类模型分类性能(逻辑回归.决策树.随机森林.支持向量机) 目录

  8. sklearn分类算法(逻辑回归、朴素贝叶斯、K近邻、支持向量机 、决策树、随机森林 )的使用

    scikit-learn机器学习的分类算法包括逻辑回归.朴素贝叶斯.KNN.支持向量机.决策树和随机森林等.这些模块的调用形式基本一致,训练用fit方法,预测用predict方法.用joblib.du ...

  9. 图像识别(九)| 彻底搞懂SoftMax分类的底层逻辑

    很多同学在做深度学习时,都会遇到难以理解的算法,SoftMax肯定是其中一个.初学者大都对它一知半解,只知道SoftMax可以用来做分类,输出属于某个类别的概率. 但是,为什么要用SoftMax呢?这 ...

最新文章

  1. Kubernetes 使用 ceph-csi 消费 RBD 作为持久化存储
  2. oh-my-robot
  3. POJ 3237 Tree (树链剖分)
  4. jQuery取得select选择的文本与值
  5. vorwerk 机器人_福维克(Vorwerk)--吸尘器行业的quot;安利quot;
  6. 服务中添加mysql服务_Windows平台下在服务中添加MySQL
  7. nrf51822-广播模式
  8. git删除本地分支、删除远程分支 复制分支
  9. Hadoop Ecosystem解决方案---数据仓库
  10. protobuf 数据解析的2种方法
  11. Vue 之 slot(插槽)
  12. ASP.NET2.0 菜单控件menu的动态静态用法
  13. [20] 鼓状物(Drum)图形的生成算法
  14. 使用 Kubeadm 安装部署 Kubernetes 1.12.1 集群
  15. win7 时间服务器地址修改,win7 时间服务器地址修改
  16. windows防火墙ntp服务器_Windows Server 2008 R2 NTP服务器
  17. 测量学8_大比例尺地形图测绘及地形图应用
  18. 详解使用SSH远程连接Ubuntu服务器系统
  19. example包下载
  20. 基于matlab的最小二乘法曲线拟合实现,最小二乘法曲线拟合MATLAB实现

热门文章

  1. 2018ACM-ICPC徐州赛区网络赛: D. Easy Math(Min_25筛)
  2. bzoj 3377: [Usaco2004 Open]The Cow Lineup 奶牛序列
  3. bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序(置换)
  4. 实验总结:Java+oracle数据库实现图书馆管理系统
  5. Quartus17下载程序进FPGA
  6. 基于tkinter的简易加减乘除计算器
  7. zedboard的DDR3型号MT41K128M16HA
  8. ajax获取checkbox循环出来的值_Django:前后端异步加载数据(循环大法)
  9. 普元云计算-云计算平台项目团队组织架构与缘起
  10. SVN服务器的本地搭建和使用