在Sklearn管道中保留列名称

时间:2017-11-15 07:03:07

标签: python pandas numpy scikit-learn preprocessor

Staskoverflow! 我是Python中机器学习的完整菜鸟。我确实经历了一堆书并练习了大量的代码。似乎或多或少智能模型选择需要做一些版本的gridsearch(我正在研究随机CV搜索作为最佳选择)。所以我正在制作我的管道 - 在这个阶段我通过dtype编写了一个自定义列选择器,并转向定制的imputers和标准化器。在转换之后,我成功地建立了一个功能联盟以获得更多乐趣。

我的列选择器返回包含所有原始列名的数据框。在管道中跟随它的imputer返回一个numpy数组。所有以下变换器如标准器显然都得到一个数组并返回一个数组。我用dir()检查了imputer并得到了这个输出:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', 
'__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', 
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', 
'__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', 
'__subclasshook__', '__weakref__', '_dense_fit', '_get_param_names',
'_sparse_fit', 'axis', 'copy', 'fit', 'fit_transform', 'get_params', 
'missing_values', 'set_params', 'statistics_', 'strategy', 'transform', 
'verbose']

我检查了所有内容,并且imputer无处存储原始数据或其列名。

这是否意味着我需要直接修改每个这样的sklearn类(基本上是我自己的模块中的源代码,我将自定义类放入其中)或者为每个类创建我自己的副本并使其返回transform()方法中的DataFrame?

我被R库处理这类东西的方式所破坏,我希望能够解释和可视化正在发生的事情以及原因。

***更新

@VivekKumar

num_pipeline = Pipeline([
("num_selector", VariableSelector(variable_type = "numeric")),
("num_imputer", Imputer(strategy = "median", copy = False))
])

0 个答案:

没有答案