Ошибки при последовательном кодировании данных с помощью Scikit-learn

#python #numpy #machine-learning #keras #scikit-learn

Вопрос:

Я перебираю строки своего фрейма данных и пытаюсь закодировать каждую строку данных с помощью своего кодера.

 for index, row in self.data.iterrows():
    data = self._encoder.transform(row)
    try:
        print(row.shape)
        results["classes"].append((self._model.predict(data) > 0.5).astype("int32"))
        results["probability"].append((self._model.predict(data)))
        results["rows"].append(index)
    except Exception as e:
        print(e)
        results["rows"].append(index)
        results["classes"].append("ERROR")
        results["probability"].append("ERROR")
 

А затем спрогнозируйте, используя мою модель. И кодер, и модель были созданы с помощью Scikit-learn и Keras, модель была сохранена с помощью встроенной функции сохранения keras, а кодер был экспортирован в файл joblib. Если я закодирую весь фрейм данных, все будет работать так, как ожидалось.

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

Я пробовал использовать iterrows() , и когда я пытаюсь закодировать каждую строку, я получаю следующую ошибку. IndexError: tuple index out of range .

Я также пытался преобразовать каждую строку в отдельный фрейм данных, но при попытке кодирования я получаю следующее ValueError: Number of features of the input must be equal to or greater than that of the fitted transformer. Transformer n_features is 67 and input n_features is 1.

Каков был бы наилучший подход к циклическому просмотру моих данных и последовательному кодированию и прогнозированию каждой строки данных?

Полная трассировка второй ошибки

 Traceback (most recent call last):
  File "/home/build/x-predictive-model/main.py", line 18, in <module>
    network.predictSequentially()
  File "/home/build/x-predictive-model/myai.py", line 191, in predictSequentially
    encoded = self._encoded_data = self._encoder.transform(pd.DataFrame(row))
  File "/home/user1/anaconda3/envs/x-model-lib/lib/python3.7/site-packages/sklearn/compose/_column_transformer.py", line 571, in transform
    .format(self._n_features, X.shape[1]))
ValueError: Number of features of the input must be equal to or greater than that of the fitted transformer. Transformer n_features is 67 and input n_features is 1.
 

Комментарии:

1. Пожалуйста, отформатируйте свой код либо с обратными кавычками, либо с отступом, но не с обоими (отредактировано).

2. Можете ли вы добавить формы ваших данных и полную обратную трассировку второй ошибки?

3. @ML_Engine форма данных (4722, 67), я опубликовал полную обратную связь в теле поста

Ответ №1:

Могу зацикливаться и прогнозировать с помощью индекса, используя синтаксис self.data[index:index 1] , который я могу зацикливать на своих данных и делать прогнозы.