python统计分析——逻辑回归

本文介绍了如何使用Python进行逻辑回归分析,包括logit函数、logistic函数的性质、模型推导以及实际应用中的数据处理、模型拟合、AIC选择和预测。重点讲解了logistic回归系数与优势比的关系。
摘要由CSDN通过智能技术生成

参考资料:用python动手学统计学

        逻辑回归即logistic回归。概率分布为二项分布、联系函数为logit函数的广义线性模型叫作logistic回归。解释变量可以有多个,连续型和分类型的解释变量也可以同时存在。

1、logit函数

        logit函数的数学式如下,对数的底为e:

f(x)=ln(\frac{x}{1-x})

2、反函数

        已知函数f(a)=b,交换a与b的关系,得到g(b)=a,g(x)就是f(x)的反函数。

3、logistic函数

        logistic函数时logit函数的反函数,设Logit函数为f(x),logistic函数为g(x),则g(f(x))=x。

        logistic函数的数学式如下:

g(y)=\frac{1}{1+exp(-y)}

4、logistic函数的性质

        指数函数exp(-y)不可能小于0,所以logistic函数的分布不可能小于1。y越小,exp(-y)越大。当分母很大时,logistic函数的值趋向于0。总结如下

当y趋向于正无穷时,g(y)趋向于1;当y趋向于负无穷时,g(y)趋向于0。

logistic函数的值永远介于0和1之间。

5、logistic回归的推导

        logistic回归的概率分布为二项分布,联系函数为logit函数。

        设成功概率(即考试合格率)为p,联系函数为logit函数,则考试合格率与学习时间的关系如下:(本例将研究考试合格情况与学习时间的逻辑回归关系)

ln(\frac{p}{1-p})=\beta_0+\beta_1 \times time

        将两边转化为logistic函数,得到:

p=\frac{1}{1+exp[-(\beta_0+\beta_1 \times time)]}

        这就是用于预测合格率的数学式。

6、python实现

6.1 导入库

# 导入库
# 用于数值计算的库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
# 导入绘图的库
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
# 用于估计统计模型的库
import statsmodels.formula.api as smf
import statsmodels.api as sm

6.2 数据准备

test_result=pd.read_csv(r"文件目录")

6.3 数据展示

        以横轴为学习时间(hour)、纵轴为合格率(result),绘制出学习时间与合格率关系的条形图。

sns.barplot(x='hours',y='result',data=test_result)

         在条形图中,纵轴的值为均值。合格为1,不合格为0,因此均值可看作合格率。由图形可以看出,学习时间越长,合格率越高。

6.4 拟合logistic回归

mod_glm=smf.glm(formula='result~hours',
                data=test_result,
                family=sm.families.Binomial()).fit()

        在进行广义线性模型估计时,不管是不是logistic回归模型,都需要使用smf.glm函数。参数介绍如下:

(1)formula参数与估计正态线性模型时所用的一样。参数值为“result ~ hours”,代表响应变量为result,解释变量为hours。当存在多个解释变量时,使用加号连接。

(2)data参数代表数据源,要求为dataframe格式。

(3)family参数代表概率分布。sm.families.Binomial()为二项分布,sm.families.Poisson()为泊松分布。本例没有指定联系函数。当概率分布为二项分布时,联系函数默认为logit函数。不同的概率分布默认的联系函数也不同。泊松分布默认的联系函数为对数函数。我们也可以通过sm.families.Binomial(link=sm.families.links.logit)显式指定联系函数。

6.5 logistic回归的结果

mod_glm.summary()

        Method中的IRLS为迭代加权最小二乘法的英文 Iterative Reweighted Least Squares的缩写。算法中的迭代次数为No.Iterations。

        Deviance与Pearson chi2是表示模型拟合程度的指标。

        Wald检验用于对系数的解读。

6.6 模型的选择

        下面使用AIC对比空模型和包含解释变量(学习时间)的模型哪个更合适。

# 估计空模型
mod_glm_null=smf.glm('result~1',
                    data=test_result,
                    family=sm.families.Binomial()).fit()
# 对比AIC
print('空模型:',mod_glm_null.aic.round(3))
print('包含解释变量的模型:',mod_glm.aic.round(3))

        包含解释变量的模型的AIC更小,说明在预测合格率是需要学习时间这个解释变量。由6.5的结果可知学习时间的系数为正数,说明学习时间越长,合格率越高。

6.7 回归曲线

        以横轴为学习时间、纵轴为合格情况(二值变量)绘制散点图,并在其上绘制有logistic回归所得的理论合格率。设置函数seaborn.lmplot的参数logistic=True,即可绘制出指定图形。

sns.lmplot(x='hours',y='result',
          data=test_result,
          logistic=True,
          x_jitter=0.1,y_jitter=0.02)

        合格的数据全是0或1,在图形上会重合,因而这里制订了x_jitter与y_jitter,以让散点图的数据在图形上稍微分散一些。

6.8 预测

# 建立0-9的公差为1的等差数列
exp_val=pd.DataFrame({
    'hours':np.arange(0,10,1)
})
# 成功概率的预测值
pred=mod_glm.predict(exp_val)
pred

        由预测结果可以看出,不学习的合格率只有1%,学习9小时的合格率接近为98%。得到要么为0要么为1的值,只需要对小数点后1位四舍五入,数值只要不小于0.5就是合格。

7、优势

        要解读logistic回归模型中估计的参数,还需要掌握一个术语。

        成功概率与失败概率的比值叫做优势,它表示是否容易成功,其数学式表示为:优势=p/(1-p)。其中p为成功概率。当p=0.5时,有时为1,表示成功和失败的容易程度相当;当p=0.75时,优势为3,表示成功比失败容易3被。

        优势的对数叫作对数优势,logit函数也可以看作将成功概率转换为对数优势的函数。

        优势的比值叫做优势比。优势比的对数叫作对数优势比。

8、logistic回归的系数与优势比的关系

        当联系函数为logit函数时,logistic回归的系数与有时密切相关。具体来说解释变量改变一个单位时的对数优势比就是回归系数。

要在Python中画指数函数的图像,可以使用Matplotlib库。以下是一个简单的例子: ```python import numpy as np import matplotlib.pyplot as plt # 定义指数函数 def exp_func(x, a, b): return a * np.exp(b * x) # 生成一些随机数据 x_data = np.linspace(0, 5, 50) y_data = 2.5 * np.exp(0.8 * x_data) + np.random.normal(size=50) # 使用curve_fit函数进行拟合 from scipy.optimize import curve_fit popt, pcov = curve_fit(exp_func, x_data, y_data) # 绘制数据和拟合曲线 plt.scatter(x_data, y_data) plt.plot(x_data, exp_func(x_data, *popt), 'r-') plt.show() ``` 在上面的代码中,我们首先定义了一个指数函数`exp_func`,然后生成一些随机数据。使用`curve_fit`函数进行拟合,得到拟合参数`popt`。最后,使用Matplotlib库绘制数据和拟合曲线。 如果你想要更深入地了解如何使用Python进行回归分析,可以使用Scikit-learn库。这个库包含了许多常见的回归算法,包括线性回归、岭回归、Lasso回归、弹性网络回归等。以下是一个使用岭回归进行指数拟合的例子: ```python import numpy as np from sklearn.linear_model import Ridge import matplotlib.pyplot as plt # 生成一些随机数据 x_data = np.linspace(0, 5, 50) y_data = 2.5 * np.exp(0.8 * x_data) + np.random.normal(size=50) # 将数据转化为矩阵形式 X = x_data.reshape(-1, 1) y = y_data.reshape(-1, 1) # 使用岭回归进行拟合 ridge = Ridge(alpha=1.0) ridge.fit(X, y) # 绘制数据和拟合曲线 plt.scatter(x_data, y_data) plt.plot(x_data, ridge.predict(X), 'r-') plt.show() ``` 在上面的代码中,我们首先生成一些随机数据。将数据转化为矩阵形式,然后使用岭回归进行拟合。最后,使用Matplotlib库绘制数据和拟合曲线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值