news 2026/5/1 4:56:09

python训练营打卡DAY10

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python训练营打卡DAY10

@浙大疏锦行

知识点:

  1. 把之前所有的处理手段都处理一遍,回顾一下全流程,以后就用处理好的部分直接完成
  2. 开始机器学习建模(简单建模,不涉及调参)和评估

一、数据的处理

1.1 导入所需要的包

1.2 查看数据信息

1.3 特征名映射

1.4 删除无用列

1.5 编码映射

1.6 填补缺失值

1.7 异常值处理

1.8 可视化分析

1.9 其他核心部分

特征工程

  • 衍生新特征:根据已有特征创建新的特征,可能会对模型性能有提升。例如,可以计算“Debt - to - Income Ratio”(负债收入比),即“Monthly Debt”与“Annual Income”的比值,来反映客户的债务负担情况。
  • 特征选择:通过相关性分析等方法,选择与目标变量“Credit Default”相关性较高的特征,去除相关性较低或冗余的特征,以降低模型的复杂度和过拟合的风险。

此外,数据不平衡输出我们后面再说

此时你可能会好奇,怎么还没有归一化/标准化?这就需要我们引入数据泄露的观点了

我们之所以推迟归一化或标准化步骤,正是为了避免关键的训练集/测试集数据泄露问题。一旦在划分数据集之前对全集应用此类预处理,训练过程就间接利用了测试集的均值和标准差等统计信息,这会导致对模型在未知数据上性能的乐观估计。课上反复提及的核心:

考试理论:

  1. 不要提前知道考试题。
  2. 调参就需要考2次

二、机器学习模型建模

2.1 数据划分

2.2 数据归一化

只需要对连续特征归一化即可,离散特征编码后虽然是数值,但是不用动

from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler, MinMaxScaler # ---------------------------------------------------------------------- # 定义连续特征列 (需要归一化的特征) # ---------------------------------------------------------------------- continuous_features = [ '年收入', '当前工作年限', '开放账户数量', # 虽为计数,但一般也进行缩放 '信用历史年限', '最大开放信用额度', '距上次拖欠月数', '当前贷款金额', '当前信用余额', '月债务', '信用评分' ] # 初始化归一化器 (MinMaxScaler) scaler = MinMaxScaler() # 仅在训练集上 fit (学习最大值和最小值) # 然后对训练集进行 transform (应用缩放) # 注意:Scikit-learn 返回 NumPy 数组,需要重新赋值给 DataFrame X_train[continuous_features] = scaler.fit_transform(X_train[continuous_features]) # 使用训练集学到的参数 (scaler) 直接对测试集进行 transform # 绝对不能对测试集使用 fit_transform() X_test[continuous_features] = scaler.transform(X_test[continuous_features]) X_test

2.3 模型训练与评估

三行经典代码

  1. 模型实例化
  2. 模型训练(代入训练集)
  3. 模型预测 (代入测试集)

测试集的预测值和测试集的真实值进行对比,得到混淆矩阵

  • 基于混淆矩阵,计算准确率、召回率、F1值,这些都是固定阈值的评估指标

  • AUC是基于不同阈值得到不同的混淆矩阵,然后计算每个阈值对应FPR和TPR,讲这些点连成线,最后求曲线下的面积,得到AUC值

from sklearn.svm import SVC #支持向量机分类器 from sklearn.neighbors import KNeighborsClassifier #K近邻分类器 from sklearn.linear_model import LogisticRegression #逻辑回归分类器 import xgboost as xgb #XGBoost分类器 import lightgbm as lgb #LightGBM分类器 from sklearn.ensemble import RandomForestClassifier #随机森林分类器 from catboost import CatBoostClassifier #CatBoost分类器 from sklearn.tree import DecisionTreeClassifier #决策树分类器 from sklearn.naive_bayes import GaussianNB #高斯朴素贝叶斯分类器 from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score # 用于评估分类器性能的指标 from sklearn.metrics import classification_report, confusion_matrix #用于生成分类报告和混淆矩阵 import warnings #用于忽略警告信息 warnings.filterwarnings("ignore") # 忽略所有警告信息
SVM svm_model = SVC(random_state=42) svm_model.fit(X_train, y_train) svm_pred = svm_model.predict(X_test) print("\nSVM 分类报告:") print(classification_report(y_test, svm_pred)) # 打印分类报告 print("SVM 混淆矩阵:") print(confusion_matrix(y_test, svm_pred)) # 打印混淆矩阵 # 计算 SVM 评估指标,这些指标默认计算正类的性能 svm_accuracy = accuracy_score(y_test, svm_pred) svm_precision = precision_score(y_test, svm_pred) svm_recall = recall_score(y_test, svm_pred) svm_f1 = f1_score(y_test, svm_pred) print("SVM 模型评估指标:") print(f"准确率: {svm_accuracy:.4f}") print(f"精确率: {svm_precision:.4f}") print(f"召回率: {svm_recall:.4f}") print(f"F1 值: {svm_f1:.4f}")

classification_report它会生成所有类别的指标

准确率(Accuracy)是一个全局指标,衡量所有类别预测正确的比例 (TP + TN) / (TP + TN + FP + FN)。它不区分正负类,所以它只有一个值,不区分类别

单独调用的 precision_score, recall_score, f1_score 在二分类中默认只计算正类(标签 1)的性能。由于模型从未成功预测出类别 1(TP=0),所以这些指标对类别 1 来说都是 0。

# 逻辑回归 logreg_model = LogisticRegression(random_state=42) logreg_model.fit(X_train, y_train) logreg_pred = logreg_model.predict(X_test) print("\n逻辑回归 分类报告:") print(classification_report(y_test, logreg_pred)) print("逻辑回归 混淆矩阵:") print(confusion_matrix(y_test, logreg_pred)) logreg_accuracy = accuracy_score(y_test, logreg_pred) logreg_precision = precision_score(y_test, logreg_pred) logreg_recall = recall_score(y_test, logreg_pred) logreg_f1 = f1_score(y_test, logreg_pred) print("逻辑回归 模型评估指标:") print(f"准确率: {logreg_accuracy:.4f}") print(f"精确率: {logreg_precision:.4f}") print(f"召回率: {logreg_recall:.4f}") print(f"F1 值: {logreg_f1:.4f}")

我们来解读一下这个输出的表格,看看能看出来哪些信息?

  1. Precision (精确率) 在所有模型预测为该类别的样本中,真正属于该类别的比例。
  2. Recall (召回率) 在所有真正属于该类别的样本中,被模型正确识别的比例。

因此,分类报告必须给出 0 和 1 的详细指标,以便了解模型在预测两种不同结果时的偏向和能力差异。

准确率 (Accuracy): 这是整体指标,计算的是 (TP+TN)/Total,与 0 或 1 无关,所以只有一个总值。

在二分类问题中,Scikit-learn 的评估函数(如 precision_score, recall_score, f1_score)在默认情况下,会将标签 1 视为重点关注的正类来计算指标。

此外,support(样本数)显示,类别 0 有 997 个样本,而类别 1 只有 400 个样本。这是一个不平衡数据集。逻辑回归模型严重偏向于预测类别 0(未违约),模型在预测 1(违约)时很“谨慎”(高 Precision: 0.89),但它错过了大量真正的违约者(低 Recall: 0.28)。

  1. 精确率关注的是“误报”(False Positive)——即把非违约客户错判为违约客户的错误。预测为违约的客户中有 89.43% 是正确的。误报率低。
  2. 召回率关注的是“漏报”(False Negative)——即把真正违约的客户错判为未违约客户的错误。模型只识别出了所有真正违约客户中的 27.50%。漏报率极高。

其他类似的和上面一样输出

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 4:41:54

Java 多线程机制

版本信息版本号:JDK 1.x 多线程增强版 发布日期:[具体日期] 适用范围:Java 后端开发、并发编程场景功能概述本次更新围绕 Java 多线程机制进行深度优化,聚焦线程安全、性能调优与资源管理三大核心方向,新增多种便捷编程…

作者头像 李华
网站建设 2026/4/18 5:30:16

50、Linux网络与Shell环境配置全解析

Linux网络与Shell环境配置全解析 1. Linux网络基础问题解析 在Linux系统中,网络配置是一项基础且重要的工作。下面我们通过一系列问题来深入了解Linux网络相关知识。 1.1 网络硬件支持类型 Linux支持多种类型的网络硬件,以下是一些常见的选项: - Token Ring :令牌环…

作者头像 李华
网站建设 2026/4/28 5:28:19

GP2040-CE游戏控制器固件终极指南:从零开始打造专属电竞装备

GP2040-CE是一款基于树莓派RP2040芯片的开源游戏控制器固件项目,专为Pico-PIO-USB板设计,支持多种游戏控制器协议。无论你是格斗游戏爱好者、DIY发烧友,还是想要打造个性化游戏装备的玩家,这个项目都能为你提供无限可能。&#x1…

作者头像 李华
网站建设 2026/4/20 21:12:44

终极CORS配置指南:如何在5分钟内解决跨域认证难题

终极CORS配置指南:如何在5分钟内解决跨域认证难题 【免费下载链接】cors Node.js CORS middleware 项目地址: https://gitcode.com/gh_mirrors/co/cors 在现代Web开发中,跨域资源共享(CORS)配置是每个Node.js开发者必须掌握…

作者头像 李华
网站建设 2026/4/18 0:41:13

Zookeeper笔记

一 : zookeeper介绍 概念: zookeeper他是一个分布式协调组件 使用场景1:分布式协调组件使用场景2:分布式锁 ​ zk在实现分布式锁上,可以做到强一致性,关于分布式锁的相关知识,会在之后的ZAB协议中介绍 使用…

作者头像 李华
网站建设 2026/4/19 12:48:34

专业级VBA密码恢复解决方案:快速解锁Office文档宏代码

专业级VBA密码恢复解决方案:快速解锁Office文档宏代码 【免费下载链接】VBA密码解除工具VBAPasswordRecoveryPro1.62 VBA密码解除工具是专为那些不慎丢失Visual Basic for Applications (VBA)项目密码的用户设计的强大软件。版本1.62针对Microsoft Office应用程序中…

作者头像 李华