【问题标题】:How to encode and impute categorical data?如何编码和估算分类数据?
【发布时间】:2020-09-30 04:40:28
【问题描述】:

我有一列包含分类数据和一些 nan 值。我想填充 nan 值而不是删除它们。一开始我真的不知道该怎么做-编码还是估算?我尝试首先使用 LabelEncoder 进行编码,然后使用 KNNImputer 进行估算,但这对我不起作用。最后,我想使用 OneHotEncoder 以适当的形式获取值,以将它们用作 ML 模型的输入。我从这样的事情开始,但这是错误的:(

import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.preprocessing import LabelEncoder
from sklearn.impute import KNNImputer

data = ["coupe", "coupe", "SUV", "coupe", "SUV", "sedan", np.nan, "sedan", np.nan, "coupe"]
X = pd.DataFrame({"type": data})
le = LabelEncoder()
X = le.fit_transform(X)

我不知道如何处理这个问题:

  1. 编码(LabelEncoder)-->输入(KNNImputer)-->OneHotEncoder
  2. Impute(KNNImputer)-->编码(LabelEncoder)-->OneHotEncoder

如果有任何帮助,我将不胜感激。

【问题讨论】:

    标签: python scikit-learn encode categorical-data


    【解决方案1】:

    LabelEncoder 如果与np.nans 一起使用,则会引发TypeError。 首先用虚拟字符串替换它们。一旦它被标签编码,将对应于空值的标签替换回np.nan,这就是你应用KNNImputer的时候

    import numpy as np
    import pandas as pd
    from sklearn.preprocessing import OneHotEncoder
    from sklearn.preprocessing import LabelEncoder
    from sklearn.impute import KNNImputer
    
    data = ["coupe", "coupe", "SUV", "coupe", "SUV", "sedan", np.nan, "sedan", np.nan, "coupe"]
    X = pd.DataFrame({"type": data})
    X[X["type"]  == np.nan] = 'NaN'
    le = LabelEncoder()
    X = le.fit_transform(X)
    #Check the label corresponding to 'NaN' and replace back to `np.nan`
    X[X["type"]  == <LabelOfNaN>] = np.nan
    #Apply KNNImputer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-26
      • 2018-02-15
      • 2019-04-19
      • 1970-01-01
      • 2020-12-21
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多