02_逻辑斯蒂回归

逻辑斯蒂回归简单介绍

  • 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 θjJ(θ)=n1(i=1n[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(ert1)KP0ert
  • Sigmoid函数: S ( x ) = 1 1 + e − x S(x) = \frac{1}{1 + e^{-x} } S(x)=1+ex1
  • 一个简单的Logistic函数可以表示为Sigmoid
    • 即: P ( t ) = 1 1 + e − t P(t) = \frac{1}{1 + e^{-t} } P(t)=1+et1

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(ert1)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+et2
    • 纵坐标统一缩小一半,LogisticSigmoid就统一起来了
    • 即: P ( t ) = 1 1 + e − t P(t) = \frac{1}{1 + e^{-t} } P(t)=1+et1
    • 所以说:一个简单的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 θjJ(θ)=n1(i=1n[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+ef(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之间
    • 分类问题,计算机(死脑筋),比较概率的大小分类!!!

第二步:构建损失函数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+eXθ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(yx;θ)=(hθ(x))y(1hθ(x))1y
  • 事件的概率:所有样本属于真实标记的概率
    • 事件概率: ∏ i = 1 n P ( y i ∣ x i ; θ ) \prod\limits_{i = 1}^nP(y_i|x_i;\theta) i=1nP(yixi;θ)

公式推导

  • 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=1n(hθ(xi))yi(1hθ(xi))1yi将最大似然函数带入到事件概率函数里
  • 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=1n(hθ(xi))yi(1hθ(xi))1yi]进行对数转换
  • 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=1n[yiln(hθ(xi))+(1yi)ln(1hθ(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=1n[yiln(hθ(xi))+(1yi)ln(1hθ(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))] θjJ(θ)=n1i=1n[yihθ(xi)1θjhθ(xi)+(1yi)1hθ(xi)1θj(1hθ(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)] θjJ(θ)=n1i=1n[yihθ(xi)1θjhθ(xi)(1yi)1hθ(xi)1θjhθ(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) θjJ(θ)=n1i=1n[yihθ(xi)1(1yi)1hθ(xi)1]θjhθ(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 θjJ(θ)=n1i=1n[yihθ(xi)1(1yi)1hθ(xi)1]hθ(xi)(1hθ(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 θjJ(θ)=n1i=1n[yi(1hθ(xi))(1yi)hθ(xi)]θjθTx, h θ ( x i ) ( 1 − h θ ( x i ) ) h_{\theta}(x_i)(1-h_{\theta}(x_i)) hθ(xi)(1hθ(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 θjJ(θ)=n1i=1n[yihθ(xi)yihθ(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 θjJ(θ)=n1i=1n[yihθ(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 θjJ(θ)=n1i=1n[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 θjJ(θ)=n1i=1n[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=1n[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) θjhθ(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(1hθ(xi)), 根据求导法则得到 − ∂ ∂ θ j h θ ( x i ) -\frac{\partial}{\partial_{\theta_j}}h_{\theta}(x_i) θjhθ(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,... 0123,..., 我们在对 θ j \theta_j θj 求偏导的时候实际上就是这个线性方程( θ T x \theta^T x θTx)的系数,即 x j x_j xj
   c、需要注意的是,在这儿 θ \theta θ是未知数, x x x是常量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值