300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python逻辑回归模型建模步骤_逻辑回归建模及变量重要性可视化(Python实现)

python逻辑回归模型建模步骤_逻辑回归建模及变量重要性可视化(Python实现)

时间:2019-03-24 22:44:54

相关推荐

python逻辑回归模型建模步骤_逻辑回归建模及变量重要性可视化(Python实现)

一、逻辑回归背景知识

逻辑回归(Logistic Regression)是最常用的分类算法之一,因其简单直观可解释而广受欢迎。它来源于统计学中的广义线性模型(GLM),也是机器学习领域的基本算法。

因本文重在分享对模型变量重要性的可视化,故在这里不对模型原理做过多说明。感兴趣的读者可以参考以下几篇文章。

简单地说,逻辑回归模型的变量系数,反映变量变动对比值比y/1-y(odd)的影响,即对样本X作为正例的相对可能性的影响。

这里我们先建立模型,输出系数,供后面可视化使用。

#=============== 逻辑回归 =================

#加载包

import pandas as pd

import numpy as np

import matplotlib.pyplot as plt

#数据读入

filename='loandata.xls'

data=pd.read_excel(filename)

data.head()

#数据准备

X_data = data.drop(['违约'],axis=1)

print(X_data.head())

y_data = np.ravel(data[['违约']])

#划分数据集

from sklearn.model_selection import train_test_split

X_train,X_test,y_train,y_test = train_test_split(X_data,y_data,random_state=1)

X_train.shape

X_test.shape

#建立模型

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression ()

lr.fit(X_train,y_train)

lr.predict(X_test)

#输出模型系数

print('训练模型自变量参数为:',lr.coef_)

print('训练模型截距为:',lr.intercept_)

#模型评价

print('模型的平均正确率为:',lr.score(X_test,y_test))

#看下预测精度

from sklearn.metrics import accuracy_score

y_predict=lr.predict(X_test)

accuracy_score(y_test,y_predict)

二、变量重要性的可视化

利用sklearn,我们可以很容易地建立逻辑回归模型。建模完毕后,除了直接调用 lr.predict 函数进行预测,往往还需要对模型进行解释,看看哪些变量对目标值(这里是logit(y/1-y))的影响更大。但逻辑回归不同于随机森林等基于树的模型,模块中没有直接对变量重要性进行可视化的函数。因此,我们只能先输出变量系数coef_,然后利用Matplotlib等绘图包进行可视化。

可视化模型系数时,条形图通常是个不错的选择。但如果直接调用pandas的plot接口作图,会存在两个问题:第一,条形顺序依靠模型中的变量顺序,无法对变量重要性进行排序;第二,条形图中无法显示模型系数具体数值,只能简单依靠条形长短直观判断,不够精确。

因此,一个清晰的变量重要性条形图应该具有两个特点:

对变量重要性进行排序,条形图的条形顺序按照变量的系数大小从高到矮进行排列。

将变量系数直接显示在图中,方便直接比较数值大小。

这里分享我的代码,供大家参考。

1、系数排序,正负值分开

#============= 变量重要性可视化 =============

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文宋体

plt.rcParams['axes.unicode_minus']=False #显示负号

# 1、简单排序,正负分开按顺序

coef_LR = pd.Series(lr.coef_.flatten(),index = X_test.columns,name = 'Var')

plt.figure(figsize=(8,8))

coef_LR.sort_values().plot(kind='barh')

plt.title("Variances Importances")

出图效果如下:

2、竖直柱形图,正负值而分开,显示系数数值

# 2、柱形图

#变量重要性排序

coef_lr = pd.DataFrame({'var' : X_test.columns,

'coef' : lr.coef_.flatten()

})

index_sort = np.abs(coef_lr['coef']).sort_values(ascending = False).index

coef_lr_sort = coef_lr.loc[index_sort,:]

# 变量重要性柱形图

plt.figure(figsize=(14,8))

x, y = coef_lr_sort['var'], coef_lr_sort['coef']

rects = plt.bar(x, y, color='dodgerblue')

plt.grid(linestyle="-.", axis='y', alpha=0.4)

plt.tight_layout()

y1 = y[ y > 0];x1 = x[y1.index]

for a,b in zip(x1,y1):

plt.text(a ,b+0.02,'%.2f' %b, ha='center',va='bottom',fontsize=12)

y2 = y[ y < 0];x2 = x[y2.index]

for a,b in zip(x2,y2):

plt.text(a ,b-0.02,'%.2f' %b, ha='center',va='bottom',fontsize=12)

出图效果如下:

3、水平柱形图,正负值分开,显示系数数值

# 变量重要性排序

coef_lr = pd.DataFrame({'var' : X_test.columns,

'coef' : lr.coef_.flatten()

})

index_sort = np.abs(coef_lr['coef']).sort_values().index

coef_lr_sort = coef_lr.loc[index_sort,:]

# 水平柱形图绘图

fig,ax=plt.subplots()

x, y = coef_lr_sort['var'], coef_lr_sort['coef']

rects = plt.barh(x, y, color='dodgerblue')

plt.grid(linestyle="-.", axis='y', alpha=0.4)

plt.tight_layout()

#添加数据标签

for rect in rects:

w = rect.get_width()

ax.text(w, rect.get_y()+rect.get_height()/2,'%.2f' %w,ha='left',va='center')

出图效果如下:

个人比较喜欢最后一种。当变量较多时,采用水平条形图,变量名称看的更加清楚。

对于多元线性回归等其他可以输出变量系数的模型,都可以采用以上方式将模型系数进行可视化,从而更加直观地展现变量重要性。

本文地址:/weixin_45494886/article/details/107433359

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。