Scikit的LabelEncoder使用numpy.int64代替inverse_transform中的整数。

时间:2019-06-28 07:35:04

标签: python machine-learning scikit-learn

如果您fit的{​​{1}}标签类型为sklearn.preprocessing.LabelEncoder,则出于某种原因在int期间将返回inverse_transform类型标签。

numpy.int64

所以我想我有2个问题

  1. 为什么要这么做?
  2. 如果没有自定义代码,怎么能避免这种情况?

(当Flask的from sklearn.preprocessing import LabelEncoder labels = [2,4,6] # just a list of `int`s e = LabelEncoder().fit(labels) encoded = e.transform([4,6,2]) decoded = e.inverse_transform(encoded) type(decoded[0]) # returns <class 'numpy.int64'> 无法将jsonify编组为JSON时,我陷入了这个问题)

1 个答案:

答案 0 :(得分:2)

  

为什么要这么做?

因为transforminverse_transform返回numpy数组,并且

  

An item extracted from an array, e.g., by indexing, will be a Python object whose type is the scalar type associated with the data type of the array.

在这种情况下,标量类型为int64

  

如果没有自定义代码,怎么能避免这种情况?

如果需要获取单个元素,请使用decoded.item(0)。如果需要整个数组,请使用decoded.tolist()。有关更多信息,请参见Converting numpy dtypes to native python types