【问题标题】:Python sklearn onehotencoderPython sklearn onehotencoder
【发布时间】:2018-12-27 21:50:17
【问题描述】:

我正在尝试为我的向量的第四个特征编码分类数据,该特征位于一个 numpy 数组中。类别是“4”或“6”。我可以使用以下方法将它们更改为二进制:

 features_in_training_set = [[0 0 0 0 4], [0 0 0 0 4], [0 0 0 0 6],[0 0 0 0 4],[0 0 0 0 6]]

 features_in_training_set[:,4] = LabelEncoder().fit_transform(features_in_training_set[:,4]) 

但是,当然,我需要更改它,以便分类器不会认为“4”大于“6”。但是,当我运行以下命令时:

onehotencoder = OneHotEncoder(categorical_features=[4], handle_unknown='ignore')

features_in_training_set = onehotencoder.fit_transform(features_in_training_set).toarray()

我收到的错误是:

TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

TypeError: Wrong type for parameter `n_values`. Expected 'auto', int or array of ints, got <class 'numpy.ndarray'>

我检查了我是否有任何缺失值或任何字符串,但我没有。所有特征都是整数。

谢谢。

【问题讨论】:

  • 逗号在哪里? features_in_training_set = [[0 0 0 0 4], [0 0 0 0 4], [0 0 0 0 6],[0 0 0 0 4],[0 0 0 0 6]]
  • @Konstantin 这是一个 numpy 数组。 numpy 数组有逗号吗?
  • 加载后为numpy数组。它在哪里转换为 numpy 数组?当您编写这样的代码时,它是一个列表列表,应该有逗号。

标签: python scikit-learn sklearn-pandas


【解决方案1】:

scikit-learn (> 0.20) 中的当前OneHotEncoder 可以处理字符串或其他分类特征本身,不需要首先使用LabelEncoder 将类别编码为数字(或将不同的数字编码为唯一的排序数字) .

此错误是OneHotEncoder 中的一个错误,因为它一直在发展以处理上述情况,同时也应该支持较旧的用例作为您的问题。在代码中添加n_values='auto' 将删除此错误,如下所示:

onehotencoder = OneHotEncoder(categorical_features=[4], n_values='auto', 
                              handle_unknown='ignore')

如果您从代码中删除 handle_unknown 参数,那么这也是可行的,但不应这样做。

在此处查看此问题:

【讨论】:

  • 太好了,这消除了我的错误:) 但是,当我想保持顺序时,我注意到编码的列被附加到特征向量的开头。这可能吗?
  • @user3755632 否。它在文档中提到编码列将在开头,其他列将附加到右侧。如果你想控制,那么look at FeatureUnion
猜你喜欢
  • 2021-12-20
  • 2018-09-01
  • 2023-03-09
  • 2020-05-26
  • 2016-11-25
  • 2021-11-04
  • 2020-07-02
  • 2020-07-15
  • 1970-01-01
相关资源
最近更新 更多