Processing math: 100%

逻辑斯蒂回归

逻辑斯蒂回归(logistic regression,又称“对数几率回归”)是经典的分类方法。虽然名字中包含回归,但它被用来分类

逻辑斯蒂分布

X 是随机变量,X 服从逻辑斯蒂分布是指 X 的概率分布函数 F(x) 和概率密度函数 f(x) 为:

F(x)=P(Xx)=11+e(xμ)/γ

f(x)=F(x)=e(xμ)/γγ(1+e(xμ)/γ)2

其中,μ 是位置参数,γ>0 是形状参数。密度函数 f(x) 和分布函数 F(x) 的图形如下所示:

![](https://img2018.cnblogs.com/blog/1258764/201811/1258764-20181104205539126-1551413926.png)
可以看到,分布函数 F(x) 是一条 S 型曲线,该曲线在两边增长较缓,而中心增长较快。μ 控制着曲线的位置,F(x) 关于 (μ,12) 中心对称,而 γ 则控制曲线的形状,γ 越小,曲线在中心附近增长的越快。 ## 二项逻辑斯蒂回归模型 **二项逻辑斯蒂回归(binomial logistic regression model)**是一种**分类**模型,二项代表该模型被用来进行二类分类。二项逻辑斯蒂回归由条件概率 P(Y|X) 表示,其中随机变量 X 的取值为实数,随机变量 Y 的取值为 0 或 1 。通过训练数据(监督学习)来估计模型的参数,从而确定模型。 ### 二项逻辑斯蒂回归的定义 二项逻辑斯蒂回归是如下的条件概率分布:

P(Y=1|X)=exp(wx+b)1+exp(wx+b)

P(Y=0|X)=11+exp(wx+b)

其中, xRn 是一个 n 维向量,为输入,wRnbR 为参数,w 被称为权值向量b 被称为偏置wx 为两者的內积。
对于给定的输入实例 x, 可以根据(1)(2)两式计算出两个概率 P(Y=1|X)P(Y=0|X),比较两个概率的大小,将实例 x 分到概率较大的那一类。
有时,为了方便,可以对 wx 进行扩充,扩充后 w=(w1,w2,...,wn,b)x=(x1,x2,...,xn,1),这样wx 就相当于扩充前的 wx+b,所以式(1)(2)可以改写为:

P(Y=1|X)=exp(wx)1+exp(wx)

P(Y=0|X)=11+exp(wx)

可以看到,当线性函数 wx 的值越接近于正无穷,概率值就越接近于 1 ;线性函数值越接近于负无穷,概率就越接近于 0 ,这与前面 F(x) 的图像一致,所以该模型就是逻辑斯蒂回归模型。

模型的参数估计

给定训练集 T={(x1,y1),(x2,y2),...,(xn,yn)},其中xiRnyi{0,1},可以使用极大似然估计法来估计模型的参数 w,从而得到逻辑斯蒂回归模型。步骤如下:
假设:

P(Y=1|x)=π(x),P(Y=0|x)=1π(x)

似然函数为:

Ni=1[π(xi)]yi[1π(xi)]1yi

对数似然函数为:

![](https://img2018.cnblogs.com/blog/1258764/201811/1258764-20181104212920281-643994200.png)
L(w) 求极大值,就得到了 w 的估计值。 这样,问题就变成了求以对数似然函数为目标函数的最优化问题,逻辑斯蒂回归学习通常使用梯度下降法和拟牛顿法。 假设估计的参数值为 ˆw,则学到的二项逻辑斯蒂回归模型为:

P(Y=1|X)=exp(ˆwx)1+exp(ˆwx)

P(Y=0|X)=11+exp(ˆwx)

多项逻辑斯蒂回归

可以将二项逻辑斯蒂回归推广到多项逻辑斯蒂回归。假设随机变量 Y 的取值集合为 {0,1,...,K},则多项逻辑斯蒂回归的模型就是:

![](https://img2018.cnblogs.com/blog/1258764/201811/1258764-20181104213452338-1537464401.png)
其中,xRn+1wkRn+1。 同样可以使用极大似然估计来估计模型中的参数。 ## 逻辑斯蒂回归的实现 这里使用python库`scikit-learn`来实现逻辑斯蒂回归,使用的方法为`sklearn.linear_model.SGDClassifier`,该方法使用梯度下降来实现逻辑斯蒂回归,函数的使用方法和参数含义可以参考[文档](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.SGDClassifier.html#sklearn.linear_model.SGDClassifier)。 训练数据如下: ``` 1,0,0,1,0 1,0,0,2,0 1,1,0,2,1 1,1,1,1,1 1,0,0,1,0 2,0,0,1,0 2,1,1,2,0 2,1,1,2,1 2,0,1,3,1 2,0,1,3,1 3,0,1,3,1 3,0,1,2,1 3,1,0,2,1 3,1,0,3,1 3,0,0,1,0 ``` 数据来自贷款信息,每一行代表一个实例(贷款人)。数据共分为5列,前4列为属性值,分别是年龄(1青年,2中年,3老年)、是否有房子(0没房子,1有房子)、是否有工作(0没工作,1有工作)和信用值(1,2,3分别是信用一般,好,非常好),最后一列为类别(0代表没有贷款资格,1代表有贷款资格)。目标是训练出一个逻辑斯蒂回归模型,输入新的实例,判断该实例是否有贷款资格。将上面的数据保存到`data.txt`,代码如下: ```python import numpy as np import pandas as pd from sklearn import linear_model

df = pd.read_csv("D:\data.txt", header=None)

属性值

xdata = df.loc[:,:3]

类别

ydata = df.loc[:,4]

clf = linear_model.SGDClassifier(loss="log", max_iter=1000) #log代表logistic
clf.fit(xdata, ydata)

青年人、没工作、有房子、信用好

clf.predict(np.array([1,0,1,1]).reshape(1,-1))

输出:

array([0], dtype=int64)

`0`代表该申请人没有贷款资格。  
除了这个方法外,还可以使用[sklearn.linear_model.LogisticRegression](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html)以及[sklearn.linear_model.LogisticRegressionCV](http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegressionCV.html#sklearn.linear_model.LogisticRegressionCV)来实现逻辑斯蒂回归。
## 总结
逻辑斯蒂回归模型是一种经典的分类模型,它根据条件概率的取值来对实例进行分类。可以使用极大似然估计来估计模型中的参数 $w$ 。
## 参考
1、李航《统计学习方法》
posted @   ColdCode  阅读(4837)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 趁着过年的时候手搓了一个低代码框架
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· 乌龟冬眠箱湿度监控系统和AI辅助建议功能的实现
历史上的今天:
2017-11-04 二叉排序树
AmazingCounters.com
点击右上角即可分享
微信分享提示