使用scikit的onehotencoder对向量进行虚拟变量编码

假设我有一个整数向量,每个整数对应一个类别:

A = [1, 2, 2, 3, 3, 1, 2, 4, 4, 1]

我知道有多少个类别。这个向量是我X数据集中的一列,最终将用于逻辑回归模型中。

是否可以使用scikit-learn的onehotencoder函数来得到类似于下面的结果:

0 0 0 1(当为1时)
0 0 1 0(当为2时)
0 1 0 0(当为3时)
1 0 0 0(当为其他时)

或者更好的结果:

0 0 0
0 0 1
0 1 0
1 0 0

当我尝试将这样的向量传递给onehotencoder时,我得到了这个错误:need more than 1 value to unpack

此外:我猜如果我有’NULL’记录,我应该首先将它们转换成一个数字:有没有一种快速的方法来做到这一点,比如A(find(A=='NULL'))=123

感谢您的帮助。@人名


回答:

OneHotEncoder的输入需要是二维的,而不是一维的(它期望是一组样本)。

>>> X = [[1, 2, 2, 3, 3, 1, 2, 4, 4, 1]]

假设你的分类特征都可以取四个值:

>>> n_values = np.repeat(4, len(X[0]))>>> n_valuesarray([4, 4, 4, 4, 4, 4, 4, 4, 4, 4])

然后OneHotEncoder就可以正常工作了:

>>> oh = OneHotEncoder(n_values=n_values)>>> Xt = oh.fit_transform(X)>>> Xt.toarray()array([[ 0.,  1.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  0.,         0.,  0.,  1.,  0.,  0.,  0.,  1.,  0.,  1.,  0.,  0.,  0.,  0.,         1.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  1.,  1.,  0.,         0.]])>>> Xt.shape(1, 40)

它为每个输入变量产生了一个多余的虚拟变量,这有点浪费。我不知道你说的NULL是什么意思,因为我不知道你的数据是什么样的。你可能需要为此打开一个单独的问题。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注