【问题标题】:How do you utilize array output from OneHotEncoder您如何利用 OneHotEncoder 的数组输出
【发布时间】:2021-08-20 04:24:18
【问题描述】:

这里是 Python 初学者...

试图了解如何使用 sklearn.preprocessing 库中的 OneHotEncoder。我非常有信心将它与 fit_transform 结合使用,这样结果也可以适合测试数据框。我感到困惑的是如何处理生成的编码数组。然后您是否将 ohe 结果转换回数据帧并将其附加到现有的训练/测试数据帧?

ohe 方法似乎比 pd.get_dummies 方法麻烦得多,但据我了解,使用 ohe 和 fit_transform 可以更轻松地将相同的转换应用于测试数据。

搜索了几个小时,但在试图找到一个好的答案时遇到了很多麻烦。

以广泛使用的泰坦尼克号数据集为例:

ohe = OneHotEncoder()
imp = SimpleImputer()

ct = make_column_transformer(
    (imp, ['Age']),
    (ohe, ['Sex', 'Embarked']),
    remainder='passthrough')
ct.fit_transform(train)

结果:

array([[22.        ,  0.        ,  1.        , ...,  1.        ,
         0.        ,  7.25      ],
       [38.        ,  1.        ,  0.        , ...,  1.        ,
         0.        , 71.2833    ],
       [26.        ,  1.        ,  0.        , ...,  0.        ,
         0.        ,  7.925     ],
       ...,
       [29.69911765,  1.        ,  0.        , ...,  1.        ,
         2.        , 23.45      ],
       [26.        ,  0.        ,  1.        , ...,  0.        ,
         0.        , 30.        ],
       [32.        ,  0.        ,  1.        , ...,  0.        ,
         0.        ,  7.75      ]])

您是否将结果数组直接传递到变量中,例如 X 和 y 以便 train_test_split 运行最终模型?或者有没有办法将结果转换回带有列标签的数据框以进行进一步的 EDA?

【问题讨论】:

    标签: python python-3.x machine-learning scikit-learn data-science


    【解决方案1】:

    您的直觉是正确的:pandas.get_dummies() 更易于使用,但使用 OHE 的优势在于它始终将相同的转换应用于看不见的数据。您还可以使用picklejoblib 导出实例并在其他脚本中加载它。

    可能有一种方法可以将编码的列直接重新附加回原始pandas.DataFrame。就个人而言,我会走很长的路。也就是说,我安装编码器,转换数据,将输出附加回 DataFrame 并删除原始列。

    # Columns to encode
    cols = ['Sex','Embarked']
    
    # Initialize encoder
    ohe = OneHotEncoder()
    
    # Fit to data
    ohe.fit(df[cols])
    
    # Declare encoded data as new columns in `df`
    df[ohe.get_feature_names] = ohe.transform(df[cols])
    
    # Drop unencoded columns
    df.drop(cols, axis=1, inplace=True)
    

    最后,我注意到你说:

    我很有信心将它与 fit_transform 结合使用,这样结果也可以适合测试数据框。

    我想指出的是,您应该不要再次安装编码器!相反,您应该在处理新数据时使用ohe.transform(X_test[cols])。不要再次使用fit_transform(),否则结果可能会因数据集而异。

    【讨论】:

    • 谢谢阿图罗!是的,我很高兴您指出不再适合测试数据。使用 OneHotEncoder 似乎有很多优点,但我很少看到它实现。
    猜你喜欢
    • 1970-01-01
    • 2016-11-25
    • 2021-01-18
    • 2010-09-26
    • 2021-06-13
    • 1970-01-01
    • 2018-10-31
    • 2018-06-06
    • 2014-07-31
    相关资源
    最近更新 更多