目录

1、逻辑回归简要介绍

2、statsmodels中实现逻辑回归

3、sklearn实现逻辑回归

3.1 基础案例代码

3.2 样本不平衡问题处理

3.3 LogisticRegression模型参数说明

3.4 模型调优方法


1、逻辑回归简要介绍

逻辑回归是名为“回归”实为分类的一个算法,在金融行业应用广泛,常被用来预测用户是否违约、是否流失等。逻辑回归是通过概率进行分类预测的,其预测区间是0到1的连续值,这与线性回归有相似之处,线形回归预测值是负无穷到正无穷。逻辑回归和线性回归之间的联系通过连接函数来转化。

(1)逻辑回归的预测值 可通过 logit函数,将其映射为取值在负无穷到正无穷数,可表示为如下的线性回归函数:

(2)线性回归的预测值z 可通过sigmoid函数,将其映射为取值在0到1之间的概率:

逻辑回归的求解和线性回归类似,都是求解参数使预测值接近因变量,在求解参数的过程中也需要注意变量选择和多重共线性这两个问题,其中多重共线性在逻辑回归中的影响并不是很大,可根据实际情况考虑是否进行处理。

2、statsmodels中实现逻辑回归

代码案例付有数据集,可点击进行下载~~~逻辑回归介绍及statsmodels、sklearn实操数据集--accepts.csv-数据挖掘文档类资源-CSDN下载

%matplotlib inline
import os
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy import stats
import statsmodels.api as sm
import statsmodels.formula.api as smfaccepts = pd.read_csv('./data/accepts.csv')
# axis = 0, 把包含nan值的行删除掉; axis = 1, 把包含nan值的列删除掉
accepts = accepts.dropna(axis = 0, how = 'any')# 创建测试集和训练集
train = accepts.sample(frac = 0.7, random_state = 101)
test = accepts[~accepts.index.isin(train.index)]# 逻辑回归建模
formula = 'bad_ind ~ fico_score + bankruptcy_ind + age_oldest_tr + tot_derog + rev_util + ltv + veh_mileage'lg = smf.glm(formula = formula, data = train, family = sm.families.Binomial(sm.families.links.logit())).fit()
lg.summary()

可以看到有些参数是不显著的,可以进一步考虑用向前筛选、向后筛选、逐步法等进行变量筛选,在此不在赘述,一般会用sklearn中的LogisticRegression进行更方便的处理。

3、sklearn实现逻辑回归

3.1 基础案例代码

from sklearn.linear_model import LogisticRegression as LR
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, roc_auc_scoreX = accepts[['fico_score', 'bankruptcy_ind', 'age_oldest_tr', 'tot_derog', 'rev_util', 'veh_mileage']]
X['bankruptcy_ind'] = [0 if i == 'N' else 1  for i  in X['bankruptcy_ind']]  # 处理分类变量bankruptcy_indY = accepts['bad_ind']# 划分训练集与测试
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 101)penalty = ['l1', 'l2']  # 正则化参数
rocaucscore = []    # auc分数
accuracyscore = []  # 准确率
coefs = []          # 参数列表for i in penalty:lr = LR(penalty = i, solver = 'saga', C = 0.7, max_iter = 1000).fit(x_train, y_train)y_pred = lr.predict(x_test)rocaucscore.append(roc_auc_score(y_test, y_pred))accuracyscore.append(accuracy_score(y_test, y_pred))coefs.append(lr.coef_)print('roc_auc_score', rocaucscore)
print('accuracy_score', accuracyscore)
print('l1 coef {} \nl2 coef {}'.format(*coefs))

3.2 样本不平衡问题处理

该案例中由于样本分布不平衡(目标变量1的数量为786,为0的数量为3319),模型预测较难将正样本预测出来,auc过低,对于样本分布不平衡的数据集,一般先进行上采样,然后再建模。

from imblearn.over_sampling import SMOTE
smo = SMOTE(random_state = 50)
x_train_smo, y_train_smo = smo.fit_resample(x_train, y_train)   # smote上采样print('y_train 中 分布\n', y_train.value_counts())
print('\ny_train_smo 中 分布\n', y_train_smo.value_counts())

接下来再进行建模,看预测指标是否有提升

lr = LR(C = 0.8).fit(x_train_smo, y_train_smo)
y_pred = lr.predict(x_test)
print('accuracy_score', accuracy_score(y_test, y_pred))
print('roc_auc_score', roc_auc_score(y_test, y_pred))

可以看到测试集上auc有所提升。

3.3 LogisticRegression模型参数说明

LogisticRegression参数详解
求解器sovler liblinear lbfgs newton-cg sag saga
求解方式 坐标下降法 拟牛顿法的一种,利用损失函数二阶导数矩阵(海森矩阵)来迭代优化损失函数 牛顿法的一种,利用损失函数二阶导数矩阵(海森矩阵)来迭代优化损失函数 随机平均梯度下降,与普通梯度下降法的区别是每次迭代仅仅用一部分的样本来计算梯度 随机平均梯度下降的进化,稀疏多项逻辑回归的首选
支持的惩罚项 penalty L1, L2 L2 L2 L2 L1,L2
L1正则化能将系数收缩为0,而L2只能将系数无限接近于0
惩罚项 C C越小,惩罚力度越强
求解器收敛的最大迭代次数max_iter 默认为100,仅适用于newton-cg,sag,lbfgs求解器。过小会错过最优解,过大计算会变大。
回归类型multi_class

ovr 二分类

auto

ovr 一对多

multinomial 多对多

auto

求解器效果 在大型数据集上运行更快
对未标准化的数据集很有用

3.4 模型调优方法

模型调优一般会通过画学习曲线的方式进行,以正则化参数C的调优为例,可通过模型在测试集上的交叉验证结果来,也可以通过训练集和测试集上的auc等指标趋势来进行判断,如下为参考代码

c = np.arange(0.05, 1, 0.05)   # 参数C的搜索范围
accu_score_test = []   # 测试集上的准确率得分
auc_score_test = []    # 测试集上的auc得分
accu_score_train = []  # 训练集上的准确率得分
auc_score_train = []   # 训练集上的auc得分
cross_value_scores = []  # 交叉验证结果for i in c:# 创建分类器lr = LR(C = i, max_iter = 1000, solver = 'liblinear', penalty = 'l2')# 交叉验证结果, 这里通过scoring参数指定交叉验证结果为auccross_value_scores.append(cross_val_score(lr, x_train_smo, y_train_smo, cv = 5, scoring = 'roc_auc').mean())lr = lr.fit(x_train_smo, y_train_smo)y_pred =  lr.predict(x_test)y_pred_train = lr.predict(x_train_smo)accu_score_train.append(accuracy_score(y_train_smo, y_pred_train))  # 训练集上的准确率auc_score_train.append(roc_auc_score(y_train_smo, y_pred_train))   # 训练集上的aucaccu_score_test.append(accuracy_score(y_test, y_pred))    # 测试集上的准确率auc_score_test.append(roc_auc_score(y_test, y_pred))      # 测试集上的aucfig = plt.figure(figsize = (16, 12))
ax0 = fig.add_subplot(211)
ax0.plot(c, cross_value_scores)
ax0.set_title('auc score of cross value validition')ax1 = fig.add_subplot(223)
ax1.plot(c, accu_score_test, label = 'accu_score_test', color = 'darkorange')
ax1.plot(c, accu_score_train, label = 'accu_score_train', color = 'royalblue')
ax1.set_title('accu_score of train and test')
ax1.legend()ax2 = fig.add_subplot(224)
ax2.plot(c, auc_score_test, label = 'auc_score_test', color = 'darkorange')
ax2.plot(c, auc_score_train, label = 'auc_score_train', color = 'royalblue')
ax2.set_title('auc_score of train and test')
ax2.legend()

逻辑回归介绍及statsmodels、sklearn实操相关推荐

  1. 九、逻辑回归介绍-恶性乳腺癌肿瘤预测

    python编程快速上手(持续更新中-) 文章目录 python编程快速上手(持续更新中-) 3.1 逻辑回归介绍 概述 1 逻辑回归的应用场景 2 逻辑回归的原理 2.1 输入 2.2 激活函数-s ...

  2. 简单粗暴理解与实现机器学习之逻辑回归:逻辑回归介绍、应用场景、原理、损失以及优化...

    作者 | 汪雯琦 责编 | Carol 来源 | CSDN 博客 出品 | AI科技大本营(ID:rgznai100) 学习目标 知道逻辑回归的损失函数 知道逻辑回归的优化方法 知道sigmoid函数 ...

  3. python对逻辑回归进行显著性_python sklearn库实现简单逻辑回归的实例代码

    Sklearn简介 Scikit-learn(sklearn)是机器学习中常用的第三方模块,对常用的机器学习方法进行了封装,包括回归(Regression).降维(Dimensionality Red ...

  4. 详细介绍HDFS的API实操与读写流程

    第 1 章 HDFS 概述 定义 是一个文件系统,是分布式的 使用场景 适合一次写入,多次读出的场景 优点 高容错性.适合处理大数据.可构建在廉价机器上 缺点 不适合低延时数据访问.无法高效的对大量小 ...

  5. Linux之RAID介绍、软RAID5实操配置(失望攒够了就放手,不打扰是我最后的温柔)

    目录 一.什么是RAID(独立冗余磁盘阵列) 二.RAID物理分类 2.1 硬RAID 2.2 软RAID 三.RAID逻辑分类 3.1 RAID0 3.2 RAID1 3.3 RAID5 3.4 R ...

  6. Jmeter分布式压测介绍、原理及实操(一台master-windows控制机,三台slaves-linux负载机)

    前言:大家在使用jmeter压测过程中,可能会度遇到内存溢出的错误,这是为什么呢? 因为jmeter是java写的应用,java应用jvm堆内存heap受负载机硬件限制,虽然我们可以调整堆内存大小,但 ...

  7. 机器学习算法——以癌症分类为例子介绍 逻辑回归(sklearn实现)

    目录 1.逻辑回归介绍 1.1.逻辑回归的应用场景 1.2.逻辑回归的原理 1.2.1 输入: 1.2.2 激活函数 1.3.损失以及优化 1.3.1 损失 1.3.2 优化 总结: 2.逻辑回归ap ...

  8. logisticregression参数_通俗地说逻辑回归【Logistic regression】算法(二)sklearn逻辑回归实战...

    前情提要: 通俗地说逻辑回归[Logistic regression]算法(一) 逻辑回归模型原理介绍 上一篇主要介绍了逻辑回归中,相对理论化的知识,这次主要是对上篇做一点点补充,以及介绍sklear ...

  9. 逻辑回归原理与sklearn实现

    目录 一.逻辑回归介绍 1.应用场景 2.逻辑回归原理 2.1 输入 2.2激活函数 3.损失与优化 3.1 损失(对数似然损失) 3.2 优化 二.逻辑回归API介绍 三.案例实现 四.分类评估方法 ...

最新文章

  1. HDOJ2795 Billboard【线段树】
  2. 带你了解无线网络渗透测试——无线网络嗅探工具Kismet
  3. eclipse打包项目为aar_Eclipse中使用AAR
  4. VC里的#define new DEBUG_NEW
  5. 数组指针和指针数组,函数指针和指针函数,常量指针和指针常量,常量引用
  6. Sqli-labs less 64
  7. python代码转换为pytorch_pytorch使用 to 进行类型转换方式
  8. java csv下载_java 生成csv文件,弹出下载对话框。。。
  9. 2020数字营销白皮书
  10. 飞鸽传书:不知不觉,时间又没了!
  11. 程序员,你能真正掌握多少编程技术?
  12. 第16课 开灯关灯 《小学生C++趣味编程》
  13. c语言边界条件的设置,求解能不能用c或c++语言实现下面的约束条件
  14. HTML判断如果并且,将html转换为js,并且其中含有判断语句
  15. 支持pygame的python有哪些版本_完整构建文件支持PYGAME
  16. chroot--实现系统普通用户在限定目录下活动
  17. NOI题库练习1.4(08)
  18. Python开发技术—面向对象程序设计2
  19. PCB板上的字母代表哪些元器件?一文看全!
  20. 3万字长文概述:通俗易懂告诉你什么是.NET?什么是.NET Framework?什么是.NET Core?

热门文章

  1. 武大计算机科学与技术弘毅学堂,弘毅学堂
  2. C++生成简单WAV文件(三)——根据简谱生成菊花台
  3. 【数据结构】链表(含链式前向星)
  4. 基于windows中委派的攻击思路(下)-基于资源的约束性委派
  5. CSS语法大全,学习笔记
  6. System.Diagnostics 记录
  7. 【C进阶】之结构体类型( struct)
  8. BZOJ 4668 冷战
  9. feature map
  10. 中国标准时间转换为年月日时分秒,指定00:00:00 或23:59:59或当下时分秒