Python sklearn onehotencoder



我正在尝试为我的向量的第 4 个特征编码分类数据,该特征位于 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'>

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

谢谢。

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

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

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

如果从代码中删除 handle_unknown 参数,则这也有效,但不应这样做。

请参阅此处的此问题:

  • https://github.com/scikit-learn/scikit-learn/issues/12881

相关内容

  • 没有找到相关文章

最新更新