【逻辑回归实例】

逻辑回归:从理论到实践

在本文中,我们将介绍一种被广泛用于二分类问题的机器学习模型——逻辑回归。我们将通过一个实例,深入解析如何在 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 snssns.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 metricslogreg = 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. 结论

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎么给pdf文件加密?pdf文档如何加密

在数字化时代,保护个人和机密信息的重要性越来越受到关注。PDF(Portable Document Format)是一种广泛使用的文件格式,用于共享和存储各种类型的文档。然而,由于其易于编辑和复制的特性,保护PDF文件中的敏感…

Django_自定义文件存储类并将图片上传到FastDFS

目录 将图片到FastDFS和浏览的流程图 使用自定义文件存储类 1、定义存储类 2、创建FastDFS的配置文件 3、修改settings.py配置 4、上传图片进行验证 4.1 定义一个包含ImageField字段的模型类 4.2 登录django的admin后台 4.3 上传图片 4.4 查看图片 源码等资料获取方…

如何在WordPress网站中嵌入TikTok视频(3个简单方法)

您想轻松地将 TikTok 视频嵌入您的 WordPress 网站吗? 如果您已经创建了成功的、病毒式传播的 TikTok,那么将这些视频发布到您的网站也是有意义的。通过这种方式,您只需很少的额外努力就能获得更多的观看次数、参与度和社交媒体关注者。 在…

k8s 的命名空间一直 Terminating

查看命名空间状态,[NAMESPACE] 处于 Terminating kubectl get ns使用强制删除命令没有效果 kubectl delete namespace [namespace] --force --grace-period0 解决办法:删除部署文件 yaml 中的 finalizers 属性 kubectl get namespace [NAMESPACE] -o …

基于LLM大模型开发Web App生成器

随着越来越多的代码生成模型公开可用,现在可以以我们以前无法想象的方式进行文本到网络甚至文本到应用程序。 本教程介绍了一种通过流式传输和渲染内容来生成 AI Web 内容的直接方法。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 1、在 Node 应用程序中…

迅为龙芯3A5000_7A2000COMe_模块和主板

龙芯 3A50007A2000 COME 采用全国产龙芯 3A5000 处理器,基于龙芯自主指令系统 (LoongArche)的 LA464 微结构,并进一步提升频率,降低功耗,优化性能。桥片采用龙芯 7A2000,支持 PCIE 3.0、USB 3.0 和 SATA 3.0、显示接口…

VMware ESXi 7.0 U3n macOS Unlocker OEM BIOS (标准版和厂商定制版)

VMware ESXi 7.0 U3n macOS Unlocker & OEM BIOS (标准版和厂商定制版) ESXi 7.0 标准版和 Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科) 定制版镜像 请访问原文链接:https://sysin.org/blog/vmware-esxi-7-u3-oem/,查看…

【pytest自动化测试框架】从0到1由浅入深详细讲解

一:框架简介 pytest,rf(学关键字语法,报告漂亮),unitest   pytest是python的第三方单元测试框架,可以做系统测试,比unitest更简洁和高效,执行315种以上的插件&#xff…

深度学习(27)——YOLO系列(6)

深度学习(27)——YOLO系列(6) 咱就是说,需要源码请造访:Jane的GitHub:在这里等你哦 嗨,好久不见,昨天结束了yolov7的debug过程,真的在尽力句句理解&#xff…

华为OD机试真题 Java 实现【不开心的小朋友】【2023 B卷 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 大家好,我是哪吒。 做技术,我是认真的,立志于打造最权威的华为OD机试真题专栏,帮助那些与我有同样需求的人&#xff…

免费系统维护清理工具:Onyx for Mac图文安装教程

OnyX 是一款适用于 macOS 的免费系统维护和优化工具。它由法国开发者 Jol Barrire(也称为 Titanium)创建,旨在帮助 macOS 用户管理和优化其计算机系统。 OnyX 提供了许多功能和工具,可以帮助用户执行各种系统维护任务。它是一个非…

阿里云服务器架构x86、GPU、ARM、裸金属和超级计算集群说明

阿里云服务器架构有什么区别?X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、超级计算集群有什么区别?阿里云服务器网分享云服务器ECS架构详细说明: 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU/FPGA/ASIC 弹性裸金属服务…