老饼讲解:一步一步上手学习
许多人都会问,逻辑回归模型能做多分类吗?那当然是可以的,不过当它做多分类时,一般就称为softmax回归,也就是说,softmax回归可以认为是逻辑回归的多分类版本。今天我们就来说说softmax回归的模型原理,包括softmax回归的模型表达式、损失函数、以及具体的代码实现例子。
softmax回归与逻辑回归是类似的,只不过逻辑回归用sigmoid函数,而softmax回归用的是softmax函数,使得它解决多分类问题,闲话少说,直接看看它是怎么一回事吧。
在逻辑回归中,我们一般把wx作为样本属于类别1的判别值,然后用sigmoid函数,把它转换为概率。
而在softmax回归中,是类似的,但由于它是多类别,所以它如下处理:

如图所示,它把作为类别0的判别值,作为类别1的判别值,如此类推,作为类别i的判别值,这样我们就可以得到各个类别的判别值,然后再通过softmax函数,来将各个类别的判别值转换为概率就可以了。
softmax回归的模型表达式如下:
其中,
好了,有的同学可能还不太熟悉softmax函数,没关系,我们先来用一个计算例子来看看softmax回归模型是怎么计算的,就容易理解了。
下面来个具体的例子,设有2个输入,然后判别属于类别1、2、3的哪一个。
设:
这里(W的第i行)、分别代表第i个类别的判别权重和阈值
则,各类别的判别值如下:
进一步地,用softmax来将判别值g转换为概率值p,如下:
好了,softmax回归就是这么一回事了,那下面我们就拉点数据来玩玩它吧。
我们就以鸢尾花iris数据为例好了,鸢尾花数据共有150条数据,包含了3个类别的鸢尾花样本,每个样本有4个特征,如下:

好了,我们就构建一个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模型中的权重和阈值了。
比较值得注意的是,为了令训练更顺利,我们这里对X进行了归一化,所以模型需测时,也需要先对样本进行归一化,再进行预测哦。
好了,这节我们学习了softmax回归,把它看作多类别的逻辑回归就好了。其实都是先用WX作为判别值,然后再把判别值转换为概率,比较值得注意的是,它与逻辑回归一样,在建模时,最好先把数据进行归一化一下,再进行训练,如果不做归一化,有时训练会不成功。
评论