Изменение random_state в методах sklearn (после настройки гиперпараметров) обеспечивает разную точность

#machine-learning #scikit-learn #random-seed

#машинное обучение #scikit-learn #случайное начальное значение

Вопрос:

Я прохожу курс обучения статистике / ML, в настоящее время занимаюсь проектом, включающим задачу классификации, и у меня есть несколько вопросов для новичков относительно параметра random_state. Точность моей модели сильно меняется в зависимости от random_state . В настоящее время я работаю с логистической регрессией (из sklearn.linear_model.LogisticRegression()). Я пытаюсь настроить гиперпараметр с помощью метода GridSearchCV.

Проблема: я получаю разную точность прогнозирования, в зависимости от того, какое random_state я использую.

Что я пробовал: я попытался установить параметр random_state в качестве глобального состояния (используя np.random.seed(RandomState) и установив RandomState как целое число в верхней части скрипта). Далее я разделяю данные, используя

 train_test_split(X, y, test_size=0.2, random_state=randomState)
  

с тем же (глобальным) целочисленным RandomState . Кроме того, я хочу предварительно сформировать GridSearchCV для настройки гиперпараметров. Таким образом, я указываю param_grid и предварительно формирую GridSearchCV для этого. Исходя из этого, я нахожу наилучшую оценку и выбираю ее в качестве своей модели. Затем я использую свою модель для прогнозирования и печатаю отчет о классификации результатов. Я беру среднее значение из 10 запусков, изменяя RandomState.

Пример: я выполняю эту процедуру с RandomState=1 и нахожу наилучшую модель из GridSearchCV: model_1. Я получаю точность 84%. Если я меняю значение RandomState = 2, …,10 и по-прежнему использую model_1, средняя точность становится 80,5%. Я выполняю эту процедуру с RandomState= 42 и нахожу лучшую модель из GridSearchCV: model_42. Я получаю точность 77%. Если я меняю на RandomState = 41, 40, 39,..,32 и по-прежнему используйте model_42, средняя точность становится 78,7%.

Я очень смущен, почему точность так сильно варьируется в зависимости от random_state.

Ответ №1:

Настройка random_state дает вам разную точность. Случайное состояние похоже на случайное разделение набора данных на обучающий и тестовый, а не на разделение набора данных в соответствии с возрастающими значениями индекса. Это приводит к разделению точек данных на обучающие и тестовые, и если в тестовых данных есть какая-либо точка, которой нет в обучающих данных, то это может привести к низкой точности. Лучший способ справиться с этой проблемой — использовать разделение перекрестной проверки. В этом подходе, который случайным образом разбивает данные на обучающие и тестовые, затем выполняет моделирование машинного обучения, и этот шаг повторяется n раз, где n — количество разбиений (в основном n = 5). Затем мы берем среднее значение всех точности и будем считать эту точность конечным результатом. Вместо изменения значения random_state каждый раз, когда вы можете выполнить разделение перекрестной проверки

Ссылки на это можно найти по ссылке ниже:

https://machinelearningmastery.com/k-fold-cross-validation/#:~:text=Cross-validation is a resampling,k-fold cross-validation