Я действительно застрял в этой проблеме. Я пытаюсь использовать OneHotEncoder для кодирования моих данных в матрицу после использования LabelEncoder, но получаю эту ошибку: Ожидаемый массив 2D, вместо этого получен массив 1D.
В конце сообщения об ошибке (приведенного ниже) было сказано «Изменить форму моих данных», что, как я думал, я сделал, но оно все еще не работает. Если я понимаю Reshaping, это просто, когда вы хотите буквально изменить некоторые данные в другой размер матрицы? Например, если я хочу изменить матрицу 3 x 2 на 4 x 6?
Мой код не работает в этих двух строках:
X = X.reshape(-1, 1) # I added this after I saw the error
X[:, 0] = onehotencoder1.fit_transform(X[:, 0]).toarray()
Вот код, который у меня есть до сих пор:
# Data Preprocessing
# 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 = X.reshape(-1, 1)
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])
Вот полное сообщение об ошибке:
File "/Users/jim/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/data.py", line 1809, in _transform_selected
X = check_array(X, accept_sparse='csc', copy=copy, dtype=FLOAT_DTYPES)
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.00000000e+00 7.00000000e+00 3.20000000e+00 2.70000000e+01
2.30000000e+03 1.00000000e+00 6.00000000e+00 3.90000000e+00
2.80000000e+01 2.90000000e+03 3.00000000e+00 4.00000000e+00
4.00000000e+00 3.00000000e+01 2.76700000e+03 2.00000000e+00
8.00000000e+00 3.20000000e+00 2.70000000e+01 2.30000000e+03
3.00000000e+00 0.00000000e+00 4.00000000e+00 3.00000000e+01
2.48522222e+03 5.00000000e+00 9.00000000e+00 3.50000000e+00
2.50000000e+01 2.50000000e+03 5.00000000e+00 1.00000000e+00
3.50000000e+00 2.50000000e+01 2.50000000e+03 0.00000000e+00
2.00000000e+00 3.00000000e+00 2.90000000e+01 2.40000000e+03
4.00000000e+00 3.00000000e+00 3.70000000e+00 2.77777778e+01
2.30000000e+03 0.00000000e+00 5.00000000e+00 3.00000000e+00
2.90000000e+01 2.40000000e+03].
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.
Любая помощь будет здорово.
numpy.asmatrix(data)
, где данные - это данные, которые вы передаете... или вы можете изменить форму... Передача массива 1D устарела в последнее время версии sklearn - person Jai   schedule 25.12.2017X = X.reshape(-1, 1)
это правильный способ изменить данные, но с ошибкой, но это будет работать, только если ваш X является массивом numpy, а не списком... Если это список, чем сделать список массивов из списка ... из сообщения об ошибке я ясно вижу, чтоarray = [ ]
является 1D, потому что у него есть одна открывающая и закрывающая скобки, и после изменения формы удалитеX[:, 1]
в преобразовании и просто поставьте X - person Jai   schedule 25.12.2017