sklearn Pipeline 和 DataFrameMapper 有啥区别?

Posted

技术标签:

【中文标题】sklearn Pipeline 和 DataFrameMapper 有啥区别?【英文标题】:What's the difference between sklearn Pipeline and DataFrameMapper?sklearn Pipeline 和 DataFrameMapper 有什么区别? 【发布时间】:2017-03-14 03:01:45 【问题描述】:

Sklearn 管道:http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html

DataFrameMapper:https://github.com/paulgb/sklearn-pandas

它们之间有什么区别?

在我看来,sklearn 管道功能更多,但 DataFrameMapper 对我来说更干净。

【问题讨论】:

【参考方案1】:

编辑:请参阅关于可能更好的ColumnTransformer 方法的评论讨论。可能感兴趣的比较表可以在Here找到。


基本上,DataFrameMapper(以及整个 sklearn-pandas 包)旨在将 pandas DataFrame 对象的优势与 sklearn 机器学习包的强大功能相结合。

sklearn.Pipeline 描述了要对矩阵格式执行的转换的有序列表(由 numpy 和 scipy 包提供)。这些转换将按顺序在整个矩阵上一个接一个地执行,并将从头到尾对整个训练和预测过程进行编码。

管道转换(又名步骤)元组的第一部分是它的名称,它对过程没有实际影响,它只是用于可读性。

另一方面,DataFrameMapper 对 pandas 包创建的 DataFrame 对象进行操作,并且可以将转换应用于数据帧的某些部分(不一定适用于整个数据集)。 DataFrames 类似于 numpy 和 scipy 矩阵,在跟踪行和列标签以及元数据方面有一个明显的区别。 DataFrames 操作将确保可以使用逻辑标识而不是索引来访问、操作和读取行和列。

DataFrameMapper 转换元组的第一部分描述了应该通过转换运行哪些列。

三大区别是:

    DataFrameMapper 是一个更灵活的工具,它可以让您在不同的列上执行不同的转换,并且更倾向于转换复杂的数据结构,而sklearn.Pipeline 更倾向于在同构上执行机器学习相关的转换数据集。 DataFrameMapper 可让您保留分配给 pandas DataFrame 对象的注释和标签,而 sklearn.Pipeline 将“减少”任何结果为 numpy/scipy 数组/矩阵。 sklearn.Pipeline 是更稳定且广为人知的软件包的一部分,因此如果稳定性和维护等考虑因素很重要,它可能是“更安全”的选择。

【讨论】:

sklearn.compose.ColumnTransformer 现在提供了处理异构数据集的能力。具体来说,可以创建不同的管道(例如数字和分类特征),然后将这些管道应用到正确的列。 @EvanRosica:当您可以将提到的ColumnTransformer 与标准sklearn Pipeline 一起使用时,您知道使用DataFrameMapper 是否有主要优势吗? @Nerxis 不,我不知道使用DataFrameMapper 有什么主要优势 @EvanRosica:我刚刚发现了这个表格比较Clarify relationship to ColumnTransformer,它显示了一些(相当小的)差异。谢谢。

以上是关于sklearn Pipeline 和 DataFrameMapper 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn Pipeline 和 MultiOutputRegressor 访问属性

sklearn Pipeline 和 DataFrameMapper 有啥区别?

sklearn Pipeline 和Ploynomial

机器学习- Sklearn (交叉验证和Pipeline)

sklearn中pipeline的用法和FeatureUnion

sklearn Pipeline 正确使用