【问题标题】:OneHotEncoder from sklearn gives a ValueError when passing categories来自 sklearn 的 OneHotEncoder 在传递类别时会给出 ValueError
【发布时间】:2020-07-28 16:53:01
【问题描述】:

我有一个类名数组:

classes = np.array(['A', 'B'])

我有一个数据数组(但这个数据只包含一个类的实例):

vals = np.array(['A', 'A', 'A'])
vals = vals.reshape(len(vals), 1)

我想对vals 数组进行一次热编码,这样它就可以解释可能存在其他一些类的事实。我正在尝试使用sklearn.preprocessing.OneHotEncoder:

ohe = OneHotEncoder(sparse=False, categories=classes)
ohe.fit_transform(vals)

但是当我运行它时,我得到以下错误:

Traceback (most recent call last):
  File "/usr/local/anaconda3/envs/my_project/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 3331, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-10-08d325b5e8a7>", line 1, in <module>
    ohe.fit_transform(vals)
  File "/usr/local/anaconda3/envs/my_project/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 372, in fit_transform
    return super().fit_transform(X, y)
  File "/usr/local/anaconda3/envs/my_project/lib/python3.6/site-packages/sklearn/base.py", line 571, in fit_transform
    return self.fit(X, **fit_params).transform(X)
  File "/usr/local/anaconda3/envs/my_project/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 347, in fit
    self._fit(X, handle_unknown=self.handle_unknown)
  File "/usr/local/anaconda3/envs/my_project/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 76, in _fit
    if self.categories != 'auto':
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

【问题讨论】:

    标签: python numpy machine-learning scikit-learn one-hot-encoding


    【解决方案1】:

    你可以用classes适配编码器,然后转换vals

    import numpy as np
    from sklearn.preprocessing import OneHotEncoder
    
    classes = np.array(['A', 'B'])
    vals = np.array(['A', 'A', 'A'])
    vals = vals.reshape(-1, 1)
    
    ohe = OneHotEncoder(sparse=False)
    ohe.fit(classes.reshape(-1, 1))
    
    ohe.transform(vals)
    array([[1., 0.],
           [1., 0.],
           [1., 0.]])
    

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2020-05-28
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-09
      • 2020-04-19
      相关资源
      最近更新 更多