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 有啥区别?