sklearn跟踪连续变量和离散变量

时间:2018-06-22 16:03:07

标签: python pandas scikit-learn

我正在创建一个自定义Estimator,如果变量是连续变量还是离散变量,则需要执行其他操作。即,通过插入“虚拟变量”获得的任何变量都不满足我的模型对连续变量的假设,并且我的连续变量不满足我的模型对离散变量的假设。因此,我必须区别对待它们。

直到现在,我一直在输入pandas帧,并仅包括作为参数提供的哪些列是连续的列(其余列假定为离散列)的列表:

class MyEstimator(sklearn.base.BaseEstimator):
    def __init__(self, a_list_of_continuous_column_names=None):
        self.a_list_of_continuous_column_names = a_list_of_continuous_column_names
    def fit(self, X,y,**fit_params):
        dcs = self.figure_out_which_columns_are_discrete_(X)
        ccs = self.a_list_of_continuous_column_names
        self.fit_discrete_(X[dcs],y,**fit_params)
        self.fit_continuous_(X[ccs],y,**fit_params)
    ...

一切都很好。但是,随着模型的发展,我已经实现了Pipeline来进行数据转换等。熊猫列名称列表过程变得站不住脚了。首先,我正在做交叉验证的工作,sklearn交叉验证方法不喜欢pandas框架。可以,因为我可以发送列索引列表而不是列名。但是,我的Pipeline也正在执行功能选择。因此,在X实际到达MyEstimator时,列索引自其构造以来已发生变化。

我可以重构sklearn交叉验证以便与DataFrames一起很好地玩,但是我希望有更好的方法,特别是因为我认为需要发送pandas帧刚开始很烂。谁能想到一种使这种事情发生的好方法?

0 个答案:

没有答案