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

python打卡day23@浙大疏锦行

知识回顾:

1.  转化器和估计器的概念

2.  管道工程

3.  ColumnTransformer和Pipeline类

作业:

整理下全部逻辑的先后顺序,看看能不能制作出适合所有机器学习的通用pipeline

一、导入数据库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import time # 导入 time 库
import warnings
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

 二、导入pipeline

from sklearn.pipeline import Pipeline 
from sklearn.compose import ColumnTransformer 
from sklearn.preprocessing import OrdinalEncoder, OneHotEncoder, StandardScaler 
from sklearn.impute import SimpleImputer 
from sklearn.ensemble import RandomForestClassifier 
from sklearn.metrics import classification_report, confusion_matrix 
data = pd.read_csv('heart.csv')
print("原始数据加载完成,形状为:", data.shape)
y = data['target'] # 标签
X = data.drop(['target'], axis=1) 
print("\n特征和标签分离完成。")
print("特征 X 的形状:", X.shape)
print("标签 y 的形状:", y.shape)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
print("\n数据集划分完成 (预处理之前)。")
print("X_train 形状:", X_train.shape)
print("X_test 形状:", X_test.shape)
print("y_train 形状:", y_train.shape)
print("y_test 形状:", y_test.shape)
object_cols = X.select_dtypes(include=['object']).columns.tolist()
numeric_cols = X.select_dtypes(exclude=['object']).columns.tolist()
ordinal_features = ['cp',  'restecg',  'slope', 'ca', 'thal']ordinal_categories = [[0, 1, 2, 3], # Home Ownership 的顺序 (对应1, 2, 3, 4)[0, 1, 2], # Years in current job 的顺序 (对应1-11)[0, 1, 2], # Term 的顺序 (对应0, 1)[0, 1, 2, 3, 4],[0, 1, 2, 3],
]

三、构建有序特征pipeline

ordinal_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')), ('encoder', OrdinalEncoder(categories=ordinal_categories, handle_unknown='use_encoded_value', unknown_value=-1)) 
])
print("有序特征处理 Pipeline 定义完成。")
nominal_features = ['sex','fbs','exang']

四、构建标称特征pipeline

nominal_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')), ('onehot', OneHotEncoder(handle_unknown='ignore', sparse_output=False)) 
])
print("标称特征处理 Pipeline 定义完成。")
continuous_features = [f for f in X.columns if f not in ordinal_features + nominal_features]
continuous_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='most_frequent')),('scaler', StandardScaler()) 
print("连续特征处理 Pipeline 定义完成。")

五、串联预处理器和模型

preprocessor = ColumnTransformer(transformers=[('ordinal', ordinal_transformer, ordinal_features), ('nominal', nominal_transformer, nominal_features), ('continuous', continuous_transformer, continuous_features) ],remainder='passthrough' # 如何处理没有在上面列表中指定的列。
)
print("\nColumnTransformer (预处理器) 定义完成。")
pipeline = Pipeline(steps=[('preprocessor', preprocessor), ('classifier', RandomForestClassifier(random_state=42)) 
])
print("\n完整的 Pipeline 定义完成。")
print("\n--- 1. 默认参数随机森林 (训练集 -> 测试集) ---") 
start_time = time.time() 
pipeline.fit(X_train, y_train)
pipeline_pred = pipeline.predict(X_test)
end_time = time.time() 
print(f"训练与预测耗时: {end_time - start_time:.4f} 秒") 
print("\n默认随机森林 在测试集上的分类报告:") 
print(classification_report(y_test, pipeline_pred))
print("默认随机森林 在测试集上的混淆矩阵:") 
print(confusion_matrix(y_test, pipeline_pred))

http://www.xdnf.cn/news/5703.html

相关文章:

  • 【数据结构】双链表
  • 关于读写锁的一些理解
  • C++的构造函数和析构函数
  • 六、快速启动框架:SpringBoot3实战
  • RDB和AOF的区别
  • KUKA机器人中断编程2—中断相关的指令
  • 传导发射中的模拟手
  • P1460 [USACO2.1] 健康的荷斯坦奶牛 Healthy Holsteins
  • 【人工智能-agent】--Dify中MCP工具存数据到MySQL
  • 数据库实验报告 系统E-R图设计 2
  • [Git]ssh下用Tortoisegit每次提交都要输密码
  • el-table滚动条,都悬浮在页面的底层显示
  • 区块链技术构建电子发票平台“税链”
  • 2025年5月9日
  • CSPM-3 与 CSPM-4:项目管理认证的进阶之路
  • 【AutoGen革命】多智能体协作系统的架构设计与工程实践
  • 什么是数据集市(Data Mart)?
  • 链表面试题7之相交链表
  • Git日志信息
  • MyTinySTL
  • 【idea】快捷键ctrl+shift+F(Find in files)不起作用
  • C++.Windows图形
  • 养生:开启健康生活的全新篇章
  • C++类和对象--中阶
  • js 画立方体软件开发日记2
  • QuickList
  • Docker编排工具详解:Docker Compose与Docker Swarm
  • 08.webgl_buffergeometry_attributes_none ,three官方示例+编辑器+AI快速学习
  • 电子工程领域常见的缩略语及其对应的中文和英文释义
  • Python-Flask-Dive