【问题标题】:How can i apply onehotencoder to one column of an array?如何将 onehotencoder 应用于数组的一列?
【发布时间】:2021-01-18 09:30:48
【问题描述】:

我一直在学习一个教程,试图理解机器学习,同时尝试他在做什么。

我的数组是:

0   44                      72000
2   27                      48000
1   30                      54000
2   38                      61000
1   40                      6.377777777777778101
0   35                      58000
2   38.77777777777777857    52000
0   48                      79000
1   50                      83000
0   37                      67000

第一列曾经是国家名称,但他使用标签编码器将其转换为 0s、1s 和 2s。

他还想使用 OneHotEncoder 将该列转换为更多功能,但由于他的视频有点过时,他将 categorical_features 与 OneHotEncoder 一起使用,但在我的 sklearn 版本中 OneHotEncoder 已更改,我没有不再有那个参数了。

那么我现在如何在该特定功能上使用 OneHotEncoder?

他尝试的是:

onehotencoder = OneHotEncoder(categorical_features = [0])
X = onehotencoder.fit_transform(X).toarray()

【问题讨论】:

    标签: python numpy machine-learning scikit-learn


    【解决方案1】:

    一种基于类别的热编码。您可以使用一个热向量来表示您的数据。例如,如果您有 2 个类,则向量的长度为 2:

    [_,_]
    

    所以每个类都可以在这里用 0 和 1 来表示。表示类索引取 1,其他取 0。例如 class0 将是:

    [1,0]
    

    Class1 将是:

    [0,1]
    

    在您的示例中,您有 3 个类。因此,您的 one-hot-vector 的长度为 3。每个类都表示为:

    Class0 -> [1,0,0]
    Class1 -> [0,1,0]
    Class2 -> [0,0,1]
    

    那么你的数组将如下所示:

    [1,0,0]   44                      72000
    [0,0,1]   27                      48000
    [0,1,0]   30                      54000
    [0,0,1]   38                      61000
    [0,1,0]   40                      6.377777777777778101
    [1,0,0]   35                      58000
    [0,0,1]   38.77777777777777857    52000
    [1,0,0]   48                      79000
    [0,1,0]   50                      83000
    [1,0,0]   37                      67000
    

    我希望这能澄清你的问题。您可以编写自己的函数来执行此操作。

    【讨论】:

      【解决方案2】:

      假设您的数据 X 具有形状(n_rows, features)。 如果你喜欢应用 one-hot encoding 的话,第一列。一种快速的方法是

      onehotencoder = OneHotEncoder()
      one_hot = onehotencoder.fit_transform(X[:,0:1]).toarray()
      

      仅对特定列应用 one-hot 编码的更好方法是使用 ColumnTransformer

      from sklearn.compose import ColumnTransformer
      
      ct = ColumnTransformer([("country", OneHotEncoder(), [0])], remainder = 'passthrough')
      X = ct.fit_transform(X)
      

      【讨论】:

      • 非常感谢。我尝试了第二个,效果很好。
      猜你喜欢
      • 2020-10-06
      • 2018-10-31
      • 2021-08-20
      • 2017-11-19
      • 1970-01-01
      • 2021-09-13
      • 2019-03-25
      • 2020-07-02
      • 2019-05-22
      相关资源
      最近更新 更多