【发布时间】:2017-12-01 03:13:04
【问题描述】:
所以,OneHotEncoder 似乎不适用于 np.int64 数据类型(仅限 np.int32)!这是一个代码示例:
import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder
a = np.array([[56748683,8511896545,51001984320],[18643548615,28614357465,56748683],[8511896545,51001984320,40084357915]])
b = pd.DataFrame(a, dtype=np.int64)
ohe = OneHotEncoder()
c = ohe.fit_transform(b).toarray()
当我运行此程序时,我收到以下错误:“ValueError: X 只需要包含非负整数。”
如您所见,X 只包含非负整数!当我修剪一些数字并将数据类型更改为 int32 时,它工作正常:
a = np.array([[56748,8511896,51001984],[18643548,28614357,56748],[8511896,51001984,40084357]])
b = pd.DataFrame(a, dtype=np.int32)
ohe = OneHotEncoder()
c = ohe.fit_transform(b).toarray()
很遗憾,我需要编码的数据有 11 位数字(不能用 int32 表示)。所以,任何建议都会有所帮助......
另外,我应该提一下,我不一定需要一个热编码,只需要创建虚拟变量。谢谢!
【问题讨论】:
-
对于一次性对整个数据进行简单编码,@σηγ 的回答效果很好。但是当你需要将数据分为训练数据和测试数据时,如果测试数据包含与训练数据不同的值,它将无法工作。
-
这是一个非常好的观点@Vivek Kumar - 感谢您的提醒!
标签: python-3.x scikit-learn preprocessor one-hot-encoding int64