将 OneHotEncoder 与 sklearn_pandas DataFrameMapper 结合使用

using OneHotEncoder with sklearn_pandas DataFrameMapper

我正在尝试使用 sklearn_pandas DataFrameMapper。这会接收列名称以及该列所需的预处理转换函数。像这样,

mapper = sklearn_pandas.DataFrameMapper([
    ('hour',None),
    ('season',sklearn.preprocessing.OneHotEncoder()),
    ('holiday',None)
])

season 是我的 pandas DataFrame 中的一个 int64 列。

这给了我以下错误 - 要解压的值太多。 我知道 OneHotEncoder 采用二维样本而不是一维样本。

我如何才能将此 OneHotEncoder 与 sklearn_pandas 一起使用,还是不可能。

sklearn-pandas正式版在处理一维数组和变换时存在一些问题。试试下面的叉子: https://github.com/dukebody/sklearn-pandas

但是,我认为您可以使用 LabelBinarizer(如 sklearn_pandas 示例中所示)而不是 OneHotEncoder.

来完成您想要的

更新 2015-11-28

sklearn-pandas>=0.0.12 中,您可以通过以下方式解决您的问题:

mapper = sklearn_pandas.DataFrameMapper([
    ('hour',None),
    (['season'],sklearn.preprocessing.OneHotEncoder()),
    ('holiday',None)
])

来自文档:

The difference between specifying the column selector as 'column' (as a simple string) and ['column'] (as a list with one element) is the shape of the array that is passed to the transformer. In the first case, a one dimensional array with be passed, while in the second case it will be a 2-dimensional array with one column, i.e. a column vector.