Используйте разделение KFold для соответствия возвращаемой модели "Не в индексе" - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть такой фрейм данных:

    Col1    Col2    
10   1        6         
11   3        8        
12   9        4        
13   7        2
14   4        3
15   2        9
16   6        7
17   8        1
18   5        5

Я хочу использовать перекрестную проверку KFold, чтобы соответствовать моей модели и делать прогнозы.

for train_index, test_index in kf.split(X_train, y_train):

    model.fit(X[train_index], y[train_index])
    y_pred = model.predict(X[test_index])

Этот код генерирует следующую ошибку:

'[1 2 4 7] not in index'

Я видел, что послеKFold.split (), train_index и test_index не используют реальный индексный номер кадра данных.

Так что я не могу соответствовать своей модели.

У кого-нибудь есть идея?

1 Ответ

0 голосов
/ 11 декабря 2018

Из того, что я вижу, индекс вашего фрейма данных начинается с 10, а не с 0, и, как вы сказали, для разделения от sklearn используется индекс, начинающийся с 0. Одним из решений является сброс индекса вашего фрейма данных с помощью:

df = df.reset_index(drop=True)

Другое решение - использовать .iloc на вашем фрейме данных, чтобы он выглядел следующим образом (Предполагая, что y является массивом, если это фрейм данных, вам также придется использовать .iloc там).

for train_index, test_index in kf.split(X_train, y_train):
   model.fit(X.iloc[train_index], y[train_index])
   y_pred = model.predict(X.iloc[test_index])

Третье решение - преобразовать ваш фрейм данных в массив.

for train_index, test_index in kf.split(X_train, y_train):
   model.fit(X.values[train_index], y[train_index])
   y_pred = model.predict(X.values[test_index])

Редактировать: я даже вижу 4-е решение, которое может быть тем, которое вам нужно.Вы можете просто сделать df.index.values ​​[train_index], чтобы получить массив индексов в наборе поездов.

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