Почему мой cross_val_score всегда отличается, даже если я заранее установил свое случайное состояние? - PullRequest
2 голосов
/ 13 апреля 2019

Я новичок в машинном обучении, и недавно я столкнулся с проблемой, в которой я не уверен.Когда я запускаю код (как показано на рисунке) в блокноте Jupyter, он каждый раз дает мне разные оценки, и я не уверен, почему?

Я подумал, установив random_state или seed для KFold, что он будет давать мне один и тот же счет каждый раз для моих cross_val_score?

results = []
names = []

seed=12

for name, model in models:
    kfold = KFold(n_splits=num_folds, random_state=seed)
    cv_results = cross_val_score(model, X_train, y_train.ravel(), cv=kfold, scoring=scoring)
    results.append(cv_results)
    names.append(name)
    msg = '{}:  score: {:.2f},  std_dev:{:.2f}'.format(name, 
    cv_results.mean(), cv_results.std()) 
    print(msg)

Некоторые примеры выходных данных:

LR:  score: -24.69,  std_dev: 19.74  
LASSO:  score: -29.82,  std_dev: 20.94  
EN:  score: -28.59,  std_dev: 19.79  
KNN:  score: -38.66,  std_dev: 28.77  
CART:  score: -16.42,  std_dev: 15.39  
SVR:  score: -60.53,  std_dev: 44.24  

Для второго запуска с тем же кодом (также с тем же начальным числом):

LR:  score: -24.69,  std_dev: 19.74  
LASSO:  score: -29.82,  std_dev: 20.94  
EN:  score: -28.59,  std_dev: 19.79  
KNN:  score: -38.66,  std_dev: 28.77  
CART:  score: -18.65,  std_dev: 17.91  
SVR:  score: -60.53,  std_dev: 44.24

1 Ответ

0 голосов
/ 13 апреля 2019

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

Обратите внимание, что оценки для других моделей совпадают.

...