【逻辑回归-银行客户】

逻辑回归:从理论到实践

在本文中,我们将介绍一种被广泛用于二分类问题的机器学习模型——逻辑回归。我们将通过一个实例,深入解析如何在 Python 环境中实现逻辑回归。

源数据下载链接

1. 什么是逻辑回归?

逻辑回归是一种用于解决二分类问题的监督学习模型。它的主要思想是:首先将输入特征与线性回归模型相结合,然后将线性回归的输出通过一个称为 sigmoid 函数的特殊函数转换,使得其输出值落在 (0, 1) 之间,代表了正类的概率。具体地,逻辑回归模型的形式可以表示为:

其中,(P(Y=1|X)) 是在给定输入特征 (X) 的情况下,目标变量 (Y) 为正类的概率;(w_0, w_1, …, w_n) 是模型需要学习的参数;(X_1, X_2, …, X_n) 是输入特征。这个方程的右侧部分就是 sigmoid 函数,其图像是一个 S 形曲线,可以将任何实数映射到 (0, 1) 之间。

2. Python 实现逻辑回归:

接下来,我们将通过一个完整的例子来展示如何在 Python 中实现逻辑回归模型。

2.1 数据预处理

在进行机器学习模型的训练之前,我们首先需要对数据进行预处理。在这个例子中,我们使用了一个名为 “bank-full.csv” 的数据集。这个数据集包含了一些银行客户的信息,以及他们是否订阅了定期存款(这是我们的目标变量,用 “y” 表示)。

首先导入了所需的库,并读取数据集:

import pandas as pd
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
import seaborn as sns

sns.set(style='white')
sns.set(style='whitegrid', color_codes=True)

data = pd.read_csv('bank-full.csv', sep=';', quotechar='"', header=0)
data.dropna(inplace=True)
print(data.head())
print(data.shape)
print(list(data.columns))

然后,我们对数据集中的每个属性的所有可能值进行了查询:

data['education'].unique()
print("education的所有可能值:")
print(data['education'].unique())
...

查询了目标变量 “y” 的值的分布,并通过柱状图进行可视化:

data['y'].value_counts()
print(data['y'].value_counts())

sns.countplot(x='y', data=data, palette='hls')
plt.show()

# 计算y值分布的百分比
count_no_sub = len(data[data['y'] == 'no'])
count_sub = len(data[data['y'] == 'yes'])
pct_of_no_sub = count_no_sub / (count_no_sub + count_sub)
print('未开户的百分比:%.2f%%' % (pct_of_no_sub * 100))
pct_of_sub = count_sub / (count_no_sub + count_sub)
print('开户的百分比:%.2f%%' % (pct_of_sub * 100))

通过计算y值分布得知,原始数据集的分布不均匀,需要对其进行处理






对不是数值型的数据进行独热编码

# 对分类变量(cat_vars)进行独热编码
cat_vars = ['job', 'marital', 'education', 'default', 'housing', 'loan', 'contact', 'month', 'poutcome']
for var in cat_vars:
    cat_list = pd.get_dummies(data[var], prefix=var)
    data = data.join(cat_list)
data_final = data.drop(cat_vars, axis=1)

print(data_final.columns.values)


由于之前发现原始数据集关于y值的分布并不均匀,所以需要对其处理,使用smote方法对数据进行过采样。

# 使用smote方法对数据进行过采样
from imblearn.over_sampling import SMOTE
X = data_final.loc[:, data_final.columns != 'y']
y = data_final.loc[:, data_final.columns == 'y'].values.ravel()

os = SMOTE(random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

columns = X_train.columns
os_data_X, os_data_y = os.fit_resample(X_train, y_train)
os_data_X = pd.DataFrame(data=os_data_X, columns=columns)
os_data_y = pd.DataFrame(data=os_data_y, columns=['y'])

# 检查过采样后的数据
print('过采样后的数据个数:', len(os_data_X))
print('未开户的个数:', len(os_data_y[os_data_y['y'] == 'no']))
print('开户的个数:', len(os_data_y[os_data_y['y'] == 'yes']))
print('未开户的百分比:%.2f%%' % (len(os_data_y[os_data_y['y'] == 'no']) / len(os_data_X) * 100))
print('开户的百分比:%.2f%%' % (len(os_data_y[os_data_y['y'] == 'yes']) / len(os_data_X) * 100))

2.2 模型训练和评估

在完成了数据预处理之后,我们就可以开始训练我们的逻辑回归模型了。在这个过程中,我们会使用到 sklearn 库的 LogisticRegression 类。我们首先会将数据集划分为训练集和测试集,然后在训练集上训练模型,在测试集上评估模型的性能。

# 逻辑回归模型
from sklearn.linear_model import LogisticRegression
from sklearn import metrics

logreg = LogisticRegression()
logreg.fit(os_data_X, os_data_y.values.reshape(-1))
# 使用逻辑回归模型进行预测
y_pred = logreg.predict(X_test)
print('逻辑回归模型的准确率:', metrics.accuracy_score(y_test, y_pred))

from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

# 可视化混淆矩阵
from sklearn.metrics import confusion_matrix
confusion_matrix = confusion_matrix(y_test, y_pred)
print(confusion_matrix)

# 计算和绘制二分类模型的 ROC 曲线和计算 ROC AUC 分数
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.preprocessing import LabelEncoder

# 创建 LabelEncoder 实例
le = LabelEncoder()

# 将目标变量和预测结果编码为数值标签
y_test_encoded = le.fit_transform(y_test)
y_pred_encoded = le.transform(logreg.predict(X_test))

# 计算 ROC AUC 分数
logit_roc_auc = roc_auc_score(y_test_encoded, y_pred_encoded)

# 计算 ROC 曲线
fpr, tpr, thresholds = roc_curve(y_test_encoded, logreg.predict_proba(X_test)[:, 1])

# 绘制 ROC 曲线
plt.figure()
plt.plot(fpr, tpr, label='Logistic Regression (area = %0.2f)' % logit_roc_auc)
plt.plot([0, 1], [0, 1], 'r--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

结果如下:

混淆矩阵:

3. 结论

逻辑回归可以应用于各种二分类问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/98914.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为 连接OSPF和RIP网络---OSPF和RIP网络相互引入

路由引入简介 不同路由协议之间不能直接共享各自的路由信息,需要依靠配置路由的引入来实现。 获得路由信息一般有3种途径:直连网段、静态配置和路由协议。可以将通过这3种途径获得的路由信息引入到路由协议中,例如,把直连网段引入…

【python爬虫】9.带着小饼干登录(cookies)

文章目录 前言项目:发表博客评论post请求 cookies及其用法session及其用法存储cookies读取cookies复习 前言 第1-8关我们学习的是爬虫最为基础的知识,从第9关开始,我们正式打开爬虫的进阶之门,学习爬虫更多的精进知识。 在前面几…

Databricks 入门之sql(二)常用函数

1.类型转换函数 使用CAST函数转换数据类型(可以起别名) SELECTrating,CAST(timeRecorded as timestamp) FROMmovieRatings; 支持的数据类型有: BIGINT、BINARY、BOOLEAN、DATE 、DECIMAL(p,s)、 DOUBLE、 FLOAT、 INT、 INTERVAL interva…

Linux服务器部署JavaWeb后端项目

适用于:MVVM前后台分离开发、部署、域名配置 前端:Vue 后端:Spring Boot 这篇文章只讲后端部署,前端部署戳这里 目录 Step1:服务器上搭建后端所需环境1、更新服务器软件包2、安装JDK83、安装MySQL4、登录MySQL5、修…

Hadoop Yarn 核心调优参数

文章目录 测试集群环境说明Yarn 核心配置参数1. 调度器选择2. ResourceManager 调度器处理线程数量设置3. 是否启用节点功能的自动检测设置4. 是否将逻辑处理器当作物理核心处理器5. 设置物理核心到虚拟核心的转换乘数6. 设置 NodeManager 使用的内存量7. 设置 NodeManager 节点…

「操作系统」1. 基础

前言:操作系统基础八股文 文章目录 一 、操作系统基础1.1 什么是操作系统?1.2 什么是系统调用1.3 什么是中断 🚀 作者简介:作为某云服务提供商的后端开发人员,我将在这里与大家简要分享一些实用的开发小技巧。在我的职…

Matlab(画图进阶)

目录 大纲 1.特殊的Plots 1.1 loglog(双对数刻度图) ​1.3 plotyy(创建具有两个y轴的图形) 1.4yyaxis(创建具有两个y轴的图) 1.5 bar 3D条形图(bar3) 1.6 pie(饼图) 3D饼图 1.7 polar 2.Stairs And Ste阶梯图 3.Boxplot 箱型图和Error Bar误差条形图 3.1 boxplot 3.2 …

sap 一次性供应商 供应商账户组 临时供应商

sap中有一次性供应商这个名词,一次性供应商和非一次性供应商又有什么区别呢? 有如何区分一次性供应商和非一次性供应商呢? 1 区分一次性供应商和非一次性供应商的标志 在供应商的表LFA1中有个字段标示XCPDK(一次性科目&#xff…

xxl-job学习(一篇文章解决)

前言:学习xxl-job需要有git,springboot的基础,学起来就很简单 xxl-job是一个分布式的任务调度平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线&a…

二、Mycat2 相关概念及读写分离

第三章 Mycat2 相关概念 3.1 概念描述 1、分库分表 按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路 径的分表。 解读:分库:一个电商项目,分为用户库、订单库等等。 分表:一张订单表数据数百万&#xff…

树模型与集成学习:LightGBM

目录 树模型与集成学习 LightGBM 的贡献 LightGBM 的贡献:单边梯度抽样算法 LightGBM 的贡献:直方图算法 LightGBM 的贡献:互斥特征捆绑算法 LightGBM 的贡献:深度限制的 Leaf-wise 算法 树模型与集成学习 树模型是非常好的…

《Java极简设计模式》第05章:原型模式(Prototype)

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/j…

顺序表链表OJ题(2)->【数据结构】

W...Y的主页 😊 代码仓库分享 💕 前言: 单链表的结构常常不完美,没有双向链表那么”优秀“,所以繁衍出很多OJ练习题。今天我们继续来look look数据结构习题。 下面就是OJ时间!!! …

基于MQTT协议的物联网关

随着工业领域的不断发展,数字化转型已经成为企业迈向未来的必由之路。在这个数字化浪潮中,HiWoo Box以其强大的功能和创新的设计,在工业物联网领域被越来越多的人所熟知。特别是其基于MQTT协议的物联网关能力,也为企业实现智能化数…

运动耳机需要具备哪些功能、挂耳式运动蓝牙耳机推荐

作为运动爱好者,长时间的运动很容易枯燥,所以我会选择佩戴耳机来缓解运动的枯燥感,一款好的运动耳机可以让运动变得更加激情,还可以更好的享受运动的乐趣。 但现在的运动耳机产品实在是五花八门,到底什么样的运动蓝牙耳…

html-dom核心内容--四要素

1、结构 HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。 2、核心关注的内容:“元素”,“属性”,“修改样式”,“事件反应”。>四要素…

uni-app:允许字符间能自动换行(英文字符、数字等)

<template><view class"container"><!-- 这里是你的文本内容 -->{{ multilineText }}</view> </template><style> .container {word-break: break-all; } </style>例如&#xff1a; <template><view class"…

使用 Amazon Lambda 进行无服务器计算:云架构中的一场革命

引言 十年前,无服务器架构还像是痴人说梦。不再如此了! 有了 Amazon Lambda,我们现在可以建构和运行应用程序而不需要考虑服务器。云供应商会无缝地处理所有服务器的供应、扩展和管理。我们只需要关注代码。 这为云部署带来了前所未有的敏捷性、自动化和优化。但是,要发挥它的…

DC/DC开关电源学习笔记(二)开关电源的分类

&#xff08;二&#xff09;开关电源的分类 1.DC/DC类开关电源2.AC/DC变换器3.电路结构分类4.功率开关管分类5.电路拓扑分类 根据变换方式&#xff0c;电源产品有下列四大类&#xff1b; &#xff08;1&#xff09;&#xff1a;第一大类&#xff1a;AC/DC开关电源&#xff1b; …

JVM-性能优化工具 MAT

一、MAT下载和安装 1、概述 MAT&#xff08;Memory Analyzer Tool&#xff09;工具是一款功能强大的]ava堆内存分析器。可以用于查找内存泄漏以及查看内存消耗情况。MAT是基于Eclipse开发的&#xff0c;不仅可以单独使用&#xff0c;还可以作为插件的形式嵌入在Eclipse中使用…