sklearn 中的 Pipeline 机制

本文探讨了sklearn中的Pipeline机制,强调其在机器学习算法流程中的重要性,提供了一个从加载数据集到构建算法流程的示例。Pipeline允许将特征标准化、降维等步骤与分类器串联,形成流水线式处理。文中通过Pipeline执行流程的分析,展示了如何在训练过程中依次应用StandardScaler、PCA和LogisticRegression,并将其与深度神经网络的多层结构进行了对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from sklearn.pipeline import Pipeline

管道机制在机器学习算法中得以应用的根源在于,参数集在新数据集(比如测试集)上的重复使用

管道机制实现了对全部步骤的流式化封装和管理(streaming workflows with pipelines)。

注意:管道机制更像是编程技巧的创新,而非算法的创新。

接下来我们以一个具体的例子来演示sklearn库中强大的Pipeline用法:

1. 加载数据集

import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import LabelEncoder

df = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/'
                 'breast-cancer-wisconsin/wdbc.data', header=None)
				                 # Breast Cancer Wisconsin dataset

X, y = df.values[:, 2:], df.values[:, 1]
								# y为字符型标签
								# 使用LabelEncoder类将其转换为0开始的数值型
encoder = LabelEncoder()
y = encoder.fit_transform(y)
					>>> encoder.transform(['M', 'B'])
				
### sklearn中的模型选择方法与最佳实践 在`scikit-learn`库中,提供了多种工具用于评估不同模型的表现并从中挑选最优者。这些工具不仅限于分类器或回归器的选择,还包括特征选择、参数调整等方面。 #### 使用交叉验证提高估计准确性 为了更可靠地评价模型性能,推荐采用K折交叉验证(K-fold cross-validation),它能有效减少因数据集划分带来的偏差。通过将原始样本随机分成k个子集(称为“折叠”),依次把其中的k-1个作为训练集而剩下的那个当作测试集来运行算法,最终汇总各次的结果得出平均表现指标[^2]。 ```python from sklearn.model_selection import KFold, cross_val_score from sklearn.datasets import load_iris from sklearn.tree import DecisionTreeClassifier # 加载示例数据集 data = load_iris() X, y = data.data, data.target # 定义模型 model = DecisionTreeClassifier() # 创建KFold对象 kf = KFold(n_splits=5) # 执行交叉验证评分 scores = cross_val_score(model, X, y, cv=kf) print(f'Cross Validation Scores: {scores}') print(f'Mean Score: {scores.mean()}') ``` #### 参数调优:网格搜索(Grid Search)与随机搜索(Randomized Search) 当面对具有多个超参数需优化的情况时,可以利用GridSearchCV实现穷举式的参数组合遍历;对于高维空间下的探索,则更适合应用RandomizedSearchCV来进行采样尝试。这两种方式均支持内置的多核加速功能以加快计算速度。 ```python from sklearn.model_selection import GridSearchCV, RandomizedSearchCV from scipy.stats import uniform param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 4]} grid_search = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy', n_jobs=-1, cv=5) random_search = RandomizedSearchCV(estimator=model, param_distributions={'max_depth': range(3,8), 'min_samples_split':uniform(loc=0,scale=4)},n_iter=10,cv=5,n_jobs=-1) # 进行拟合操作... best_model_gs = grid_search.fit(X,y).best_estimator_ best_model_rs = random_search.fit(X,y).best_estimator_ print('Best Model Parameters via Grid Search:', best_model_gs.get_params()) print('Best Model Parameters via Randomized Search:', best_model_rs.get_params()) ``` #### 利用Pipeline简化工作流管理 构建复杂的机器学习流水线往往涉及到一系列连续的数据转换步骤以及最后的应用建模环节。借助pipeline机制可封装整个流程成为一个整体单元,在此基础上实施诸如交叉验证之类的高级特性变得异常简便。 ```python from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler pipe_steps = [('scaler',StandardScaler()), ('classifier',DecisionTreeClassifier())] pipeline = Pipeline(pipe_steps) # 应用之前定义好的参数搜索策略到管道上... gs_pipeline = GridSearchCV(pipeline,param_grid=param_grid,cv=5,n_jobs=-1) rs_pipeline = RandomizedSearchCV(pipeline,param_distributions={'classifier__max_depth':range(3,8),'classifier__min_samples_split':uniform(loc=0,scale=4)},cv=5,n_jobs=-1) final_best_model_gs = gs_pipeline.fit(X,y).best_estimator_ final_best_model_rs = rs_pipeline.fit(X,y).best_estimator_ print('Final Best Model via Grid Search with Pipeline:', final_best_model_gs.named_steps['classifier'].get_params()) print('Final Best Model via Randomized Search with Pipeline:', final_best_model_rs.named_steps['classifier'].get_params()) ```
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值