当前位置: 首页 > news >正文

SoftMax多分类器原理及代码理解

关于多分类

我们常见的逻辑回归、SVM等常用于解决二分类问题,对于多分类问题,比如识别手写数字,它就需要10个分类,同样也可以用逻辑回归或SVM,只是需要多个二分类来组成多分类,但这里讨论另外一种方式来解决多分类——SoftMax。

SoftMax模型

Softmax回归模型是logistic回归模型在多分类问题上的推广,当分类数为2的时候会退化为Logistic分类。.在多分类问题中,类标签 y 可以取两个以上的值。 Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。Softmax回归是有监督的。

在logistic回归中,训练集由 m 个已标记的样本构成:

,,由于logistic回归是针对二分类问题的,因此类标记 y^{(i)}\in \left\{ 0,1 \right\}

假设函数如下:

训练模型参数 \theta ,使其能够最小化代价函数:

对于给定的测试输入 x ,用假设函数针对每一个类别 j 估算出概率值 p(y=j|x) ,即,估计 x 的每一种分类结果出现的概率。假设函数将要输出 一个 k 维的向量来表示这 k 个估计的概率值。假设函数 h_{\theta}(x) 形式如下:



代价函数

上述公式是logistic回归代价函数的推广。logistic回归代价函数可以改为:

 

Softmax代价函数与logistic 代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的 k 个可能值进行了累加。注意在Softmax回归中将 x 分类为类别 j 的概率为:

一般使用梯度下降优化算法来最小化代价函数,而其中会涉及到偏导数,即,则求偏导,得到代价函数对参数权重的梯度就可以优化了。


 

例子

从下图看,神经网络中包含了输入层,然后通过两个特征层处理,最后通过softmax分析器就能得到不同条件下的概率,这里需要分成三个类别,最终会得到y=0、y=1、y=2的概率值。

 

继续看下面的图,三个输入通过softmax后得到一个数组[0.05 , 0.10 , 0.85],这就是soft的功能。

计算过程直接看下图,其中即为,三个输入的值分别为3、1、-3,的值为20、2.7、0.05,再分别除以累加和得到最终的概率值,0.88、0.12、0。

这里写图片描述

 可以看到它有多个值,所有值加起来刚好等于1,每个输出都映射到了0到1区间,可以看成是概率问题。

为多个输入,训练其实就是为了逼近最佳的


 使用场景

在多分类场景中可以用softmax也可以用多个二分类器组合成多分类,比如多个逻辑分类器或SVM分类器等等。该使用softmax还是组合分类器,主要看分类的类别是否互斥,如果互斥则用softmax,如果不是互斥的则使用组合分类器。

 参考文献:

https://www.cnblogs.com/hellcat/p/7220536.html?utm_source=itdadao&utm_medium=referral 

 

转载于:https://www.cnblogs.com/wangyarui/p/8670769.html

相关文章:

  • BugkuCTF web基础$_GET
  • Android逆向之旅---静态方式分析破解视频编辑应用「Vue」水印问题
  • 2017-12-24 手机编程环境初尝试-用AIDE开发Android应用
  • 2018 年第一季度报告:JavaScript 仍是最热门语言
  • Windows 7 用户已开始收到停止支持的提醒
  • 将用Axis2编写的Web Service项目打包成aar包
  • 微信端web页面传值
  • 知识阅读的好处你都了解吗?芒果xo来告诉你答案
  • git 常用命令
  • 开源一个自用的Android事件分发中心库,实现类似系统广播功能。
  • 九九乘法表
  • CentOS 7 LNMP部署—php
  • 利用原生javascript完成倒计时
  • pycharm 设置py文件的默认模版头部信息
  • 关于stackoverflow网页加载很慢的解决办法
  • 【Leetcode】101. 对称二叉树
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • hexo+github搭建个人博客
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • eclipse的离线汉化
  • js递归,无限分级树形折叠菜单
  • pdf文件如何在线转换为jpg图片
  • Redis中的lru算法实现
  • session共享问题解决方案
  • SpingCloudBus整合RabbitMQ
  • SQLServer之创建显式事务
  • Sublime text 3 3103 注册码
  • Vue.js源码(2):初探List Rendering
  • 编写高质量JavaScript代码之并发
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 服务器之间,相同帐号,实现免密钥登录
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 悄悄地说一个bug
  • 驱动程序原理
  • 试着探索高并发下的系统架构面貌
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • UI设计初学者应该如何入门?
  • ​ArcGIS Pro 如何批量删除字段
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • # centos7下FFmpeg环境部署记录
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • $.ajax中的eval及dataType
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (3)选择元素——(17)练习(Exercises)
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (三分钟)速览传统边缘检测算子
  • (四)JPA - JQPL 实现增删改查
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)关于pipe()的详细解析
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)