Почему выходные данные cross_validate отличаются от цикла жесткого кода при использовании XGBClassifier? - PullRequest
1 голос
/ 08 октября 2019

Код # 1 Передать конвейер с PCA, XGBClassifier шаги для функции scikit-learn cross_validate

from xgboost import XGBClassifier
from sklearn.model_selection import cross_validate, LeaveOneOut
from sklearn.pipeline import Pipeline
from sklearn.decomposition import PCA

import random
random.seed(42)
import numpy as np
np.random.seed(42)

kwargs = {
    'n_jobs': -1,
    'cv': LeaveOneOut(),
    'X': X,
    'y': y
}

pipe = Pipeline([
    ('pca', PCA(1, random_state=42)),
    ('xgbc', XGBClassifier(random_state=42))
])

results = cross_validate(pipe, **kwargs)
print(results['test_score'].mean())

Код # 2 Записать жесткий код цикла перекрестной проверки ирассчитать среднюю точность для точно такого же ввода X, как и код # 1

from xgboost import XGBClassifier
from sklearn.model_selection import LeaveOneOut
from sklearn.decomposition import PCA

import random
random.seed(42)
import numpy as np
np.random.seed(42)

acc = []
for train_idx, test_idx in LeaveOneOut().split(X, y):

    x_train, x_test = X[train_idx], X[test_idx]
    y_train, y_test = y[train_idx], y[test_idx]

    pca = PCA(1, random_state=42)
    pca.fit(x_train)
    x_train = pca.transform(x_train)
    x_test = pca.transform(x_test)

    model = XGBClassifier(random_state=42, n_jobs=-1)
    model.fit(x_train, y_train)

    score = model.score(x_test, y_test)
    acc.append(score)

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