python - 使用 Scikit-Learn 在管道中包含预测器
问题描述
实际上这个疑问更像是——“为什么这段代码工作正常?”。
我正在从教科书中解决一个问题。具体来说,问题是构建一个具有数据准备阶段(删除 NA 值,执行特征缩放等)和预测阶段的管道,该阶段涉及在转换后的数据集上训练的预测器并返回其预测。
在这里,我们使用了支持向量回归模块 (sklearn.svm.svr)。
我尝试了我的一些代码,但它没有工作。于是我查阅了教科书作者提供的实际解决方案——
prepare_select_and_predict_pipeline = Pipeline([
('preparation', data_prep),
('svm_reg', SVR(kernel='rbf',C=30000,gamma='scale'))
])
prepare_select_and_predict_pipeline.fit(x_train,y_train)
some_data = x_train.iloc[:4]
print("Predictions for a subset of Training Set:",prepare_select_and_predict_pipeline.predict(some_data))
我尝试了这段代码,它确实按预期工作。它如何才能正常工作?我的主要反对意见是:
我们只拟合了数据集,但我们实际上在哪里 转换它?我们不会在任何地方调用 transform() 函数......
另外,我们如何在这个管道中使用 predict() 函数?SVR 可能是该管道的一部分,但其他转换器也是如此,它们没有 predict() 函数。
提前感谢您的回答!
解决方案
当您fit
在scikit-learn 上执行时,会在预处理步骤和最后一步(分类器|回归器)Pipeline
的引擎盖下执行。当您在预处理阶段和最后一步调用scikit - learn时。fit_transform
fit
predict
Pipeline
transform
predict
现在,模型的定义不是最后一步,而是接受数据和输出结果的所有步骤。Pipeline 现在是一个模型。如果您使用具有 Pipelines 的 GridSearchCV,并且 Pipelines 具有预处理和最终步骤(回归器|分类器),那么 GridSearchCV 现在就是模型。
请参阅管道文档
推荐阅读
- pytorch - 如何使用 fastai API 创建学习者
- c++ - 什么是 Foo(int* ptr): ptr_{ptr}{}?
- slack-api - 将附加数据与 Slack Bolt python 中的 block_actions 有效负载一起传递给动作侦听器
- angular - 如何以角度在ckeditor中以正确格式获取数据?
- excel - 为什么我的 Sub 运行时间不同?
- python - 希望从 folium 的画线中了解 lon lat
- google-chrome - Chrome - 隐身行为
- windows - 如何在 Windows 中使用工具“vegeta”
- hyperledger-fabric - Firefox 在安装 Fabric 链码时抛出错误
- ios - 从 UserDefaults 中提取 Picker