Оценщик Scikit-learn не изменяет предсказания при изменении переменной random_state.

Вопрос или проблема

Я пытаюсь вычислить интервалы предсказаний для классификатора, который я обучил в scikit-learn. Даже после установки нового параметра random_state в моем конвейере, это, похоже, не изменяет результаты при повторной подгонке на данных. Что я могу с этим сделать? Вот соответствующий фрагмент кода, который я использую:

SEED_VALUE = 3

t_clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('lgbm', LGBMClassifier(class_weight="balanced",random_state=SEED_VALUE, max_depth=20, min_child_samples=20, num_leaves=31))

                 ])
states = [0,1,2,3]

///

for state in states:

    train_temp = train.copy()
    t_clf.set_params(lgbm__random_state=state)
    t_clf.fit(train_temp, train_temp['label'])
    t_clf.predict_proba(test)   

# результат predict_proba не меняется при различных значениях state

То же самое происходит, когда я пытаюсь изменить порядок перемешивания.

Я осознал, что при перемешивании я не установил параметр replace в True, что помешало вставить случайность в процесс.

SEED_VALUE = 3

t_clf = Pipeline(steps=[('preprocessor', preprocessor),
                      ('lgbm', LGBMClassifier(class_weight="balanced",random_state=SEED_VALUE, max_depth=20, min_child_samples=20, num_leaves=31))

                 ])
states = [0,1,2,3]

///

for state in states:

    train_temp = train.copy().sample(frac=1, replace=True).reset_index(drop=True)
    t_clf.fit(train_temp, train_temp['label'])
    t_clf.predict_proba(test)   

# результат predict_proba должен быть различным при каждом запуске

Ответ или решение

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

Причины проблемы

  1. Поскольку не происходит изменений в данных, на которых обучается модель, то и предсказания остаются прежними. В вашем фрагменте кода переменная train_temp берётся из train.copy() без применения какого-либо случайного перемешивания. Так, если ваши данные не изменяются, не имеет значения, каково значение random_state.

  2. Свойство random_state в модели LGBMClassifier. Этот параметр управляет внутренними случайными процессами, однако, если ваши входные данные не меняются между вызовами fit, вы не увидите различий в выходных данных. Этот параметр важен при создании бутстрепа или другой случайной подвыборки, но изменения данных всегда имеют первостепенное значение.

  3. Параметр replace в методе sample(). Вы правильно заметили, что неустановленный параметр replace влияет на уровень случайности. Установив replace=True, вы позволяете выбору повторяться и тем самым увеличиваете вероятность получения различной выборки для каждой итерации цикла.

Рекомендации

Вот несколько рекомендаций, которые помогут вам устранить проблему:

1. Измените выборку обучающих данных

Убедитесь, что вы фактически изменяете данные между итерациями, что поможет лучше увидеть эффект изменения random_state:

for state in states:
    train_temp = train.copy().sample(frac=1, replace=True, random_state=state).reset_index(drop=True)
    t_clf.fit(train_temp, train_temp['label'])
    predictions = t_clf.predict_proba(test)
    print(predictions)

2. Проверьте другие параметры модели

Если после выполнения вышеприведённых изменений вы все равно не получаете изменяющиеся предсказания, проверьте другие параметры вашей модели LGBMClassifier. Возможно, какие-либо из них также влияют на предсказания и требуют изменения.

3. Используйте кросс-валидацию

Применение методов кросс-валидации может помочь лучше оценить стабильность ваших предсказаний:

from sklearn.model_selection import cross_val_predict

predictions = cross_val_predict(t_clf, train_temp.drop('label', axis=1), train_temp['label'], cv=5)

Это не только предоставляет различные предсказания для каждой итерации, но и позволяет оценить качество и стабильность модели.

Заключение

Изменения в стратегии выбора данных и использование параметров, управляющих случайностью, являются ключевыми для получения различных предсказаний в моделях машинного обучения. Убедитесь, что данные, на которых вы обучаете вашу модель, действительно подвергаются изменению между запусками. Так вы сможете достичь своей цели в вычислении интервалов предсказаний для классификатора. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...