基于Python的人工智能应用案例系列(2):分类
在本篇文章中,我们将探讨分类问题,具体的应用场景是贷款审批预测。通过该案例,我们将学习如何使用Python处理分类问题,训练模型并预测贷款是否会被批准。
案例背景
该数据集包含贷款申请的相关信息,目标是预测贷款是否会被批准(Loan_Status为目标变量)。我们将使用多种特征,如性别、婚姻状态、申请人收入、信用记录等,来构建模型。数据集包含两个部分:
- 训练集:614个样本,13个特征,其中
Loan_Status为目标变量。 - 测试集:367个样本,12个特征,不含
Loan_Status列,用于最终测试模型性能。
主要特征
- Loan_ID - 贷款的唯一标识
- Gender - 性别(男/女)
- Married - 婚姻状态(已婚/未婚)
- Dependents - 家庭抚养人数
- Education - 教育水平(研究生/本科)
- Self_Employed - 自雇状态(是/否)
- ApplicantIncome - 申请人收入
- CoapplicantIncome - 共同申请人收入
- LoanAmount - 贷款金额
- Loan_Amount_Term - 贷款期限(月数)
- Credit_History - 信用历史(是否满足要求)
- Property_Area - 房产区域(城市/郊区/农村)
- Loan_Status - 贷款状态(是否批准)
1. 数据加载与初步检查
首先,我们需要导入必要的库并加载数据集。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt# 加载数据集
df_train = pd.read_csv("data/train_LoanPrediction.csv")
df_test = pd.read_csv("data/test_LoanPrediction.csv")# 查看数据形状和前几行
print(df_train.shape)
print(df_train.head())
2. 类别不平衡问题
通过统计Loan_Status的分布,我们发现数据存在类别不平衡问题,大部分样本是贷款已批准的(Loan_Status = Y)。
# 统计Loan_Status的分布
print(df_train['Loan_Status'].value_counts())
为了解决类别不平衡问题,我们可以使用下采样策略,使得Loan_Status的两类样本数量相等。
# 下采样处理
condY = df_train.Loan_Status == 'Y'
condN = df_train.Loan_Status == 'N'
df_trainY = df_train[condY].sample(n=192, random_state=999)
df_trainN = df_train[condN]
df_train = pd.concat([df_trainY, df_trainN])
3. 标签编码
由于分类变量是文本形式,我们需要将其转换为模型能够处理的数值形式。这里使用标签编码将Loan_Status和Education等列转换为数值。
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()
df_train['Loan_Status'] = le.fit_transform(df_train['Loan_Status'])
df_train['Education'] = le.fit_transform(df_train['Education'])
df_test['Education'] = le.transform(df_test['Education'])
4. One-Hot编码
对于多类别变量(如Property_Area),我们使用One-Hot编码,避免模型误解类别之间的顺序。
df_train = pd.get_dummies(df_train, columns=['Property_Area'], drop_first=True)
df_test = pd.get_dummies(df_test, columns=['Property_Area'], drop_first=True)
5. 数据探索性分析(EDA)
通过EDA,我们可以更好地了解特征与目标变量之间的关系。
import seaborn as sns# 数值变量与Loan_Status的关系
num_col = df_train.select_dtypes(include=['int64', 'float64'])
for col in num_col.columns:sns.barplot(x=df_train['Loan_Status'], y=df_train[col])plt.show()# 类别变量的计数图
cat_col = df_train.select_dtypes(exclude=['int64', 'float64'])
for col in cat_col.columns:sns.countplot(x=df_train[col], hue=df_train['Loan_Status'])plt.show()
6. 处理缺失值
对缺失值进行处理非常重要。对于数值型变量,我们通常用中位数填充;而对于类别型变量,可以根据类别的比例填充。
# 处理缺失值
df_train['LoanAmount'].fillna(df_train['LoanAmount'].median(), inplace=True)
df_test['LoanAmount'].fillna(df_test['LoanAmount'].median(), inplace=True)# 信用历史的缺失值按比例填充
missing = df_train['Credit_History'].isna().sum()
ratio = df_train['Credit_History'].value_counts(normalize=True)
df_train['Credit_History'].fillna(np.random.choice([1, 0], p=[ratio[1], ratio[0]], size=missing), inplace=True)
7. 构建模型
在数据预处理完成后,我们可以开始构建分类模型。我们将使用Logistic回归、随机森林和支持向量机(SVM)等多种算法,并通过交叉验证选择最佳模型。
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.model_selection import KFold, cross_val_score# 定义模型
lr = LogisticRegression(random_state=999)
rf = RandomForestClassifier(random_state=999)
sv = SVC(random_state=999)models = [lr, rf, sv]# 交叉验证
kfold = KFold(n_splits=5, shuffle=True, random_state=999)
for model in models:score = cross_val_score(model, df_train.drop(columns=['Loan_Status']), df_train['Loan_Status'], cv=kfold, scoring='accuracy')print(f"{model.__class__.__name__} - Accuracy: {score.mean()}")
8. 模型评估
我们使用准确率、精确率、召回率和F1得分等分类指标对模型进行评估。为了更好地理解模型的表现,我们还将使用混淆矩阵。
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, classification_report, confusion_matrix, ConfusionMatrixDisplay# 假设我们已经有预测结果pred_y
y_pred = rf.predict(df_train.drop(columns=['Loan_Status']))# 输出分类报告
print(classification_report(df_train['Loan_Status'], y_pred))# 混淆矩阵
cm = confusion_matrix(df_train['Loan_Status'], y_pred)
cmp = ConfusionMatrixDisplay(cm, display_labels=[0, 1])
cmp.plot()
9. 模型保存与加载
最后,我们将训练好的模型保存,以便后续使用。
import pickle# 保存模型
filename = 'model/Loan_Prediction.pkl'
pickle.dump(rf, open(filename, 'wb'))# 加载模型
loaded_model = pickle.load(open(filename, 'rb'))
结论
通过本文,我们成功地构建了一个用于预测贷款审批状态的分类模型。我们展示了如何处理类别不平衡问题、如何进行数据预处理、如何构建和评估分类模型。此案例提供了一个从数据到模型的完整流程,帮助您掌握分类问题的解决方法。
敬请期待后续的更多人工智能应用案例!
如果你觉得这篇博文对你有帮助,请点赞、收藏、关注我,并且可以打赏支持我!
欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持!
相关文章:
基于Python的人工智能应用案例系列(2):分类
在本篇文章中,我们将探讨分类问题,具体的应用场景是贷款审批预测。通过该案例,我们将学习如何使用Python处理分类问题,训练模型并预测贷款是否会被批准。 案例背景 该数据集包含贷款申请的相关信息,目标是预测贷款是否…...
演示:基于WPF自绘的中国省份、城市、区县矢量地图
一、目的:演示一个基于WPF自绘的中国省份、城市、区县矢量地图 二、效果 国 省 市 三、功能 支持实际经纬度显示 支持平移,缩放等功能 显示中国地图 显示各个省份地图 显示各个省份地图(包含在表格中,包含缩率图) 显…...
同时拥有独显和核显,怎么让应用程序选择使用哪个GPU?
看你现在使用的是核显还是独显 勾选上GPU引擎选项,后面便会标识你所使用的是哪种显卡,如果是独立显卡,就可以免去后续的操作;如果不是,那么请继续接下来的操作。 将你需要使用独显的程序换成gpu1(独显&am…...
C++八股文之面向对象篇
🤖个人主页:晚风相伴-CSDN博客 思维导图链接:面向对象的性质 持续更新中…… 💖如果觉得内容对你有帮助的话,还请给博主一键三连(点赞💜、收藏🧡、关注💚)吧 …...
点云深度学习系列:Sam2Point——基于提示的点云分割
文章:SAM2POINT:Segment Any 3D as Videos in Zero-shot and Promptable Manners 代码:https://github.com/ZiyuGuo99/SAM2Point Demo:https://huggingface.co/spaces/ZiyuG/SAM2Point 1)摘要 文章介绍了SAM2POINT,这是…...
mysql学习教程,从入门到精通,TOP 和MySQL LIMIT 子句(15)
1、TOP 和MySQL LIMIT 子句内容 在SQL中,不同的数据库系统对于限制查询结果的数量有不同的实现方式。TOP 关键字主要用于 SQL Server 和 Access 数据库中,而 LIMIT 子句则主要用于 MySQL、PostgreSQL(通过 LIMIT/OFFSET 语法)、S…...
备战软考Day02-数据结构与算法
1.基本概念与三要素 1.什么是数据 数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 2.数据元素、数据项 数据元素是数据的基本单位,通常作为一个整体进行…...
COMP 6714-Info Retrieval and Web Search笔记week1
哭了哭了,这周唯一能听懂的就这门 目录 IR(Information Retrieval)是什么?IR的基本假设Unstructured (text) vs. structuredDocuments vs. Database Records比较文本(Comparing Text)IR的范围(Dimensions of IR)IR的任…...
C++在Linux实现多线程和多进程的TCP服务器和客户端通信
多进程版本 服务器 #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <sys/wait.h> #include <signal.h> #include <string&…...
音视频开发常见的开源项目汇总
FFmpeg 地址:https://ffmpeg.org/介绍:FFmpeg 是一个非常强大的开源多媒体框架,它可以用来处理视频和音频文件。它支持多种格式的转换、编码、解码、转码、流处理等。FFmpeg 包括了 libavformat、libavcodec、libavutil、libswscale、libpos…...
Java操控Redis (面经之 使用Redis)
操控Redis的工具 ReactiveRedisTemplate 和 RedisTemplate : RedisTemplate: 它是一个通用的模板类,可以使用任何序列化策略来序列化和反序列化键和值。默认情况下,它使用 JdkSerializationRedisSerializer 序列化值,并使用 Strin…...
【计网】从零开始使用UDP进行socket编程 --- 服务端业务实现
在我们每个人都曾经历过“沮丧”时刻里, 如果我们不能对别人说有益的好话, 那我们最好还是什么也别说。 --- 卡耐基 《人性的弱点》--- 从零开始使用UDP进行socket编程 1 前情提要2 单词翻译2.1 业务需求2.2 设计字典类2.3 服务端与客户端逻辑2.4 运…...
正式发售!《黑神话:悟空》背后的技术力量——UE5与实时云渲染
千呼万唤始出来,《黑神话:悟空》终于在今年8月发售了,相信大家都已经玩起来了! 作为国产游戏的画质巅峰之作,《黑神话:悟空》凭借其令人叹为观止的画面质量和游戏体验,赢得了广泛的好评。这一切…...
qt-creator-10.0.2之后版本的jom.exe编译速度慢下来了
1、Qt的IDE一直在升级,qt-creator的新版本下载地址 https://download.qt.io/official_releases/qtcreator/ 2、本人一直用的是qt-creator-10.0.2版本,官网历史仓库可以下载安装包qt-creator-opensource-windows-x86_64-10.0.2.exe https://download.qt…...
2024CSP-J初赛全真模拟卷选择题篇(原创,难度偏简单)
注意,本卷由再临TSC原创,禁止转载! 本卷难度偏简单,若想要通过初赛本卷应拿80分左右 查看答案的方法: if(设备"PC") { 把光标移到答案上面,选中答案,就会显示(); } …...
【Android 13源码分析】WindowContainer窗口层级-4-Layer树
在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…...
C# 开发教程-中级教程
1.C# 多线程/异步 C# 异步编程Task整理(一) C# 异步编程Task整理(二)异常捕捉 C# 异步编程Task(三) async、await C#中创建线程,创建带参数的线程 C# 线程同步之排它锁/Monitor监视器类 C# lock关键词/lock语句块…...
【C++】c++的继承
目录 思维导图大纲: 1.基类和派生类 1.1 定义格式 1.2 继承方式 1.3 基类和派生类的转换 2. 继承中的作用域(隐藏关系) 2.1 考察继承作⽤域相关选择题 3. 派生类的默认成员函数 4. 继承类模板 5. 一个不能被继承的类 编辑 6.继承与友元 编辑 7. 继…...
【ShuQiHere】 进制转换的世界:从十进制到二进制、十六进制的转换技巧
【ShuQiHere】 在计算机科学中,进制转换(Radix Conversion) 是一个基础且非常重要的技能。无论是理解计算机的存储、数据表示,还是在编程中处理不同的进制数据,进制转换都是不可或缺的。本文将详细讲解 十进制&#x…...
《化工管理》
《化工管理》征稿简则 《化工管理》杂志是由中国石油和化学工业联合会主管、中国化工企业管理协会主办,1986年创刊,在国内外公开发行,国内统一连续出版物号:CN 11—3991/F,中国标准连续出版物号:ISSN 1008—…...
低配显卡也能玩转Flux.1!实测schnell版文生图效果与性能优化技巧
低配显卡也能玩转Flux.1!实测schnell版文生图效果与性能优化技巧 在AI图像生成领域,硬件门槛一直是许多创意工作者的痛点。当主流模型动辄要求RTX 3090级别的显卡时,那些使用GTX 1660甚至更低配置的用户往往只能望而却步。但Flux.1 schnell版…...
OpenClaw对接Qwen2.5-VL-7B:3步完成模型地址配置
OpenClaw对接Qwen2.5-VL-7B:3步完成模型地址配置 1. 为什么选择Qwen2.5-VL-7B作为OpenClaw的视觉大脑 去年我在尝试用OpenClaw自动化处理图片资料时,发现纯文本模型经常对截图内容"睁眼说瞎话"。直到遇到Qwen2.5-VL-7B这个多模态模型&#x…...
利用codex与快马平台,十分钟快速生成待办事项应用原型
最近在尝试快速验证一个待办事项应用的想法,发现用InsCode(快马)平台配合AI模型真的能十分钟就搞出可运行的原型。整个过程特别适合像我这样想快速验证产品概念的人,记录下具体操作和思考过程。 明确核心功能需求 首先梳理出最简功能清单:输入…...
突破实时风格迁移限制:pytorch-AdaIN核心技术与跨场景实践指南
突破实时风格迁移限制:pytorch-AdaIN核心技术与跨场景实践指南 【免费下载链接】pytorch-AdaIN Unofficial pytorch implementation of Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization [Huang, ICCV2017] 项目地址: https://gitcod…...
终极Fuel测试指南:使用MockWebServer编写可靠的Kotlin网络测试
终极Fuel测试指南:使用MockWebServer编写可靠的Kotlin网络测试 【免费下载链接】fuel The easiest HTTP networking library for Kotlin/Android 项目地址: https://gitcode.com/gh_mirrors/fu/fuel Fuel是Kotlin平台最简单易用的HTTP网络库,专为…...
鸿蒙 ArkUI 技巧实战:把商品分类页的“双栏联动 + 吸顶”做顺手
最近做商城类页面时,我发现一个场景几乎每次都会出现:左边是分类,右边是商品列表。 看起来不复杂,但真写起来很容易翻车——左边点了,右边没滚准;右边手动一滑,左边高亮又跟不上;分组…...
浙江清洁拖把这样选
随着现代生活节奏的加快和健康家居理念的普及,家庭清洁工具正经历着一场深刻的智能化、便捷化变革。在众多品类中,清洁拖把作为地面清洁的核心工具,其技术演进与产品创新直接关系到清洁效率和用户体验。本文将聚焦行业痛点、技术方案与应用效…...
三步解决华硕笔记本性能优化难题:G-Helper全方位调控指南
三步解决华硕笔记本性能优化难题:G-Helper全方位调控指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix,…...
论文阅读:AIED 2025 Understanding University Students‘ Use of Generative AI: The Roles of Demographics an
总目录 大模型相关研究 2025版:https://blog.csdn.net/WhiffeYF/article/details/142132328 Understanding University Students’ Use of Generative AI: The Roles of Demographics and Personality Traits https://arxiv.org/abs/2505.02863 该论文题为《Und…...
OpenClaw节能模式:让SecGPT-14B在笔记本上流畅运行的配置
OpenClaw节能模式:让SecGPT-14B在笔记本上流畅运行的配置 1. 为什么需要节能模式? 去年冬天,我的MacBook Pro在运行SecGPT-14B时发烫到可以当暖手宝的程度,续航时间从8小时骤降到不足90分钟。这促使我开始研究OpenClaw的节能配置…...
