当前位置: 首页 > news >正文

Python 数据建模与分析项目实战预备 Day 6 - 多模型对比与交叉验证验证策略

✅ 今日目标

  • 引入多种常见分类模型(随机森林、支持向量机、K近邻等)
  • 比较不同模型的训练效果
  • 使用交叉验证提升评估稳定性

🧾 一、对比模型列表

模型类名(sklearn)适用说明
逻辑回归LogisticRegression基础线、易于解释
KNNKNeighborsClassifier基于邻近数据点
决策树DecisionTreeClassifier可视化,易过拟合
随机森林RandomForestClassifier综合表现较优,抗过拟合
支持向量机SVC高维表现好,耗时较久(适合小数据)

🧪 二、交叉验证策略

使用 cross_val_score 进行 K 折交叉验证,常用 cv=5

from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5, scoring="accuracy")

还可以比较不同模型的:

  • accuracy
  • roc_auc
  • f1_macro 等指标

🧪 今日练习任务

编写脚本 model_compare_cv.py,实现:

  • 加载 processed_X_train.csv 与标签

  • 初始化多个模型

  • 对每个模型进行 5 折交叉验证

  • 输出每个模型的平均准确率和 AUC

    # model_compare_cv.py - 多模型比较与交叉验证(优化版)import pandas as pd
    import numpy as np
    import warnings
    from sklearn.model_selection import cross_val_score
    from sklearn.preprocessing import StandardScaler
    from sklearn.linear_model import LogisticRegression
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.ensemble import RandomForestClassifier
    from sklearn.svm import SVC# 忽略数值计算警告
    warnings.filterwarnings("ignore", category=RuntimeWarning)# 读取训练数据
    X = pd.read_csv("./data/stage4/processed_X_train.csv")
    y = pd.read_csv("./data/stage4/processed_y_train.csv").values.ravel()# 检查数值问题
    print("🔎 是否包含 NaN:", X.isna().sum().sum())
    print("🔎 是否包含 Inf:", (~np.isfinite(X)).sum().sum())
    print("🔎 特征最大值:", X.max().max())
    print("🔎 特征最小值:", X.min().min())# 标准化所有特征
    scaler = StandardScaler()
    X_scaled = pd.DataFrame(scaler.fit_transform(X), columns=X.columns)# 定义模型集合
    models = {"Logistic Regression": LogisticRegression(max_iter=1000, random_state=42),"K-Nearest Neighbors": KNeighborsClassifier(),"Decision Tree": DecisionTreeClassifier(random_state=42),"Random Forest": RandomForestClassifier(random_state=42),"SVM": SVC(probability=True, random_state=42),
    }# 定义评价指标
    scoring = ["accuracy", "roc_auc"]# 逐模型评估
    for name, model in models.items():print(f"🔍 模型:{name}")for score in scoring:cv_scores = cross_val_score(model, X_scaled, y, cv=5, scoring=score)print(f"  [{score}] 平均得分: {cv_scores.mean():.4f} ± {cv_scores.std():.4f}")print("-" * 40)print("✅ 所有模型交叉验证完毕。")
    

    运行输出:

    🔎 是否包含 NaN: 0
    🔎 是否包含 Inf: 0
    🔎 特征最大值: 1.6341648019019988
    🔎 特征最小值: -1.6565987890014815
    🔍 模型:Logistic Regression[accuracy] 平均得分: 0.7500 ± 0.0988[roc_auc] 平均得分: 0.8409 ± 0.0656
    ----------------------------------------
    🔍 模型:K-Nearest Neighbors[accuracy] 平均得分: 0.6875 ± 0.0906[roc_auc] 平均得分: 0.7469 ± 0.0751
    ----------------------------------------
    🔍 模型:Decision Tree[accuracy] 平均得分: 0.6438 ± 0.0829[roc_auc] 平均得分: 0.6442 ± 0.0829
    ----------------------------------------
    🔍 模型:Random Forest[accuracy] 平均得分: 0.6937 ± 0.0696[roc_auc] 平均得分: 0.7739 ± 0.0815
    ----------------------------------------
    🔍 模型:SVM[accuracy] 平均得分: 0.6813 ± 0.0914[roc_auc] 平均得分: 0.7829 ± 0.0867
    ----------------------------------------
    ✅ 所有模型交叉验证完毕。
    

文章转载自:
http://aspidistra.isnyv.cn
http://agendum.isnyv.cn
http://bolar.isnyv.cn
http://carpaccio.isnyv.cn
http://arsenic.isnyv.cn
http://caduceus.isnyv.cn
http://btw.isnyv.cn
http://azole.isnyv.cn
http://authorial.isnyv.cn
http://begob.isnyv.cn
http://charmeuse.isnyv.cn
http://bulli.isnyv.cn
http://cdp.isnyv.cn
http://agreeableness.isnyv.cn
http://cactus.isnyv.cn
http://castrum.isnyv.cn
http://catholicise.isnyv.cn
http://chait.isnyv.cn
http://andante.isnyv.cn
http://chaucerian.isnyv.cn
http://carpool.isnyv.cn
http://adversely.isnyv.cn
http://catchy.isnyv.cn
http://aviette.isnyv.cn
http://beadhouse.isnyv.cn
http://anear.isnyv.cn
http://celeriac.isnyv.cn
http://authigenic.isnyv.cn
http://asymmetric.isnyv.cn
http://acrodont.isnyv.cn
http://www.dtcms.com/a/280452.html

相关文章:

  • 2.【C# in .NET】探秘数据类型:从底层机制到实战启示
  • MySQL高级篇(二):深入理解数据库事务与MySQL锁机制
  • 农村养老模式:乡土智慧与时代创新的共生之路
  • 【每日算法】专题十_字符串
  • PySpark Standalone 集群
  • react native学习record one month
  • Flink SQL 性能优化实战
  • 使用Dify+fastmcp 实现mcp服务,内含详细步骤与源码
  • Windows远程FX的编解码器性能优化
  • 算法在前端框架中的集成
  • 三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化
  • 原型继承(prototypal inheritance)的工作原理
  • Java实现word、pdf转html保留格式
  • 19.如何将 Python 字符串转换为 Slug
  • 全面安装指南:在Linux、Windows和macOS上部署Apache Cassandra
  • 基于STM32与中航ZH-E3L字符卡通信在LED屏显示数据
  • 华为敏态开发流程敏捷开发费用估算敏态IT财务分析模板
  • 进程探秘:从 PCB 到 fork 的核心原理之旅
  • Lang3
  • Spring Ioc Bean 到底是什么
  • 朝鲜升级供应链恶意软件XORIndex,再次瞄准npm生态系统
  • 从springcloud-gateway了解同步和异步,webflux webMvc、共享变量
  • 四种高效搭建SpringBoot项目的方式详解
  • 基于UDP/IP网络游戏加速高级拥塞控制算法(示意:一)
  • SpringBoot 实现 Redis读写分离
  • 【PTA数据结构 | C语言版】根据前序序列重构二叉树
  • npm install failed如何办?
  • 【10】MFC入门到精通——MFC 创建向导对话框、属性页类、属性表类、代码
  • centos 安装java 环境
  • FreeRTOS学习笔记——总览