如果你用类型为int
的标签fit
一个sklearn.preprocessing.LabelEncoder
,在inverse_transform
过程中,它会返回numpy.int64
类型的标签。
from sklearn.preprocessing import LabelEncoderlabels = [2,4,6] # 只是一个`int`列表e = LabelEncoder().fit(labels)encoded = e.transform([4,6,2])decoded = e.inverse_transform(encoded)type(decoded[0])# 返回 <class 'numpy.int64'>
所以我想我有两个问题
- 为什么会这样做?
- 如何在不使用自定义代码的情况下避免这种情况?
(我在使用Flask的jsonify
无法将np.int64
转换为JSON时遇到了这个问题)
回答:
为什么会这样做?
因为transform
和inverse_transform
返回的是numpy数组,并且
在这种情况下,标量类型是int64
。
如何在不使用自定义代码的情况下避免这种情况?
如果你需要获取单个元素,请使用decoded.item(0)
。如果你需要整个数组,请使用decoded.tolist()
。更多信息请参见将numpy数据类型转换为原生Python类型。