第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()

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值