第6章--逻辑斯蒂回归与最大熵模型---(6)

1.逻辑斯谛回归模型概述

  • 属于对数线性模型
  • 采用对数似然函数极大化为优化目标
  • 模型学习一般采用极大似然估计,或正则化的极大似然估计
  • 通常采用梯度下降和拟牛顿法学习参数
  • 学习方法有改进的迭代尺度法、梯度下降法、拟牛顿法
  • 模型在输入很大和很小的时候出现梯度趋于0 的情况
  • 可以形式化为无约束最优化问题

(1)逻辑斯谛分布

  • 分布函数属于逻辑斯谛函数
  • 分布函数是S型曲线,关于点 ( μ , 1 2 ) (\mu,\frac12) μ,21中心对称,即 F ( − x + μ ) − 1 2 = − F ( x + μ ) + 1 2 F(-x+\mu)-\frac12=-F(x+\mu)+\frac12 F(x+μ)21=F(x+μ)+21
  • 分布函数在中心附近斜率很大,两端斜率很小
  • 分布函数为: F ( x ) = P ( X ≤ x ) = 1 1 + e ( x − μ ) / γ F(x)=P(X\leq x)=\frac{1}{1+e^{{(x-\mu)}/\gamma}} F(x)=P(Xx)=1+e(xμ)/γ1
  • 密度函数为: f ( x ) = F ′ ( x ) = e − ( x − μ ) / γ γ ( 1 + e − ( x − μ ) / γ ) 2 f(x)=F^{\prime}(x)=\frac{e^{-(x-\mu)/\gamma}}{\gamma(1+e^{-(x-\mu)/\gamma})^2} f(x)=F(x)=γ(1+e(xμ)/γ)2e(xμ)/γ

(2)二项逻辑斯谛回归模型

  • 是分类模型
  • y值取0,1
  • 用监督学习的方法估计模型参数
  • 事件几率(odds):该事件发生与不发生的概率比, o d d s = p 1 − p odds=\frac{p}{1-p} odds=1pp
  • 对数几率(log odds)/logit函数是: l o g i t ( p ) = log ⁡ p 1 − p logit (p)=\log\frac p{1-p} logit(p)=log1pp
  • 逻辑斯谛回归模型的对数几率为: log ⁡ P ( Y = 1 ∣ x ) 1 − P ( Y = 1 ∣ x ) = w ⋅ x \log\frac{P(Y=1|x)}{1-P(Y=1|x)}=w\cdot x log1P(Y=1x)P(Y=1x)=wx
  • 条件概率分布: P ( Y = 1 ∣ x ) = exp ⁡ ( w ⋅ x + b ) 1 + exp ⁡ ( w ⋅ x + b ) P(Y=1|x)=\frac{\exp(w\cdot x+b)}{1+\exp(w\cdot x+b)} P(Y=1x)=1+exp(wx+b)exp(wx+b), P ( Y = 0 ∣ x ) = 1 1 + exp ⁡ ( w ⋅ x + b ) P(Y=0|x)=\frac{1}{1+\exp(w\cdot x+b)} P(Y=0x)=1+exp(wx+b)1

(3)多项式逻辑斯谛回归

  • 用于多分类问题
  • 模型: P ( Y = k ∣ x ) = exp ⁡ ( w k ⋅ x ) 1 + ∑ k = 1 K − 1 exp ⁡ ( w k ⋅ x ) , k = 1 , 2 , . . . , K − 1 P ( Y = K ∣ x ) = 1 1 + ∑ k = 1 K − 1 exp ⁡ ( w k ⋅ x ) P(Y=k|x)=\frac{\exp(w_k\cdot x)}{1+\sum_{k=1}^{K-1}\exp(w_k\cdot x)},k=1,2,...,K-1\quad P(Y=K|x)=\frac{1}{1+\sum_{k=1}^{K-1}\exp(w_k\cdot x)} P(Y=kx)=1+k=1K1exp(wkx)exp(wkx),k=1,2,...,K1P(Y=Kx)=1+k=1K1exp(wkx)1

2.最大熵模型(maximum entropy model)

  • 属于对数线性模型
  • 可以用于二类或多类分类
  • 模型学习就是对模型进行极大似然估计,或正则化的极大似然估计
  • 最大熵模型认为:熵最大的模型是最好的模型(熵是不确定性的度量,熵越大不确定性越大)
  • H ( P ) = − ∑ x P ( x ) log ⁡ P ( x ) , H(P)=-\sum_x P(x)\log P(x), H(P)=xP(x)logP(x),且满足 0 ≤ H ( P ) ≤ log ⁡ ∣ X ∣ 0\leq H(P)\leq \log|X| 0H(P)logX,当X是均匀分布时 H ( P ) = log ⁡ ∣ X ∣ H(P)=\log|X| H(P)=logX
  • 均匀分布时,熵最大
  • 满足约束条件的情况下,没有更多信息的情况是等可能的
  • 可以形式化为无约束最优化问题
  • 对偶函数的极大化等价于最大熵模型的极大似然估计
  • 最大熵模型的学习问题转换成具体求解对数似然函数极大化或对偶函数极大化的问题。

(1)模型

P w ( y ∣ x ) = 1 Z w ( x ) exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) ) P_{w}(y | x)=\frac{1}{Z_{w}(x)} \exp \left(\sum_{i=1}^{n} w_{i} f_{i}(x, y)\right) Pw(yx)=Zw(x)1exp(i=1nwifi(x,y)) Z w ( x ) = ∑ y exp ⁡ ( ∑ i = 1 n w i f i ( x , y ) ) Z_{w}(x)=\sum_{y} \exp \left(\sum_{i=1}^{n} w_{i} f_{i}(x, y)\right) Zw(x)=yexp(i=1nwifi(x,y))其中, Z w ( x ) Z_w(x) Zw(x)是规范化因子, f i f_i fi为特征函数, w i w_i wi为特征的权值, P w = P w ( y ∣ x ) P_w=P_w(y|x) Pw=Pw(yx)就是最大熵模型

(2)对数似然函数

L ( w ) = ∑ x , y P ~ ( x , y ) ∑ i = 1 n w i f i ( x , y ) − ∑ x P ~ ( x ) log ⁡ Z w ( x ) L(w)=\sum_{x,y}\tilde{P}(x,y)\sum_{i=1}^nw_if_i(x,y)-\sum_x\tilde{P}(x)\log Z_w(x) L(w)=x,yP~(x,y)i=1nwifi(x,y)xP~(x)logZw(x)

3.最大熵模型的约束最优化问题

min ⁡ − H ( P ) = ∑ x , y P ~ ( x ) P ( y ∣ x ) log ⁡ P ( y ∣ x ) \min -H(P)=\sum_{x, y} \tilde{P}(x) P(y | x) \log P(y | x) minH(P)=x,yP~(x)P(yx)logP(yx)

s . t . P ( f i ) − P ~ ( f i ) = 0 , i = 1 , 2 , ⋯   , n s.t. \quad P\left(f_{i}\right)-\tilde{P}\left(f_{i}\right)=0, \quad i=1,2, \cdots, n s.t.P(fi)P~(fi)=0,i=1,2,,n

∑ y P ( y ∣ x ) = 1 \sum_{y} P(y | x)=1 yP(yx)=1

4.模型学习的最优化算法

(1)改进的迭代尺度法(IIS)

  • 是一种最大熵模型学习的最优化算法
  • 思想:假设最大熵模型当前的参数向量 w = ( w 1 , w 2 , . . . , w n ) T w=(w_1,w_2,...,w_n)^T w=(w1,w2,...,wn)T,希望找到一个新的参数向量 w + δ = ( w 1 + δ 1 , w 2 + δ 2 , . . . , w n + δ n ) T w+\delta=(w_1+\delta_1,w_2+\delta_2,...,w_n+\delta_n)^T w+δ=(w1+δ1,w2+δ2,...,wn+δn)T使得模型的对数似然函数值增大,直到找到最大值。
  • 由于 δ \delta δ是一个向量,有多个变量,IIS每次只优化一个值,其他的保持不变

(2)改进的迭代尺度算法(IIS)

  • 输入:特征函数 f 1 , f 2 , . . . , f n f_1,f_2,...,f_n f1,f2,...,fn;经验分布 P ~ ( X , Y ) \tilde{P}(X,Y) P~(X,Y),模型 P w ( y ∣ x ) P_w(y|x) Pw(yx)
  • 输出:最优参数值 w i ∗ w_i^* wi;最优模型 P w ∗ P_{w^*} Pw
  • 计算过程:
    1)对所有 i ∈ { 1 , 2 , . . . , n } , i\in\lbrace 1,2,...,n\rbrace, i{1,2,...,n},取初值 w i = 0 w_i=0 wi=0;(即参数初始化,代码实现的时候是w=np.zeros(n))
    2)对每个 i ∈ { 1 , 2 , . . . , n } i\in\lbrace 1,2,...,n\rbrace i{1,2,...,n}
    \quad (a)令 δ i \delta_i δi是方程 ∑ x , y P ~ ( x ) P ( y ∣ x ) f i ( x , y ) exp ⁡ ( δ i ∑ i = 1 n f i ( x , y ) ) = E P ~ ( f i ) \sum_{x,y}\tilde{P}(x)P(y|x)f_i(x,y)\exp(\delta_i\sum_{i=1}^nf_i(x,y))=E_{\tilde{P}(f_i)} x,yP~(x)P(yx)fi(x,y)exp(δii=1nfi(x,y))=EP~(fi)的解
    \quad (b)更新 w i w_i wi w i : = w i + δ i w_i :=w_i+\delta_i wi:=wi+δi
    3)如果不是所有 w i w_i wi都收敛,则重复步骤2)

(3)最大熵模型学习的BFGS算法—拟牛顿算法

  • 输入:特征函数 f 1 , f 2 , . . . , f n f_1,f_2,...,f_n f1,f2,...,fn;经验分布 P ~ ( x , y ) \tilde{P}(x,y) P~(x,y),目标函数 f ( x ) f(x) f(x),梯度 g ( w ) = ∇ f ( w ) g(w)=\nabla f(w) g(w)=f(w),精度要求 ε \varepsilon ε
  • 输出:最优参数值 w ∗ w^* w;最优模型 P w ∗ ( y ∣ x ) P_{w^*}(y|x) Pw(yx)
  • 计算过程:
    1)选定初始点 w ( 0 ) w^{(0)} w(0),取 B 0 B_0 B0为正定对称矩阵,置 k = 0 k=0 k=0
    2)计算 g k = g ( w ( k ) ) g_k=g(w^{(k)}) gk=g(w(k))。若 ∣ ∣ g k ∣ ∣ &lt; ε ||g_k||&lt;\varepsilon gk<ε,停止计算,得到 w ∗ = w ( k ) w^*=w^{(k)} w=w(k),否则转3)
    3)由 B k p k = − g k B_kp_k=-g_k Bkpk=gk求出 p k p_k pk
    4)一维搜索:求 λ k \lambda_k λk使得 f ( w ( k ) + λ k p k ) = m i n λ ≥ 0 f ( w ( k ) + λ p k ) f(w^{(k)}+\lambda_kp_k)=min_{\lambda\geq0}f(w^{(k)}+\lambda p_k) f(w(k)+λkpk)=minλ0f(w(k)+λpk)
    5)置 w ( k + 1 ) = w ( k ) + λ k p k w^{(k+1)}=w^{(k)}+\lambda_kp_k w(k+1)=w(k)+λkpk
    6)计算 g k + 1 = g ( w ( k + 1 ) ) g_{k+1}=g(w^{(k+1)}) gk+1=g(w(k+1)),若 ∣ ∣ g k + 1 ∣ ∣ &lt; ε ||g_{k+1}||&lt;\varepsilon gk+1<ε,停止计算,得到 w ∗ = w ( k + 1 ) w^*=w^{(k+1)} w=w(k+1);否则按 B k + 1 = B k + y k y k T y k T δ k − B k δ k δ k T B k δ k T B k δ k , y k = g k + 1 − g k , δ k = w ( k + 1 ) − w ( k ) B_{k+1}=B_k+\frac{y_ky_k^T}{y_k^T\delta_k}-\frac{B_k\delta_k\delta_k^TB_k}{\delta_k^TB_k\delta_k},\quad \quad y_k=g_{k+1}-g_k,\quad \delta_k=w^{(k+1)-w^{(k)}} Bk+1=Bk+ykTδkykykTδkTBkδkBkδkδkTBk,yk=gk+1gk,δk=w(k+1)w(k)求出 B k + 1 B_{k+1} Bk+1
    7)置 k = k + 1 k=k+1 k=k+1,转3)

5.代码实现

#导包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

#创建数据
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
data = np.array(df.iloc[:100, [0,1,-1]])
# print(data)
X, y = data[:,:2], data[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

#训练模型
clf = LogisticRegression(max_iter=200)
clf.fit(X_train, y_train)

print(clf.score(X_train, y_train))		    # 1.0
print(clf.score(X_test, y_test))			# 0.9666666666666667
print(clf.coef_, clf.intercept_)			# [[ 1.95863181 -3.29617229]] [-0.34560291]

#绘图观察分类情况
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_)
plt.plot(X[:50, 0], X[:50, 1], 'bo', color='blue', label='0')
plt.plot(X[50:, 0], X[50:, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()

最终结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值