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

Python打卡DAY31

今日的示例代码包含2个部分

  1. notebook文件夹内的ipynb文件,介绍下今天的思路
  2. 项目文件夹中其他部分:拆分后的信贷项目,学习下如何拆分的,未来你看到的很多大项目都是类似的拆分方法

知识点回顾

  1. 规范的文件命名
  2. 规范的文件夹管理
  3. 机器学习项目的拆分
  4. 编码格式和类型注解

作业:尝试针对之前的心脏病项目ipynb,将他按照今天的示例项目整理成规范的形式,思考下哪些部分可以未来复用。

src/data/data_loader.py

import pandas as pd
from sklearn.model_selection import train_test_splitdef load_and_split_data(file_path, target_column, test_size=0.2, random_state=42):"""加载数据并划分训练集和测试集"""data = pd.read_csv(file_path)X = data.drop(target_column, axis=1)y = data[target_column]X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)return X_train, X_test, y_train, y_test
src/models/random_forest.py
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix
import timedef train_random_forest(X_train, y_train, X_test, y_test, random_state=42):"""训练随机森林模型并评估性能"""start_time = time.time()model = RandomForestClassifier(random_state=random_state)model.fit(X_train, y_train)y_pred = model.predict(X_test)end_time = time.time()print(f"训练与预测耗时: {end_time - start_time:.4f} 秒")print("\n默认随机森林 在测试集上的分类报告:")print(classification_report(y_test, y_pred))print("默认随机森林 在测试集上的混淆矩阵:")print(confusion_matrix(y_test, y_pred))return model

src/utils/visualization.py

import shap
import matplotlib.pyplot as pltdef plot_shap_values(model, X_test):"""绘制SHAP值的条形图、蜂巢图和依赖图"""explainer = shap.TreeExplainer(model)shap_values = explainer.shap_values(X_test)print("shap_values[0] shape:", shap_values[0].shape)print("X_test shape:", X_test.shape)# SHAP特征重要性条形图print("--- 1. SHAP 特征重要性条形图 ---")shap.summary_plot(shap_values[0], X_test, plot_type="bar", show=False)plt.title("SHAP Feature Importance (Bar Plot)")plt.show()# SHAP特征重要性蜂巢图print("--- 2. SHAP 特征重要性蜂巢图 ---")shap.summary_plot(shap_values[0], X_test, plot_type="violin", show=False, max_display=10)plt.title("SHAP Feature Importance (Violin Plot)")plt.show()# SHAP特征重要性依赖图print("--- 3. SHAP 特征重要性依赖图 ---")shap.dependence_plot('Years in current job', shap_values[0], X_test, show=False)plt.title("SHAP Feature Importance (dependence plot)")plt.show()
src/main.py
from src.data.data_loader import load_and_split_data
from src.models.random_forest import train_random_forest
from src.utils.visualization import plot_shap_valuesif __name__ == "__main__":# 数据加载与划分file_path = "data/raw/heart.csv"target_column = "target"X_train, X_test, y_train, y_test = load_and_split_data(file_path, target_column)# 模型训练与评估model = train_random_forest(X_train, y_train, X_test, y_test)# SHAP值可视化plot_shap_values(model, X_test)

@浙大疏锦行

相关文章:

  • STM32+ESP8266+ONENET+微信小程序上传数据下发指令避坑指南
  • .NET 10 - 尝试一下Minimal Api的Validation新特性
  • LangChain4j入门(六)整合提示词(Prompt)
  • RK3588 ArmNN CPU/GPU ResNet50 FP32/FP16/INT8 推理测试
  • .NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式
  • 如何自学FPGA设计?
  • 2.4.2死锁的处理策略-预防死锁
  • DB31/T 1552-2025《居民电子健康档案应用系统等级评估指南》:上海地方标准全面解析
  • notepad++
  • 【设计模式】基于 Java 语言实现工厂模式
  • 替换word中的excel
  • OpenCV 第6课 图像处理之几何变换(重映射)
  • 水利数据采集MCU水资源的智能守护者
  • numpy数组的复数和时间的操作
  • 软考软件评测师——黑盒测试测试方法
  • vscode 常用调试
  • Linux中的 I/O 复用机制 select
  • win11下docker 的使用方案
  • 信奥赛-刷题笔记-栈篇-T2-P1165日志分析0519
  • AI大模型应用微调服务商分享:微调技术Lora和SFT的异同
  • 年内首次存款利率下调启动:3年期、5年期均下调0.25个百分点
  • 中国戏剧梅花奖终评结果公示,蓝天、朱洁静等15名演员入选
  • 世卫大会再次拒绝涉台提案,国台办:民进党当局再遭挫败理所当然
  • 网络直播间销售玩具盲盒被指侵权,法院以侵犯著作权罪追责
  • 苏州1-4月进出口总值增长6.8%,工业机器人出口额倍增
  • 曾毓群说未来三年重卡新能源渗透率将突破50%,宁德时代如何打好换电这张牌