需要解决 SKLearn 预处理中的 OneHotEncoder 问题
Need a Work-around for OneHotEncoder Issue in SKLearn Preprocessing
因此,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 needs to contain only non-negative integers."
如您所见,X 确实只包含非负整数!当我 trim 一些数字并将数据类型更改为 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表示)。所以,任何建议都会有所帮助...
另外,我应该提一下,我不一定需要单热编码,只需要创建虚拟变量。谢谢!
Pandas 有一个创建虚拟变量的 get_dummies
函数:
import numpy as np
import pandas as pd
a = np.array([[56748683,8511896545,51001984320],[18643548615,28614357465,56748683],[8511896545,51001984320,40084357915]])
b = pd.DataFrame(a, dtype=np.int64)
b = b.astype('object')
c = pd.get_dummies(b)
因此,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 needs to contain only non-negative integers."
如您所见,X 确实只包含非负整数!当我 trim 一些数字并将数据类型更改为 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表示)。所以,任何建议都会有所帮助...
另外,我应该提一下,我不一定需要单热编码,只需要创建虚拟变量。谢谢!
Pandas 有一个创建虚拟变量的 get_dummies
函数:
import numpy as np
import pandas as pd
a = np.array([[56748683,8511896545,51001984320],[18643548615,28614357465,56748683],[8511896545,51001984320,40084357915]])
b = pd.DataFrame(a, dtype=np.int64)
b = b.astype('object')
c = pd.get_dummies(b)