使用 OneHotEncoder 时出错"Expected 2D array, got 1D array instead"



我是机器学习的新手,并试图解决我正在使用onehotencoder类的错误。错误是:"预期的2D数组,改为获得1D数组"。因此,当我想到1D数组时,类似于:[1,4,5,6]和2D阵列将是[[2,3], [3,4], [5,6]],但我仍然无法弄清楚为什么会失败。它在这条线上失败了:

X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray()

这是我的整个代码:

# Import Libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
# Import Dataset
dataset = pd.read_csv('Data2.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 5].values
df_X = pd.DataFrame(X)
df_y = pd.DataFrame(y)
# Replace Missing Values
from sklearn.preprocessing import Imputer
imputer = Imputer(missing_values = 'NaN', strategy = 'mean', axis = 0)
imputer = imputer.fit(X[:, 3:5 ])
X[:, 3:5] = imputer.transform(X[:, 3:5])

# Encoding Categorical Data "Name"
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_x = LabelEncoder()
X[:, 0] = labelencoder_x.fit_transform(X[:, 0])
# Transform into a Matrix
onehotencoder1 = OneHotEncoder(categorical_features = [0])
X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray()
# Encoding Categorical Data "University"
from sklearn.preprocessing import LabelEncoder
labelencoder_x1 = LabelEncoder()
X[:, 1] = labelencoder_x1.fit_transform(X[:, 1])

我敢肯定,您可以通过此代码来确定我有2列是标签。我使用标签编码器将这些列变成数字。我想使用onehotencoder将其更进一步,然后将它们变成一个矩阵,以便每行都具有这样的东西:

0  1  0
1  0  1

唯一想到的是我如何编码标签。我一一做了他们,而不是一次做。不确定这是问题。

我希望做这样的事情:

# Encoding Categorical Data "Name"
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_x = LabelEncoder()
X[:, 0] = labelencoder_x.fit_transform(X[:, 0])
# Transform into a Matrix
onehotencoder1 = OneHotEncoder(categorical_features = [0])
X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray()
# Encoding Categorical Data "University"
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
labelencoder_x1 = LabelEncoder()
X[:, 1] = labelencoder_x1.fit_transform(X[:, 1])
# Transform into a Matrix
onehotencoder2 = OneHotEncoder(categorical_features = [1])
X[:, 1] = onehotencoder1.fit_transform(X[:, 1]).toarray()

下面您会发现我的整个错误:

File "/Users/jim/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py", line 441, in check_array
    "if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=[ 2.  1.  3.  2.  3.  5.  5.  0.  4.  0.].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.

在正确方向上的任何帮助都很棒。

我遇到了相同的错误,在错误消息后,有一个建议如下:

"Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample."

由于我的数据是一个数组,因此我使用了X.values.reshape(-1,1),并且可以正常工作。(还有另一个建议使用X.values.reshape代替X.reshape)。

这是在Sklearn onehotencoder中提出的问题https://github.com/scikit-learn/scikit-learn/issues/3662。大多数Scikit学习估计器需要一个2D数组,而不是1D数组。

标准做法是包括一个多维阵列。由于您已经指定了在categorical_features = [0]中将哪个列视为oneHotEncoding的分类列,因此您可以将下一行重写为以下几行,以获取整个数据集或其中的一部分。它将仅考虑分类转换到虚拟转换的第一列,而仍然具有多维数组可以使用。

onehotencoder1 = OneHotEncoder(categorical_features = [0])
X = onehotencoder1.fit_transform(X).toarray()

(我希望您的数据集不再具有分类值。我建议您先将所有内容标记所有内容,然后是onehotencode。

我通过添加

来遇到修复程序
X=X.reshape(-1,1)

错误现在似乎已经消失,但不确定这是否是修复此

的正确方法

目前会更改分类功能,您需要添加另一对括号:

X[:, 0] = pd.DataFrame(onehotencoder1.fit_transform(X[[:, 0]]).toarray())

您需要重塑数据,因为该方法期望具有前面提到的多维数组。x = x.Reshape(-1,1)也为我工作。

最新更新