逻辑斯蒂回归
逻辑斯蒂回归简单介绍
- 1)逻辑回归尽管有其名称,但它是用于分类而不是回归的线性模型。
- 2)逻辑斯蒂回归首先是用于解决二分类问题的(即:类别0、1)。通过延伸之后,逻辑斯蒂回归可以解决多分类。所以下面的公式推理也是在二分类的角度下进行推理的。
- 3)逻辑斯蒂回归的理论基础是最大似然
- 4)逻辑斯蒂回归就是:线性回归+
Sigmoid
函数 - 5)逻辑斯蒂回归更新规则:
θ
=
θ
−
α
∂
∂
θ
J
(
θ
)
\theta = \theta - \alpha\frac{\partial}{\partial_{\theta}}J(\theta)
θ=θ−α∂θ∂J(θ)
- ∂ ∂ θ j J ( θ ) = 1 n ( ∑ i = 1 n [ h θ ( x i ) − y i ] ) x j \frac{\partial}{\partial{\theta_j}}J(\theta) = \frac{1}{n}(\sum\limits_{i = 1}^n[ h_{\theta}(x_i)-y_i])x_j ∂θj∂J(θ)=n1(i=1∑n[hθ(xi)−yi])xj
- 6)为什么要把线性回归套进去逻辑斯蒂函数中呢???
- 分类问题就是概率问题
- 我们需要想方设法将问题变成概率,
- 比较大小
- 逻辑斯蒂函数就是概率函数,无论给的值,多大多小变换到0~1之间,这也是逻辑斯蒂函数或者Sigmoid函数巧妙之处
- 分类问题就是概率问题
- 7)逻辑斯蒂回归就是根据求事件的概率来进行划分的
- 事件概率:所有样本属于真实标记的概率
Logistic函数与Sigmoid函数的联系及推导
Logistic
函数: P ( t ) = K P 0 e r t K + P 0 ( e r t − 1 ) P(t) = \frac{KP_0e^{rt}}{K + P_0(e^{rt} - 1)} P(t)=K+P0(ert−1)KP0ertSigmoid
函数: S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} } S(x)=1+e−x1- 一个简单的
Logistic
函数可以表示为Sigmoid
- 即: P ( t ) = 1 1 + e − t P(t) = \frac{1}{1 + e^{-t} } P(t)=1+e−t1
Logistic与Sigmoid关系推导
- P ( t ) = K P 0 e r t K + P 0 ( e r t − 1 ) P(t) = \frac{KP_0e^{rt}}{K + P_0(e^{rt} - 1)} P(t)=K+P0(ert−1)KP0ert, 其中 P 0 P_0 P0为初始值,K为终值,r衡量曲线变化快慢
- 令
P
0
=
1
P_0=1
P0=1,
K
=
2
K=2
K=2,
r
=
1
r=1
r=1
- P ( t ) = 2 e t 1 + e t P(t)=\frac{2e^t}{1+e^t} P(t)=1+et2et
- P ( t ) = 1 1 2 e t + 1 2 P(t)=\frac{1}{\frac{1}{2e^t}+\frac{1}{2}} P(t)=2et1+211, 分子分母同除以 2 e t 2e^t 2et
- P ( t ) = 2 1 e t + 1 P(t)=\frac{2}{\frac{1}{e^t}+1} P(t)=et1+12
- P ( t ) = 2 1 + e − t P(t)=\frac{2}{1+e^{-t}} P(t)=1+e−t2
- 纵坐标统一缩小一半,
Logistic
和Sigmoid
就统一起来了 - 即: P ( t ) = 1 1 + e − t P(t) = \frac{1}{1 + e^{-t} } P(t)=1+e−t1
- 所以说:一个简单的
Logistic
函数可以表示为Sigmoid
逻辑斯蒂回归原理
- 逻辑斯蒂回归就是:线性回归+
Sigmoid
函数 - 逻辑斯蒂回归更新规则:
θ
=
θ
−
α
∂
∂
θ
J
(
θ
)
\theta = \theta - \alpha\frac{\partial}{\partial_{\theta}}J(\theta)
θ=θ−α∂θ∂J(θ)
- 即: ∂ ∂ θ j J ′ ( θ ) = 1 n ( ∑ i = 1 n [ h θ ( x i ) − y i ] ) x j \frac{\partial}{\partial{\theta_j}}J'(\theta) = \frac{1}{n}(\sum\limits_{i = 1}^n[ h_{\theta}(x_i)-y_i])x_j ∂θj∂J′(θ)=n1(i=1∑n[hθ(xi)−yi])xj
第一步:预测函数h(x)
- 逻辑斯蒂回归:线性回归+
Sigmoid
函数- 预测函数:
h
θ
(
x
)
=
1
1
+
e
−
f
(
x
)
h_\theta(x)=\frac{1}{1+e^{-f(x)}}
hθ(x)=1+e−f(x)1
- h θ ( x ) = g ( θ T x ) = 1 1 + e − θ T x h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}} hθ(x)=g(θTx)=1+e−θTx1
-
f
(
x
)
=
θ
T
x
f(x) = \theta^Tx
f(x)=θTx是线性回归函数
- θ 和 x 表 示 向 量 \theta 和 x 表示向量 θ和x表示向量
- 一般情况下,给一个向量,默认是列向量
- 原来的 θ \theta θ系数是列向量,现在 θ T \theta^T θT (转置)表示行向量
- 行向量 θ T x \theta^Tx θTx :行向量点乘列向量( f ( x ) = x 0 θ 0 + x 1 θ 1 + x 2 θ 2 + … … + x n θ n f(x) = x_0\theta_0 + x_1\theta_1 + x_2\theta_2 + …… + x_n\theta_n f(x)=x0θ0+x1θ1+x2θ2+……+xnθn)
- 如上的预测函数概率函数,范围0 ~ 1之间
- 分类问题,计算机(死脑筋),比较概率的大小分类!!!
- 预测函数:
h
θ
(
x
)
=
1
1
+
e
−
f
(
x
)
h_\theta(x)=\frac{1}{1+e^{-f(x)}}
hθ(x)=1+e−f(x)1
第二步:构建损失函数cost
- 预测函数: h θ ( X ) = g ( X θ ) = 1 1 + e − X θ h_{\theta}(X) = g(X\theta) = \frac{1}{1 + e^{-X\theta}} hθ(X)=g(Xθ)=1+e−Xθ1
- 梯度下降更新规则:
θ
=
θ
−
α
∂
∂
θ
J
(
θ
)
\theta = \theta - \alpha\frac{\partial}{\partial_{\theta}}J(\theta)
θ=θ−α∂θ∂J(θ)
- 更新所有 α \alpha α 是学习率,步幅
- 逻辑斯蒂回归的理论基础是最大似然
- 最大似然: P ( y ∣ x ; θ ) = ( h θ ( x ) ) y ( 1 − h θ ( x ) ) 1 − y P(y|x;\theta) = (h_{\theta}(x))^{y}(1 - h_{\theta}(x))^{1-y} P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
- 事件的概率:所有样本属于真实标记的概率
- 事件概率: ∏ i = 1 n P ( y i ∣ x i ; θ ) \prod\limits_{i = 1}^nP(y_i|x_i;\theta) i=1∏nP(yi∣xi;θ)
公式推导
- L ( θ ) = ∏ i = 1 n ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i L(\theta) = \prod\limits_{i=1}^n(h_{\theta}(x_i))^{y_i}(1 - h_{\theta}(x_i))^{1-y_i} L(θ)=i=1∏n(hθ(xi))yi(1−hθ(xi))1−yi,将最大似然函数带入到事件概率函数里
- l ( θ ) = l n L ( θ ) = l n [ ∏ i = 1 n ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i ] l(\theta) = ln{L(\theta)} =ln[ \prod\limits_{i=1}^n(h_{\theta}(x_i))^{y_i}(1 - h_{\theta}(x_i))^{1-y_i}] l(θ)=lnL(θ)=ln[i=1∏n(hθ(xi))yi(1−hθ(xi))1−yi],进行对数转换
- l ( θ ) = ∑ i = 1 n [ y i l n ( h θ ( x i ) ) + ( 1 − y i ) l n ( 1 − h θ ( x i ) ) ] l(\theta) = \sum\limits_{i = 1}^n[y_iln(h_{\theta}(x_i)) + (1-y_i)ln(1-h_{\theta}(x_i))] l(θ)=i=1∑n[yiln(hθ(xi))+(1−yi)ln(1−hθ(xi))],化简
- J ( θ ) = − l ( θ ) = − ∑ i = 1 n [ y i l n ( h θ ( x i ) ) + ( 1 − y i ) l n ( 1 − h θ ( x i ) ) ] J(\theta) = -l(\theta) = -\sum\limits_{i = 1}^n[y_iln(h_{\theta}(x_i)) + (1-y_i)ln(1-h_{\theta}(x_i))] J(θ)=−l(θ)=−i=1∑n[yiln(hθ(xi))+(1−yi)ln(1−hθ(xi))]
- 对上式进行求导
-
∂ ∂ θ j J ’ ( θ ) = − 1 n ∑ i = 1 n [ y i 1 h θ ( x i ) ∂ ∂ θ j h θ ( x i ) + ( 1 − y i ) 1 1 − h θ ( x i ) ∂ ∂ θ j ( 1 − h θ ( x i ) ) ] \frac{\partial}{\partial{\theta_j}}J’(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i\frac{1}{h_{\theta}(x_i)}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i) + (1-y_i)\frac{1}{1-h_{\theta}(x_i)}\frac{\partial}{\partial_{\theta_j}}(1-h_{\theta}(x_i))] ∂θj∂J’(θ)=−n1i=1∑n[yihθ(xi)1∂θj∂hθ(xi)+(1−yi)1−hθ(xi)1∂θj∂(1−hθ(xi))]①
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i 1 h θ ( x i ) ∂ ∂ θ j h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) ∂ ∂ θ j h θ ( x i ) ] \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i\frac{1}{h_{\theta}(x_i)}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i) - (1-y_i)\frac{1}{1-h_{\theta}(x_i)}\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i)] ∂θj∂J′(θ)=−n1i=1∑n[yihθ(xi)1∂θj∂hθ(xi)−(1−yi)1−hθ(xi)1∂θj∂hθ(xi)]②
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i 1 h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) ] ∂ ∂ θ j h θ ( x i ) \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i\frac{1}{h_{\theta}(x_i)} - (1-y_i)\frac{1}{1-h_{\theta}(x_i)}]\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i) ∂θj∂J′(θ)=−n1i=1∑n[yihθ(xi)1−(1−yi)1−hθ(xi)1]∂θj∂hθ(xi)③
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i 1 h θ ( x i ) − ( 1 − y i ) 1 1 − h θ ( x i ) ] h θ ( x i ) ( 1 − h θ ( x i ) ) ∂ ∂ θ j θ T x \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i\frac{1}{h_{\theta}(x_i)} - (1-y_i)\frac{1}{1-h_{\theta}(x_i)}]h_{\theta}(x_i)(1-h_{\theta}(x_i))\frac{\partial}{\partial_{\theta_j}}\theta^Tx ∂θj∂J′(θ)=−n1i=1∑n[yihθ(xi)1−(1−yi)1−hθ(xi)1]hθ(xi)(1−hθ(xi))∂θj∂θTx④
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i ( 1 − h θ ( x i ) ) − ( 1 − y i ) h θ ( x i ) ] ∂ ∂ θ j θ T x \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i(1-h_{\theta}(x_i)) - (1-y_i)h_{\theta}(x_i)]\frac{\partial}{\partial_{\theta_j}}\theta^Tx ∂θj∂J′(θ)=−n1i=1∑n[yi(1−hθ(xi))−(1−yi)hθ(xi)]∂θj∂θTx, 将 h θ ( x i ) ( 1 − h θ ( x i ) ) h_{\theta}(x_i)(1-h_{\theta}(x_i)) hθ(xi)(1−hθ(xi))乘进去并约分
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i − h θ ( x i ) y i − h θ ( x i ) + y i h θ ( x i ) ] ∂ ∂ θ j θ T x \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i-h_{\theta}(x_i)y_i - h_{\theta}(x_i)+y_ih_{\theta}(x_i)]\frac{\partial}{\partial_{\theta_j}}\theta^Tx ∂θj∂J′(θ)=−n1i=1∑n[yi−hθ(xi)yi−hθ(xi)+yihθ(xi)]∂θj∂θTx,乘进去
-
∂ ∂ θ j J ′ ( θ ) = − 1 n ∑ i = 1 n [ y i − h θ ( x i ) ] ∂ ∂ θ j θ T x \frac{\partial}{\partial{\theta_j}}J'(\theta) = -\frac{1}{n}\sum\limits_{i = 1}^n[y_i - h_{\theta}(x_i)]\frac{\partial}{\partial_{\theta_j}}\theta^Tx ∂θj∂J′(θ)=−n1i=1∑n[yi−hθ(xi)]∂θj∂θTx,化简
-
∂ ∂ θ j J ′ ( θ ) = 1 n ∑ i = 1 n [ h θ ( x i ) − y i ] ∂ ∂ θ j θ T x \frac{\partial}{\partial{\theta_j}}J'(\theta) = \frac{1}{n}\sum\limits_{i = 1}^n[ h_{\theta}(x_i)-y_i]\frac{\partial}{\partial_{\theta_j}}\theta^Tx ∂θj∂J′(θ)=n1i=1∑n[hθ(xi)−yi]∂θj∂θTx,将负号放进去
-
最终公式: ∂ ∂ θ j J ′ ( θ ) = 1 n ∑ i = 1 n [ h θ ( x i ) − y i ] x j \frac{\partial}{\partial{\theta_j}}J'(\theta) = \frac{1}{n}\sum\limits_{i = 1}^n[ h_{\theta}(x_i)-y_i]x_j ∂θj∂J′(θ)=n1i=1∑n[hθ(xi)−yi]xj
-
- 将该公式带入到梯度下降更新规则里
- 梯度下降更新规则: θ = θ − α ∂ ∂ θ J ( θ ) \theta = \theta - \alpha\frac{\partial}{\partial_{\theta}}J(\theta) θ=θ−α∂θ∂J(θ)
- 即: θ j = θ j − α 1 n ( ∑ i = 1 n [ h θ ( x i ) − y i ] ) x j \theta_j = \theta_j - \alpha\frac{1}{n}(\sum\limits_{i=1}^{n}[h_{\theta}(x_i) -y_i])x_j θj=θj−αn1(i=1∑n[hθ(xi)−yi])xj
逻辑斯蒂回归使用
二分类问题代码实现
-
概率计算公式:
sigmoid
-
θ 就 是 线 性 方 程 的 系 数 \theta 就是线性方程的系数 θ就是线性方程的系数
- h θ ( x ) = 1 1 + e − θ T x h_{\theta}(x) = \frac{1}{1 + e^{-\theta^Tx}} hθ(x)=1+e−θTx1
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
X,y = datasets.load_iris(True)
# 将三分类变成二分类
cond = y!=1
X = X[cond]
y = y[cond]
lr = LogisticRegression()
lr.fit(X,y)
print('=======算法概率计算==========')
proba_ = lr.predict_proba(X)
proba_[:10]
print('====手动概率计算(sigmoid函数)====')
w_ = lr.coef_
b_ = lr.intercept_
def fun(X):
#线性方程,矩阵,批量计算
return X.dot(w_[0]) + b_[0]
def sigmoid(x):
#fun就是线性方程的返回值
return 1/(1+np.e**-x)
f = fun(X)
p_1 = sigmoid(f)
p_0 = 1 - p_1
p_ = np.c_[p_0,p_1]
p_[:10]
多分类代码实现
- 概率计算公式:
softmax
- e x / ∑ i = 1 n e x i e^x/\sum_{i=1}^ne^{x_i} ex/∑i=1nexi
- softmax 将数据变成概率问题(所有的概率和是1)
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn import datasets
# y三分类问题
X,y = datasets.load_iris(True)
# 打乱顺序
index = np.arange(150)#0,1,2,……149
np.random.shuffle(index)
X = X[index]
y = y[index]
lr = LogisticRegression(max_iter = 200)
lr.fit(X,y)
w_ = lr.coef_
b_ = lr.intercept_
print('=======算法概率计算==========')
proba_ = lr.predict_proba(X)
proba_[:10]
print('====手动概率计算(softmax函数)====')
# softmax将数值转换成概率,大的值,变的更大,小的值,变得更小
def softmax(x):
return np.e**x/((np.e**x).sum(axis = 1).reshape(-1,1))
# w_ 和 b_是方程的斜率和截距
def linear(x):
y = x.dot(w_.T) + b_ #矩阵运算,对齐!!!
return y
y_pred = linear(X)
y_proba = softmax(y_pred) # softmax可以转化成概率
y_proba[:10]
①
∂
∂
θ
j
h
θ
(
x
i
)
\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i)
∂θj∂hθ(xi),代表
h
θ
(
x
i
)
h_\theta(x_i)
hθ(xi)的偏导。因为线性方程多个系数,没有办法直接求导,所以求导都是求偏导,将其中一个当作变量,其余假设成已知数。
②
∂
∂
θ
j
(
1
−
h
θ
(
x
i
)
)
\frac{\partial}{\partial_{\theta_j}}(1-h_{\theta}(x_i))
∂θj∂(1−hθ(xi)), 根据求导法则得到
−
∂
∂
θ
j
h
θ
(
x
i
)
-\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i)
−∂θj∂hθ(xi)
③
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}}
hθ(x)=g(θTx)=1+e−θTx1, 根据sigmoid
求导公式得到
④ a
、
∂
∂
θ
j
θ
T
x
\frac{\partial}{\partial_{\theta_j}}\theta^Tx
∂θj∂θTx, 这里的sigmoid
函数是一个复合函数,我们对sigmoid
函数进行求解之后还要对里面的函数进行求解
b
、
∂
∂
θ
j
θ
T
x
\frac{\partial}{\partial_{\theta_j}}\theta^Tx
∂θj∂θTx,
T
T
T是
0
,
1
,
2
,
3
,
.
.
.
0,1,2,3,...
0,1,2,3,..., 我们在对
θ
j
\theta_j
θj 求偏导的时候实际上就是这个线性方程(
θ
T
x
\theta^T x
θTx)的系数,即
x
j
x_j
xj。
c
、需要注意的是,在这儿
θ
\theta
θ是未知数,
x
x
x是常量