Я пытаюсь использовать kfold в sklearn и действительно пытаюсь понять, что он делает. Я читаю Python машинное обучение 3-е издание Себастьяном Рашкой.
В главе 6 https://github.com/rasbt/python-machine-learning-book-3rd-edition/blob/master/ch06/ch06.ipynb
У него есть код для StraifiedKFold
kfold = StratifiedKFold(n_splits=10).split(X_train, y_train)
scores = []
for k, (train, test) in enumerate(kfold):
pipe_lr.fit(X_train[train], y_train[train])
score = pipe_lr.score(X_train[test], y_train[test])
scores.append(score)
print('Fold: %2d, Class dist.: %s, Acc: %.3f' % (k+1,
np.bincount(y_train[train]), score))
print('\nCV accuracy: %.3f +/- %.3f' % (np.mean(scores), np.std(scores)))
- Я не уверен, когда он создает экземпляр, kfold использует только набор поездов? почему не весь набор?
Итак, взглянув на документацию перекрестной проверки kfold https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html, на этот раз они разбили весь набор, но только набор данных X.
Почему на этот раз разбит весь набор данных, но только X?
Итак, я пытаюсь использовать 10-кратную перекрестную проверку, ниже приведен мой код
gbr_onehot = GradientBoostingRegressor(
n_estimators = 1000,
learning_rate = 0.1,
random_state = 0
)
kfold = KFold(n_splits=10, shuffle=True, random_state=0).split(X)
train_score = []
test_score = []
for k, (train, test) in enumerate(kfold):
gbr_onehot.fit(X[train], y[train])
train_pred = gbr_onehot.predict(X[train])
train_score.append(metrics.mean_squared_error(train_pred, y[train]))
test_pred = gbr.onehot.predict(X[test])
test_score.append(metrics.mean_squared_error(test_pred, y[test]))
, который дает мне KeyError: "None of [Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 9,\n 10,\n ...\n 18313, 18314, 18315, 18316, 18317, 18318, 18319, 18320, 18321,\n 18322],\n dtype='int64', length=16490)] are in the [columns]
Я использую cross_val_score, однако хочу получить mse набора поездов.
Я прочитал много SO вопросов, а другие, однако, все еще в замешательстве.