【问题标题】:Need a Work-around for OneHotEncoder Issue in SKLearn Preprocessing需要解决 SKLearn 预处理中的 OneHotEncoder 问题
【发布时间】: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


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2020-12-25
    相关资源
    最近更新 更多