目录
老饼讲解:一步一步上手学习

【模型】一篇入门之-softmax逻辑回归

作者 : 老饼 发表日期 : 2025-12-16 23:47:39 更新日期 : 2026-05-10 15:21:06
老饼讲解-简单易懂,干货满满,爽过嗦螺!


许多人都会问,逻辑回归模型能做多分类吗?那当然是可以的,不过当它做多分类时,一般就称为softmax回归,也就是说,softmax回归可以认为是逻辑回归的多分类版本。今天我们就来说说softmax回归的模型原理,包括softmax回归的模型表达式、损失函数、以及具体的代码实现例子。

一、softmax回归

softmax回归与逻辑回归是类似的,只不过逻辑回归用sigmoid函数,而softmax回归用的是softmax函数,使得它解决多分类问题,闲话少说,直接看看它是怎么一回事吧。

1.1. softmax回归是什么

在逻辑回归中,我们一般把wx作为样本属于类别1的判别值,然后用sigmoid函数,把它转换为概率。

而在softmax回归中,是类似的,但由于它是多类别,所以它如下处理:

softmax回归

如图所示,它把作为类别0的判别值,作为类别1的判别值,如此类推,作为类别i的判别值,这样我们就可以得到各个类别的判别值,然后再通过softmax函数,来将各个类别的判别值转换为概率就可以了。

1.2. softmax回归-模型表达式

softmax回归的模型表达式如下:

其中,  

好了,有的同学可能还不太熟悉softmax函数,没关系,我们先来用一个计算例子来看看softmax回归模型是怎么计算的,就容易理解了。

1.2. softmax回归的计算例子

下面来个具体的例子,设有2个输入,然后判别属于类别1、2、3的哪一个。

设:

这里(W的第i行)、分别代表第i个类别的判别权重和阈值

则,各类别的判别值如下:


 进一步地,用softmax来将判别值g转换为概率值p,如下:

 

二、softmax例子

好了,softmax回归就是这么一回事了,那下面我们就拉点数据来玩玩它吧。

2.1. softmax回归例子-数据

我们就以鸢尾花iris数据为例好了,鸢尾花数据共有150条数据,包含了3个类别的鸢尾花样本,每个样本有4个特征,如下:

鸢尾花iris数据

好了,我们就构建一个softmax回归来识别鸢尾花的类别吧。

2.2. softmax回归例子-代码

在python中,只需用sklearn的LogisticRegression函数就能实现softmax回归了,眼尖的同学会发现,这不正是实现逻辑回归时使用的函数吗?没错,因为softmax回归本身就被认为是多类别逻辑回归呀!

好了,具体代码示例如下:

"""
本代码展示如何用sklearn实现softmax回归
本代码来自《老饼讲解-机器学习》 www.bbblearn.com
"""
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris

iris = load_iris()                             # 加载iris数据
X    = iris.data                               # 特征变量x
y    = iris.target                             # 类别y
xmin = X.min(axis=0)                           # x的最小值
xmax = X.max(axis=0)                           # x的最大值
Xn   = (X-xmin)/(xmax-xmin)                    # 将x进行归一化
clf  = LogisticRegression(random_state=0)      # 初始化逻辑回归模型       
clf.fit(Xn,y)                                  # 训练模型
pred_y   = clf.predict(Xn)                     # 预测类别
prob_y   = clf.predict_proba(Xn)               # 预测类别概率
w = clf.coef_                                  # 模型系数(对应归一化数据)
b = clf.intercept_                             # 模型阈值(对应归一化数据)
print( "\n模型系数w:\n",w)                     # 打印模型权重
print( "\n模型阈值b:\n",b)                     # 打印模型阈值

代码运行结果如下:

 softmax模型的权重和阈值

这就是我们 softmax模型中的权重和阈值了。

比较值得注意的是,为了令训练更顺利,我们这里对X进行了归一化,所以模型需测时,也需要先对样本进行归一化,再进行预测哦。

总结

好了,这节我们学习了softmax回归,把它看作多类别的逻辑回归就好了。其实都是先用WX作为判别值,然后再把判别值转换为概率,比较值得注意的是,它与逻辑回归一样,在建模时,最好先把数据进行归一化一下,再进行训练,如果不做归一化,有时训练会不成功。



图标 评论
添加评论