Установка случайного состояния для cross_val_score не работает - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь выполнить 3-кратную 10-кратную перекрестную проверку. Проблема в том, что я продолжаю получать одни и те же результаты на трех разных итерациях, что говорит о том, что сгибы не разделяются по-разному. Почему это так и как я могу сделать это случайным каждый раз (или, по крайней мере, основываясь на i)

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score
import statistics as stats
import random
import numpy as np

X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)
print(X)
print(y)


CVScores = []
for i in range(0, 3):
    np.random.seed(i)
    ada = AdaBoostClassifier(n_estimators=100, random_state=np.random.RandomState(i))
    ada.fit(X, y)
    CVScores.extend(list(cross_val_score(ada, X, y, cv=10, scoring="f1")))
print(CVScores)
mean = stats.mean(CVScores)
print(mean)

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

Есть функция, которая решает это.

from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import cross_val_score, KFold
import statistics as stats
import random
import numpy as np

X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)
print(X)
print(y)


CVScores = []
for i in range(0, 3):
    kf = KFold(n_splits=10, shuffle=True, random_state=i)
    kf.get_n_splits(X)
    ada = AdaBoostClassifier(n_estimators=100)
    ada.fit(X, y)
    CVScores.extend(list(cross_val_score(ada, X, y, cv=kf, scoring="f1")))
print(CVScores)
mean = stats.mean(CVScores)
print(mean)
0 голосов
/ 05 октября 2019

Вы определили random_state в вашей функции. Определенное random_state является «достаточно случайным», но строго детерминированным для проведения воспроизводимых экспериментов. Пожалуйста, обратитесь к вики-странице о случайных состояниях и, возможно, углубитесь в более широкую теорию случайных семян .

random_state: int, RandomState instance илиНет (по умолчанию) Определяет генерацию случайных чисел для создания набора данных. Передайте int для воспроизводимого вывода через несколько вызовов функций . См. Глоссарий.

Во избежание этого либо не устанавливайте его вообще, так как по умолчанию используется значение None, либо задайте его как none: random_state=None

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