Я пытаюсь закодировать Порядковые Категориальные Значения в 3-м столбце моего набора данных, где «Tiny Mongra» имеет наименьшее значение, а «1st Wand» имеет наивысшие значения.Это синоним использования малых, средних и больших размеров, когда текущий набор данных обозначает размер рисового зерна.
Я продолжаю получать следующую ошибку при запуске этого фрагмента:
Traceback (most recent call last):
File "<ipython-input-1-ae4501cc0ac1>", line 19, in <module>
X[:, 2] = ordinalencoder_X_3.fit_transform(X[:, 2])
File "/Users/anhad/anaconda3/lib/python3.6/site-packages/sklearn/base.py", line 462, in fit_transform
return self.fit(X, **fit_params).transform(X)
File "/Users/anhad/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 794, in fit
self._fit(X)
File "/Users/anhad/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 61, in _fit
X = self._check_X(X)
File "/Users/anhad/anaconda3/lib/python3.6/site-packages/sklearn/preprocessing/_encoders.py", line 47, in _check_X
X_temp = check_array(X, dtype=None)
File "/Users/anhad/anaconda3/lib/python3.6/site-packages/sklearn/utils/validation.py", line 552, in check_array
"if it contains a single sample.".format(array))
ValueError: Expected 2D array, got 1D array instead:
array=['1st Wand' '1st Wand' '1st Wand' ... '1st Wand' '1st Wand' '1st Wand'].
При дальнейшей проверке я обнаружил, что ошибка не предупреждала меня о списке категориальных данных, а имела в виду столбец, который я хотел закодировать.По какой-то причине он считает, что столбец - это одномерный массив в форме:
array=['1st Wand' '1st Wand' '1st Wand' '1st Wand' '1st Wand' 'Dubar' '2nd Wand'
'Tibar' 'Mongra' '1st Wand' '1st Wand' '1st Wand' '1st Wand' '1st Wand'
'1st Wand' '2nd Wand' 'Super Dubar' 'Super Tibar' ... '1st Wand' '1st Wand'].
Это странно, поскольку я использую LabelEncoder для подгонки_трансформирования других категориальных значений в моем наборе данных, и они отлично работают.
Вот ссылка на данные.См. «Данные»:
https://docs.google.com/spreadsheets/d/12nAU5QztVnVroRYDsRDsZGUyBpBTwAD5yMmbMaAxnHQ/edit?usp=sharing
Вот полный код.Обратитесь к последней части:
import numpy as np
import pandas as pd
# Importing the dataset
dataset = pd.read_csv('Ryze Price NN Data.csv')
X = dataset.iloc[:, 1:7].values
y = dataset.iloc[:, 7].values
# Encoding categorical data
from sklearn.preprocessing import LabelEncoder, OneHotEncoder, OrdinalEncoder
labelencoder_X_1 = LabelEncoder()
X[:, 0] = labelencoder_X_1.fit_transform(X[:, 0])
labelencoder_X_2 = LabelEncoder()
X[:, 1] = labelencoder_X_2.fit_transform(X[:, 1])
# SEE THIS PART
category_array = ["Tiny Mongra","Mini Mongra","Mongra","Super Mongra","Mini Dubar","Dubar","Super Dubar","Mini Tibar","Tibar","Super Tibar","2nd Wand","Super 2nd Wand","1st Wand"]
ordinalencoder_X_3 = OrdinalEncoder(categories=category_array)
X[:, 2] = ordinalencoder_X_3.fit_transform(np.array(X[:,2])
Я ожидаю, что категориальные данные закодированы следующим образом: «Tiny Mongra» должен быть закодирован как 0.,«1-й жезл» должен быть закодирован как 12