news 2026/6/23 21:10:05

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/6/23 11:12:41

Java 基于多线程机制的专项实验

2.1 验证性实验1、利用两种方式实现多线程:(1) 第一种方式:继承Thread类(2) 第二种方式:继承 java.lang.Runnable 接口第一种方式:public class Test1 {public static void main(String[] args) throws InterruptedException { /…

作者头像 李华
网站建设 2026/6/22 16:35:23

51、Linux 系统中 shell 环境管理与脚本编写全解析

Linux 系统中 shell 环境管理与脚本编写全解析 在 Linux 系统的使用过程中,对 shell 环境进行有效管理以及编写实用的 shell 脚本,能够极大地提升工作效率,让操作更加便捷和自动化。下面将详细介绍 shell 环境管理的相关内容,包括永久修改 shell 提示符、使用命令别名、修改…

作者头像 李华
网站建设 2026/6/23 7:44:16

53、编写高效 Shell 脚本:从基础到实践

编写高效 Shell 脚本:从基础到实践 1. 使用 case 语句处理用户输入 在脚本编写中, case 语句是处理多变量值的强大工具。例如,在修改后的 mkuser.sh 脚本中,用户可以输入要创建的用户名,或者输入 Exit 来退出脚本。 case 语句会检查输入是否为 Exit ,如果是…

作者头像 李华
网站建设 2026/6/23 3:44:25

解锁共享单车数据:从入门到精通的完整分析指南

还在为找不到合适的交通数据分析项目而烦恼吗?想要通过真实案例提升数据技能?这个精心整理的共享单车数据集正是你需要的实践宝库!🎯 【免费下载链接】国内某共享单车数据集 这是一个专门为交通行业学生设计的国内共享单车数据集&…

作者头像 李华
网站建设 2026/6/23 13:16:48

KOOM:如何快速解决Android应用内存泄漏的终极方案

KOOM:如何快速解决Android应用内存泄漏的终极方案 【免费下载链接】KOOM KOOM is an OOM killer on mobile platform by Kwai. 项目地址: https://gitcode.com/gh_mirrors/ko/KOOM 在移动应用开发中,内存泄漏问题一直是困扰开发者的首要难题。当应…

作者头像 李华
网站建设 2026/6/22 14:28:49

API 测试- Postman Vs Rest Assured

介绍: 创新和现代化的目标已经从简单的市场差异化转变为更有道德地追求整个社会的进步。提出了新的要求服务器端软件是持续数字中断和创新移动的结果技术。因此,服务器端编程现在必须适应笔记本电脑,智能手机和硬件平台(如 IoT&a…

作者头像 李华