Python sklearn onehotencoder

时间:2018-12-27 21:50:18

标签: python scikit-learn sklearn-pandas

我正在尝试对我的向量的第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'>

我检查了是否缺少任何值或字符串,但没有。所有功能都是整数。

谢谢。

1 个答案:

答案 0 :(得分:1)

当前scikit-learn(> 0.20)中的OneHotEncoder可以处理字符串或其他分类功能本身,而无需先使用LabelEncoder将类别编码为数字(或将不同的数字编码为唯一的排序数字)就像你一样。)

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

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

如果您从代码中删除了handle_unknown参数,那么它也可以工作,但是不应该这样做。

在此处查看此问题: