一个例子搞懂softmax regression

2024-04-30 18:38

本文主要是介绍一个例子搞懂softmax regression,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

softmax regression简介

logistic regression (LR) 常用于二分类问题。对于多分类问题,使用softmax regression (SMR) 则是一个更好的选择,SMR也是逻辑回归在多分类问题上的一个推广。

下图分别显示了LR和SMR的训练过程和差别所在:
在这里插入图片描述

为了适应多分类问题,SMR使用softmax函数( Φ \Phi Φ)代替了原来的sigmoid函数。在SMR中,我们定义第 i i i个样本 X i X_i Xi属于类别 j j j的概率为:
P ( y = j ∣ X i ) = Φ ( z i ) = e z i j ∑ k = 0 K e z i k , (1) P(y=j|X_i)=\Phi (z_{i})=\frac{e^{z^j_{i}}}{\sum_{k=0}^Ke^{z^k_{i}}},\tag{1} P(y=jXi)=Φ(zi)=k=0Kezikezij,(1)
其中, z i j = w 0 j x 0 + w 1 j x 1 + . . . + w m j x m = ∑ l = 0 m w l j x l = W j T X i , (2) z^j_i=w^j_0 x_0+w^j_1 x_1+...+w^j_m x_m=\sum_{l=0}^m w_l^j x_l=W^T_jX_i, \tag{2} zij=w0jx0+w1jx1+...+wmjxm=l=0mwljxl=WjTXi,(2)
其中, W j T W^T_j WjT对应第j个类的样本系数。根据(1)式可以分别计算样本 X i X_i Xi属于 K K K个类的概率,且概率之和为1。现在问题来了,怎么根据式(1)和(2)来建立一个准确的SMR模型呢?我们不妨使用一个简单的例子来进行说明。

一个简单的例子

假设我们有一个包含4个训练样本的训练集,这4个样本包含2个属性并分别属于三个类
(见下表)。

样本编号样本属性样本类别
X 0 X_0 X0(0.1,0.5)0
X 1 X_1 X1(1.1,2.3)1
X 2 X_2 X2(-1.1,-2.3)2
X 3 X_3 X3(-1.5,-2.5)2

望将这四个样本的类标签编码为更容易使用的格式:
{ 1 0 0 0 1 0 0 0 1 0 0 1 } \left\{ \begin{matrix} 1 & 0 & 0 \\ 0& 1& 0 \\ 0& 0& 1 \\ 0& 0&1\\ \end{matrix} \right\} 100001000011
属于类别0的样本(第一行)在第一个单元格中为1,属于类别1的样本(第二行)在第二个单元格中为1,以此类推。
I n p u t s D = { 0.1 0.5 1.1 2.3 − 1.1 − 2.3 − 1.5 − 2.5 } Inputs\ D=\left\{ \begin{matrix} 0.1 & 0.5 \\ 1.1& 2.3 \\ -1.1& -2.3 \\ -1.5& -2.5\\ \end{matrix} \right\} Inputs D=0.11.11.11.50.52.32.32.5
初始化样本系数
W = { 0.1 0.2 0.3 0.1 0.2 0.3 } W=\left\{ \begin{matrix} 0.1 & 0.2 &0.3 \\ 0.1 & 0.2 &0.3 \\ \end{matrix} \right\} W={0.10.10.20.20.30.3}
偏差项
b i a s = { 0.01 0.1 0.1 } bias=\left\{ \begin{matrix} 0.01 & 0.1& 0.1\\ \end{matrix} \right\} bias={0.010.10.1}
加入了常数项1的D
I n p u t s D = { 1 0.1 0.5 1 1.1 2.3 1 − 1.1 − 2.3 1 − 1.5 − 2.5 } Inputs\ D=\left\{ \begin{matrix} 1&0.1 & 0.5 \\ 1& 1.1& 2.3 \\ 1& -1.1& -2.3 \\ 1& -1.5& -2.5\\ \end{matrix} \right\} Inputs D=11110.11.11.11.50.52.32.32.5
加入了偏差项的 W W W
W = { 0.01 0.1 0.1 0.1 0.2 0.3 0.1 0.2 0.3 } W=\left\{ \begin{matrix} 0.01 & 0.1& 0.1\\ 0.1 & 0.2 &0.3 \\ 0.1 & 0.2 &0.3 \\ \end{matrix} \right\} W=0.010.10.10.10.20.20.10.30.3

计算系数 W W W与样本属性 D D D的乘积:
Z = W D = { 0.07 0.22 0.28 0.35 0.78 1.12 − 0.33 − 0.58 − 0.92 − 0.39 − 0.7 − 1.1 } Z=WD=\left\{ \begin{matrix} 0.07 & 0.22& 0.28\\ 0.35 & 0.78& 1.12\\ -0.33 & -0.58& -0.92\\ -0.39 & -0.7& -1.1\\ \end{matrix} \right\} Z=WD=0.070.350.330.390.220.780.580.70.281.120.921.1
回顾一下公式(1),根据公式(1),我们就可以计算每个样本属于每个类别的概率:
s o f t m a x = { 0.2945 0.3422 0.3633 0.2129 0.3273 0.4598 0.4286 0.3338 0.2376 0.4494 0.3296 0.2210 } softmax=\left\{ \begin{matrix} 0.2945 & 0.3422& 0.3633\\ 0.2129 & 0.3273& 0.4598\\ 0.4286 & 0.3338&0.2376\\ 0.4494 & 0.3296& 0.2210\\ \end{matrix} \right\} softmax=0.29450.21290.42860.44940.34220.32730.33380.32960.36330.45980.23760.2210
我们看到softmax矩阵中的每一行代表一个样本,每一列代表一个类别,每一行的元素相加为1。(样本1属于类别0的概率为0.2945,属于类别1的概率为0.3422,以此类推)

根据softmax矩阵,我们得出4个样本的预测类别分别是[2,2,0,0]。显然这个预测结果错的离谱,因为正确答案是[0,1,2,2]。这是因为我们还没有对系数 W W W进行训练,训练方法可以使用梯度下降法。但是使用梯度下降法之前,我们还得定义一下我们需要最小化的损失函数 J J J
J ( W ) = 1 n ∑ i = 1 n H ( T i , O i ) , (3) J(W)=\frac{1}{n}\sum_{i=1}^nH(T_i,O_i),\tag{3} J(W)=n1i=1nH(Ti,Oi),(3)
这是n个训练样本的所有交叉熵的平均值,其中 T i T_i Ti表示第 i i i个样本的真实标签, O i O_i Oi表示第 i i i个样本的预测概率(不是预测的类别)。交叉熵函数定义为 :
H ( T i , O i ) = − ∑ m T i ∗ l o g ( O i ) . (4) H(T_i,O_i)=-\sum_m T_i*log(O_i).\tag{4} H(Ti,Oi)=mTilog(Oi).(4)
交叉熵计算出来为[1.2225, 1.1169, 1.4372, 1.5098](可以自己验证一下)。
为了最下化损失函数,我们需要计算损失函数的梯度: ∇ w j J ( W ) , \nabla_{w_j}J(W), wjJ(W),
然后我们沿着梯度的反方向来调整样本权重系数:
w j = w j − α ∇ w j J ( W ) , j ∈ { 0 , 1 , . . . , K } . (5) w_j=w_j-\alpha\nabla_{w_j}J(W), j\in\{0,1,...,K\}.\tag{5} wj=wjαwjJ(W),j{0,1,...,K}.(5)

使用梯度下降法,我们迭代地更新权重矩阵,直到满足设置的停止条件(达到最大迭代次数或迭代前后损失函数的值之差小于设定的阈值)。

这篇文章完全是参考一篇英文博客,符号我做了一些调整,方便以后需要的时候复习,原文地址https://www.kdnuggets.com/2016/07/softmax-regression-related-logistic-regression.html 不用翻墙

这篇关于一个例子搞懂softmax regression的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/949627

相关文章

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

JavaFX环境的搭建和一个简单的例子

之前在网上搜了很多与javaFX相关的资料,都说要在Eclepse上要安装sdk插件什么的,反正就是乱七八糟的一大片,最后还是没搞成功,所以我在这里写下我搭建javaFX成功的环境给大家做一个参考吧。希望能帮助到你们! 1.首先要保证你的jdk版本能够支持JavaFX的开发,jdk-7u25版本以上的都能支持,最好安装jdk8吧,因为jdk8对支持JavaFX有新的特性了,比如:3D等;

CSP-J基础之数学基础 初等数论 一篇搞懂(一)

文章目录 前言声明初等数论是什么初等数论历史1. **古代时期**2. **中世纪时期**3. **文艺复兴与近代**4. **现代时期** 整数的整除性约数什么样的整数除什么样的整数才能得到整数?条件:举例说明:一般化: 判断两个数能否被整除 因数与倍数质数与复合数使用开根号法判定质数哥德巴赫猜想最大公因数与辗转相除法计算最大公因数的常用方法:举几个例子:例子 1: 计算 12 和 18

javaScript日期相加减例子

当前时间加上2天 var d = new Date(“2015-7-31”); d.setDate(d.getDate()+2); var addTwo=d.getFullYear()+”年”+(d.getMonth()+1)+”月”+d.getDate()+”日”; “控制台输出===============”+”当前日期加2天:”+addTwo; 使用这种方法,月份也会给你计算.

CSP-J基础之数学基础 初等数论 一篇搞懂(二)

文章目录 前言算术基本定理简介什么是质数?举个简单例子:重要的结论:算术基本定理公式解释:举例: 算术基本定理的求法如何找出质因数:举个简单的例子: 重要的步骤:C++实现 同余举个例子:同余的性质简介1. 同余的自反性2. 同余的对称性3. 同余的传递性4. 同余的加法性质5. 同余的乘法性质 推论 总结 前言 在计算机科学和数学中,初等数论是一个重要的基础领域,涉及到整数

设计模式大全和详解,含Python代码例子

若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是设计模式的简要介绍和 Python 代码示例,涵盖主要的创建型、结构型和行为型模式。 一、创建型模式 1. 单例模式 (Singleton

JSP 简单表单显示例子

<html><!--http://localhost:8080/test_jsp/input.html --><head><meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"><title>input页面</title></head><body><form action="input.jsp" method

shell循环sleep while例子 条件判断

i=1# 小于5等于时候才执行while [ ${i} -le 5 ]doecho ${i}i=`expr ${i} + 1`# 休眠3秒sleep 3doneecho done 参考 http://c.biancheng.net/cpp/view/2736.html

【ReactJS】通过一个例子学习React组件的生命周期

源代码 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Reac