Можно ли получить одинаковую оценку перекрестной проверки для многих моделей классификации - PullRequest
0 голосов
/ 17 декабря 2018

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

Мой код указан ниже,

from sklearn.model_selection import train_test_split

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=1/3, random_state=88888)

cvL = cross_val_score(LogisticRegression(), x_test, y_test,cv=5)

cvD = cross_val_score(DecisionTreeClassifier(max_depth=5), x_test, y_test,cv=5)

cvF = cross_val_score(RandomForestClassifier(n_estimators=10), x_test, y_test,cv=5)

I get the same score for all 3 model, which is

array([0.78125   , 0.78125   , 0.77777778, 0.77777778, 0.77777778])

Мои вопросы:

  1. Возможен ли этот результат?Если да, то как узнать, какую модель выбрать?
  2. Когда я меняю случайное состояние в test_train_split, я мог бы иногда получать разные оценки для другой модели, но это случается редко, и я не знаю, какое случайное состояние мне следует выбрать.
  3. Почему я получаю одинаковый балл за выборку с 3-го по 5-й, что составляет 0,7777777778

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Используйте тренировочный набор x_train, чтобы увидеть, изменяются ли оценки для разных моделей.Нет смысла использовать x_test для выполнения перекрестной проверки, поскольку в обучающем наборе будет больше строк для обучения оценщиков.

Кроме того, не меняйте random_state для train_test_split, так как он используется тольковоспроизвести тот же сплит для обучения и тестирования.

0 голосов
/ 18 декабря 2018
  1. Да, два разных классификатора могут дать вам одинаковый результат.Вероятность этого значительно меняется от проблемы к проблеме.Моим первым побуждением было подвергнуть сомнению размер ваших данных.Слишком маленький, и было бы легко переписать и изучить только подмножество данных.

  2. Обычно вам не нужно указывать случайное состояние.Зарезервируйте это для случаев, когда вы хотите иметь возможность воспроизводить результаты при каждом прогоне с одинаковыми данными и классификатором.Вам не нужно выбирать лучшее случайное состояние.

  3. Не похоже, что вы на самом деле тренируете данные.Вы прыгаете прямо, чтобы выиграть тестовый набор.Я рекомендую вам вернуться к документации по sklearn и прочитать еще несколько учебных пособий, но в основном вам нужно что-то вроде:

x_train, x_test, y_train, y_test = train_test_split (x, y, test_size = 1/3, random_state = 88888)

logreg = LogisticRegression()
logreg.fit(x_train, y_train)

cvL = cross_val_score(logreg, x_test, y_test, cv=5)

Конечно, одной из основных характеристик перекрестной проверки является возможность выбора лучших гиперпараметров.Я рекомендую найти учебник по sklearn's GridSearchCV.Для каждого классификатора существуют параметры базовой модели, которые можно настроить для достижения наилучшей эффективности классификации.Этот класс поможет вам найти их.

...