Невозможно выполнить функцию ColumnTransformer - PullRequest
0 голосов
/ 08 января 2020

Я пытался предварительно обработать данные. Я заполнил пропущенные значения. Но когда я попытался закодировать категориальные данные в целые числа, набор данных X был закодирован правильно, но я получил ошибку в столбце y. По этому топику пока что не так много статей. Пожалуйста, помогите.

  • Пожалуйста, проверьте прикрепленное изображение ошибки, исходный набор данных и ошибка доступна на изображении.
  • Оригинальный набор данных:
   Country   Age   Salary Purchased
0   France  44.0  72000.0        No
1    Spain  27.0  48000.0       Yes
2  Germany  30.0  54000.0        No
3    Spain  38.0  61000.0        No
4  Germany  40.0      NaN       Yes
5   France  35.0  58000.0       Yes
6    Spain   NaN  52000.0        No
7   France  48.0  79000.0       Yes
8  Germany  50.0  83000.0        No
9   France  37.0  67000.0       Yes
  • Python Код:

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Data.csv')
x = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 3].values

# Taking care of missing data
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values = np.nan, strategy = 'mean')
imputer = imputer.fit(x[:, 1:3])
x[:, 1:3] = imputer.transform(x[:, 1:3])

# Encoding categorical data
# Encoding the Independent Variable
#from sklearn.preprocessing import LabelEncoder 
from sklearn.compose import ColumnTransformer

from sklearn.preprocessing import OneHotEncoder

ohe = OneHotEncoder()

ct = ColumnTransformer(
    [('one_hot_encoder', ohe, [0])],
    remainder='passthrough'
)

print(dataset)
x = np.array(ct.fit_transform(x), dtype=np.int)
y = np.array(ct.fit_transform(y), dtype=np.int)```

[error image][1]


  [1]: https://i.stack.imgur.com/YPR66.png

1 Ответ

0 голосов
/ 08 января 2020

y - ваша целевая переменная, то есть то, что вы пытаетесь предсказать. Это одномерный массив, и если вы позвоните y.shape, вы получите

>>>y.shape
(10,)

Вот почему вы можете сделать ошибку индекса - y.shape[1] выходит за пределы.

Вы не должны кодировать целевую переменную в горячем режиме - вместо этого целевое кодирование. То есть замените последнюю строку на:

y = pd.Categorical(y).codes

Тогда y будет

array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1], dtype=int8)

, где 0 соответствует «не купленному», а 1 - "купил"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...