python - 使用 OneHotEncoder 错误 "Expected 2D array, got 1D array instead"

标签 python python-3.x machine-learning scikit-learn

我是机器学习的新手,正在尝试解决我在使用 OneHotEncoder 类时遇到的错误。错误是:“预期的二维数组,得到的是一维数组”。所以当我想到一维数组时,它类似于:[1,4,5,6] 而二维数组将是 [[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)。

关于python - 使用 OneHotEncoder 错误 "Expected 2D array, got 1D array instead",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957151/

相关文章:

python - 在 PyQt4 中连接多个按钮信号时如何避免这种后期绑定(bind)的情况?

python - Eratosthenes 筛法速度比较 : Python vs Julia

python - 如何使用 BFS 找到迷宫中的最短路径?

python - 如果我已经了解 Python 3,我该如何学习 Python 2?

machine-learning - 如何使用机器学习从音频剪辑中提取人声?

python - 如何在训练过程中纠正不稳定的损失和准确率? (二元分类)

python - 如何从 python 脚本成功调用 gsutil rsync?

python - 跳过下载 dash list

python - StopIteration 不会被 main() 捕获

algorithm - 使用可能错误的比较器分析排序算法?