news 2026/7/7 15:29:47

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/7/7 13:56:31

66、深入解析 Linux 安全技术:用户账户与密码管理

深入解析 Linux 安全技术:用户账户与密码管理 1. Linux 备份工具概述 在 Linux 系统中,有多种备份工具可供选择,其中 cpio、dump/restore 和 tar 通常是预安装的。而 amanda 虽然默认未安装,但因其具有高度的灵活性,甚至能备份 Windows 系统,所以广受欢迎。若你想了解更…

作者头像 李华
网站建设 2026/7/7 7:00:38

46、深入理解Linux基础网络配置

深入理解Linux基础网络配置 1. 网络配置的重要性与目标 在当今数字化时代,大多数Linux系统都需要连接到网络,无论是作为客户端、服务器,还是两者兼具。即便是家用电脑和智能手机等专用设备,通常也会连接到互联网。因此,配置Linux的基本网络工具是全面配置Linux系统的必要…

作者头像 李华
网站建设 2026/7/7 12:43:36

Daily Report — Day 7(Beta)

2025-12-12 10:30:00✅ 昨日完成工作(Day 6 落地成果)测试体系深化:zc 完成 Jest TypeScript 异步测试支持配置,成功输出覆盖率报告;lzy 扩展推荐算法异常与边界场景测试用例,单测覆盖率提升至 70%&#x…

作者头像 李华
网站建设 2026/7/7 10:54:32

springboot基于vue的大学生兼职系统_12m097v9

目录 已开发项目效果实现截图开发技术系统开发工具: 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&am…

作者头像 李华
网站建设 2026/7/7 3:08:43

M+ FONTS:免费开源多语言字体解决方案

M FONTS:免费开源多语言字体解决方案 【免费下载链接】MPLUS_FONTS M FONTS 项目地址: https://gitcode.com/gh_mirrors/mp/MPLUS_FONTS M FONTS 是一个优秀的开源字体项目,为全球用户提供高质量的免费字体资源。这个多语言字体集合特别适合需要中…

作者头像 李华
网站建设 2026/7/7 9:06:12

终极Python性能测试工具:pyperf完整使用指南

终极Python性能测试工具:pyperf完整使用指南 【免费下载链接】pyperf Toolkit to run Python benchmarks 项目地址: https://gitcode.com/gh_mirrors/py/pyperf 在Python开发中,性能优化是一个永恒的话题。pyperf作为一款专业的Python性能测试工具…

作者头像 李华