网站信息查询,西安企业注册,芜湖有哪些招聘网站,免费服务器网址在本篇文章中#xff0c;我们将探讨分类问题#xff0c;具体的应用场景是贷款审批预测。通过该案例#xff0c;我们将学习如何使用Python处理分类问题#xff0c;训练模型并预测贷款是否会被批准。
案例背景 该数据集包含贷款申请的相关信息#xff0c;目标是预测贷款是否… 在本篇文章中我们将探讨分类问题具体的应用场景是贷款审批预测。通过该案例我们将学习如何使用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(n192, random_state999)
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_firstTrue)
df_test pd.get_dummies(df_test, columns[Property_Area], drop_firstTrue)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(xdf_train[Loan_Status], ydf_train[col])plt.show()# 类别变量的计数图
cat_col df_train.select_dtypes(exclude[int64, float64])
for col in cat_col.columns:sns.countplot(xdf_train[col], huedf_train[Loan_Status])plt.show()6. 处理缺失值 对缺失值进行处理非常重要。对于数值型变量我们通常用中位数填充而对于类别型变量可以根据类别的比例填充。
# 处理缺失值
df_train[LoanAmount].fillna(df_train[LoanAmount].median(), inplaceTrue)
df_test[LoanAmount].fillna(df_test[LoanAmount].median(), inplaceTrue)# 信用历史的缺失值按比例填充
missing df_train[Credit_History].isna().sum()
ratio df_train[Credit_History].value_counts(normalizeTrue)
df_train[Credit_History].fillna(np.random.choice([1, 0], p[ratio[1], ratio[0]], sizemissing), inplaceTrue)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_state999)
rf RandomForestClassifier(random_state999)
sv SVC(random_state999)models [lr, rf, sv]# 交叉验证
kfold KFold(n_splits5, shuffleTrue, random_state999)
for model in models:score cross_val_score(model, df_train.drop(columns[Loan_Status]), df_train[Loan_Status], cvkfold, scoringaccuracy)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))结论 通过本文我们成功地构建了一个用于预测贷款审批状态的分类模型。我们展示了如何处理类别不平衡问题、如何进行数据预处理、如何构建和评估分类模型。此案例提供了一个从数据到模型的完整流程帮助您掌握分类问题的解决方法。 敬请期待后续的更多人工智能应用案例 如果你觉得这篇博文对你有帮助请点赞、收藏、关注我并且可以打赏支持我
欢迎关注我的后续博文我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。
谢谢大家的支持