news 2026/2/26 6:37:50

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/2/19 16:32:31

手把手教你大模型离线部署 从硬件选型到性能调优 一

导读 为什么要做离线部署、常见场景与约束 1. 为什么要进行离线部署 离线部署通常指的是在不依赖实时网络连接的情况下运行模型。这种部署方式广泛应用于多种场景,并且有其独特的优势和应用场景: 隐私保护:离线部署可以减少对第三方服务的依赖,从而提高数据的安全性和隐私…

作者头像 李华
网站建设 2026/2/24 5:36:32

48、Linux 本地网络配置全攻略

Linux 本地网络配置全攻略 1. DHCP 客户端配置 理想情况下,DHCP 客户端应在系统启动时运行。这通常通过其自身的启动脚本处理,或者作为主网络配置启动文件的一部分(通常是名为 network 或 networking 的启动脚本)。系统常通过配置文件中的一行来确定是否运行 DHCP 客户端…

作者头像 李华
网站建设 2026/2/18 16:37:20

49、深入了解Linux网络配置与故障诊断

深入了解Linux网络配置与故障诊断 1. 使用PPP连接DSL网络 对于宽带用户,尤其是使用数字用户线路(DSL)连接的用户,有时需要使用点对点协议(PPP)的变体来建立连接。PPP是一种基于登录的互联网访问方式,使用PPP工具发起与远程计算机的连接,过程中需要交换用户名和密码。…

作者头像 李华
网站建设 2026/2/8 1:18:32

54、Linux 系统中的脚本编写与邮件管理指南

Linux 系统中的脚本编写与邮件管理指南 在 Linux 系统的使用过程中,脚本编写和邮件管理是非常重要的技能。下面将详细介绍如何创建简单脚本以及如何管理邮件。 创建简单脚本 创建一个简单的 shell 脚本,该脚本可以让你选择使用 less 命令读取当前目录下的每个文本文件(…

作者头像 李华
网站建设 2026/2/25 10:34:05

56、Linux 系统管理与安全防护全解析

Linux 系统管理与安全防护全解析 1. Linux 系统基础技能 1.1 SQL 学习与应用 SQL 是一个复杂的主题,这里仅作简要介绍。若想深入了解,可参考 SQL 软件包文档,也可阅读相关书籍,如 Alan Beaulieu 的《Learning SQL, 2nd Edition》和 Larry Rockoff 的《The Language of S…

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

用MapsModelsImporter在Unity中构建真实世界:3D地图导入全攻略

想不想把你的游戏世界直接搬到现实中的巴黎街头?或者让玩家在虚拟的纽约曼哈顿自由穿梭?现在这一切都变得触手可及!🚀 【免费下载链接】MapsModelsImporter A Blender add-on to import models from google maps 项目地址: http…

作者头像 李华