Как предсказать невидимые данные? - PullRequest
0 голосов
/ 31 января 2020

Привет. Я практикую модели ML и сталкиваюсь с проблемой, пытаясь предсказать невидимые данные. Ошибка возникает во время выполнения однотипного кодирования для категориальных данных.

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder_x_1 = LabelEncoder() #will encode country
X[:,1] = labelencoder_x_1.fit_transform(X[:,1])

labelencoder_x_2 = LabelEncoder() #will encode Gender
X[:,2] = labelencoder_x_2.fit_transform(X[:,2])
onehotencoder_x = OneHotEncoder(categorical_features=[1])
X= onehotencoder_x.fit_transform(X).toarray()
X = X[:,1:] 

My X имеет 11 столбцов, а столбцы 2 и 3 являются категориальными типами (Страна и Пол). Модель работает нормально, но при попытке протестировать модель на случайном входе происходит сбой при одном кодировании.

input = [[619], ['France'], ['Male'],   [42],   [2],    [0.0],  [1],    [1],    [1],[101348.88]]

input[1] = labelencoder_x_1.fit_transform(input[1])
input[2] = labelencoder_x_2.fit_transform(input[2])
input= onehotencoder_x.fit_transform(input).toarray()

Ошибка:

 C:\Anaconda3\lib\site-packages\sklearn\preprocessing\_encoders.py:451: 
  DeprecationWarning: The 'categorical_features' keyword is deprecated in version 0.20 
and will be removed in 0.22. You can use the ColumnTransformer instead.
  "use the ColumnTransformer instead.", DeprecationWarning)
Traceback (most recent call last):

      File "<ipython-input-44-44a43edf17aa>", line 1, in <module>
    input= onehotencoder_x.fit_transform(input).toarray()

  File "C:\Anaconda3\lib\site-packages\sklearn\preprocessing\_encoders.py", line 624, in 
 fit_transform
    self._handle_deprecations(X)

   File "C:\Anaconda3\lib\site-packages\sklearn\preprocessing\_encoders.py", line 453, in 
_handle_deprecations
     n_features = X.shape[1]

 AttributeError: 'list' object has no attribute 'shape'

1 Ответ

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

Я считаю, что это потому, что у вас есть вложенные списки.

Вы должны сгладить свой входной список и использовать его для прогноза.

input[1] = labelencoder_x_1.fit_transform(input[1])
input[2] = labelencoder_x_2.fit_transform(input[2])

intput = [item for sublist in input for item in sublist]

input= onehotencoder_x.fit_transform(input).toarray()

Если у вас есть вложенный список, то каждый элемент в списке будет считаться элементом, которому необходимо go через функцию fit_transform, но, поскольку он является единственным элементом, он не соответствует форме, которую ищет fit_transform, то есть [1, 10] (1 строка , 10 столбцов).

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