python逻辑回归(logistic regression LR) 底层代码实现 BGD梯度下降算法 softmax多分类
Posted 啥都会点的大秀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python逻辑回归(logistic regression LR) 底层代码实现 BGD梯度下降算法 softmax多分类相关的知识,希望对你有一定的参考价值。
逻辑回归
前面用sigmoid函数实现了基本逻辑回归的二分类,感兴趣的童鞋点击###python逻辑回归(logistic regression LR) 底层代码实现 BGD梯度下降算法 二分类#####了解sigmoid二分类逻辑回归
>>
目录
前言
逻辑回归模型(Logistic Regression Model)是机器学习领域著名的分类模型。其常用于解决二分类(Binary Classification)问题。
但是在现实工作/学习/项目中,我们要解决的问题是经常多分类(Multiclass Classification)问题。
因此,需要对普通的基于sigmoid函数的逻辑回归模型进行拓展。本文介绍了 2 种拓展逻辑回归使其成为多分类模型的方法。
一、多0-1分类器
多0-1分类器是根据类别数建立多个0-1二分类器,主要有两种思路:One v One(OVO)和One v Rest(OVR)。
1.OVO
One-Vs-One 是一种相对稳健的扩展方法。对于多分类问题,假设类别数为C,让不同类别两两组合训练二分类模型,这样总共产生 C C 2 C_C^2 CC2组合,即 C C 2 C_C^2 CC2个分类器。
举例说明:如下图所示,假设待分类数为3,则应训练3个二分类器①(绿色椭圆)、②(红色椭圆)、③(蓝色椭圆)。对于图中new point,分别使用这三个分类器预测其类别,分类器①结果为蓝色类,分类器②结果为蓝色类,分类器③结果为红色类或绿色类(此结果不重要),所以三个分类器的分类结果为2蓝一红(或绿),此预测过程就像投票一样,得票数最多的为最终结果,所以红色点应属于蓝色类。
2.OVR
One v Rest(或者叫 One-Vs-All)转变的思路就如同方法名称描述的那样,选择其中一个类别为正类(Positive),使其他所有类别为负类(Negative)。
n 种类型的样本进行分类时,分别取一种样本作为一类,将剩余的所有类型的样本看做另一类,这样就形成了 n 个二分类问题,使用逻辑回归算法对 n 个数据集训练出 n 个模型,将待预测的样本传入这 n 个模型中,所得概率最高的那个模型对应的样本类型即认为是该预测样本的类型。
举例说明:分别已三角形顶点区域为正类,两底点区域所属的两类别为负类训练二分类模型,得到三个二分类器。对于图中new point,分别使用这三个分类器预测其类别,分类器①结果为蓝色类,分类器②结果为非绿色类(将蓝色类合红色类归于一类,分类器不清楚具体new point 属于哪一类),分类器③结果为非红色类(同上,分类器不清楚new point 属于蓝色类还是绿色类),一共有三个类,结果非绿非红,所以new point理所当然属于蓝色类。
3 OvO vs OvR:
OvO 用时较多,但其分类结果更准确,因为每一次二分类时都用真实的类型进行比较,没有混淆其它的类别。
二、softmax多分类
softmax函数
softmax函数可以将多分类的输出值转化为范围在[0,1]之间,和为1的概率分布。
s
o
f
t
m
a
x
(
Z
i
)
=
e
Z
i
∑
j
=
1
C
e
Z
j
softmax\\left( \\mathrmZ_\\mathrmi \\right) =\\frac\\mathrme^\\mathrmZ_\\mathrmi\\sum_\\mathrmj=1^\\mathrmC\\mathrme^\\mathrmZ_\\mathrmj
softmax(Zi)=∑j=1CeZjeZi
其中,C为类别数,
Z
i
Z_i
Zi为样本经第i个分类器的输出值,i=1,2,3,…,C
Z
i
=
θ
i
T
X
\\mathrmZ_\\mathrmi=\\mathrm\\theta_\\mathrmi^\\mathrmT\\mathrmX
Zi=θiTX
所以
Z
=
θ
T
X
=
[
θ
1
T
⋮
θ
C
T
]
⋅
X
=
[
[
θ
1
0
θ
1
1
θ
1
2
⋯
θ
1
n
]
⋮
[
θ
C
0
θ
C
1
θ
C
2
⋯
θ
C
n
]
]
⋅
[
x
0
⋮
x
m
+
1
]
=
[
z
0
⋮
z
m
+
1
]
\\mathrmZ=\\theta ^TX=\\left[ \\beginarrayc \\theta _1^T\\\\ \\vdots\\\\ \\theta _C^T\\\\ \\endarray \\right] \\cdot X=\\left[ \\beginarrayl \\left[ \\theta _1^0\\,\\,\\theta _1^1\\theta _1^2\\,\\,\\cdots \\,\\,\\theta _1^n\\,\\, \\right]\\\\ \\,\\, \\vdots\\\\ \\left[ \\theta _C^0\\,\\,\\theta _C^1\\theta _C^2\\,\\,\\cdots \\,\\,\\theta _C^n\\,\\, \\right]\\\\ \\endarray \\right] \\cdot \\left[ \\beginarrayc x_0\\\\ \\vdots\\\\ x_m+1\\\\ \\endarray \\right] =\\left[ \\beginarrayc z_0\\\\ \\vdots\\\\ z_m+1\\\\ \\endarray \\right]
Z=θTX=⎣⎢⎡θ1T⋮θCT⎦⎥⎤⋅X=⎣⎢⎡[θ10θ11θ12⋯θ1n]⋮[θC0θC1θC2⋯θCn]⎦⎥⎤⋅⎣⎢⎡x0⋮xm+1⎦⎥⎤=⎣⎢⎡z0⋮zm+1⎦⎥⎤
预测函数
预测函数选出数据经分类器后输出概率值的最大值所属类别,表达式如下:
h
(
Z
)
=
a
r
g
max
(
s
o
f
t
max
(
Z
)
)
=
a
r
g
max
(
s
o
f
t
max
(
[
Z
1
,
Z
2
,
⋯
,
Z
c
]
)
)
h\\left( Z \\right) =arg\\max \\left( soft\\max \\left( Z \\right) \\right) =arg\\max \\left( soft\\max \\left( \\left[ Z_1,Z_2,\\cdots ,Z_c \\right] \\right) \\right)
h(Z)=argmax(softmax(Z))=argmax(softmax([Z1,Z2,⋯,Zc]))
损失函数
这里不对损失函数及其导数的关系式进行推导,感兴趣的童鞋可以去这里学习公式推导过程。
损失函数使用交叉熵函数,定义
p
i
=
s
o
f
t
max
(
Z
i
)
p_i=soft\\max \\left( Z_i \\right)
pi=softmax(Zi)
于是
J
(
Z
j
)
=
−
1
m
∑
i
=
1
m
∑
j
=
1
C
y
j
(
i
)
log
(
p
j
(
i
)
)
J\\left( Z_j \\right) =-\\frac1m\\sum_i=1^m\\sum_j=1^Cy_j^\\left( i \\right)\\log \\left( p_j^\\left( i \\right) \\right)
J(Zpython逻辑回归(logistic regression LR) 底层代码实现 BGD梯度下降算法 softmax多分类