Невозможно применить изученную модель для проверки данных в R
Я использую Titanic
набор данных из Kaggle и хотите изучить простую модель логистической регрессии.
Я читаю в поезде и тестирую данные и оба train$Survived
, train$Sex
, test$Survived
а также test$Sex
факторы.
Я хотел бы выполнить очень простую логистическую регрессию, чтобы секс был единственной независимой переменной.
fit <- glm(formula = Survived ~ Sex, family = binomial)
Мне кажется, все в порядке:
> fit
Call: glm(formula = Survived ~ Sex, family = binomial)
Coefficients:
(Intercept) Sexmale
1.057 -2.514
Degrees of Freedom: 890 Total (i.e. Null); 889 Residual
Null Deviance: 1187
Residual Deviance: 917.8 AIC: 921.8
Проблема в том, что я не могу применить эту изученную модель к тестовым данным. Когда я делаю следующее:
predict(fit, train$Sex)
Я получаю вектор с 891 значением, которое является количеством обучающих примеров в обучающем наборе.
Я не могу найти информацию о том, как сделать это правильно.
Любая помощь будет принята с благодарностью!
1 ответ
Я публикую ответ, чтобы исправить пару моментов, которые, кажется, запутались. Там действительно нет predict
-функция как таковая. Это то, что имеется в виду, когда на странице справки говорится, что "предикат" является "универсальной функцией". Иногда общие функции имеют fun.default
метод, но в случае predict.*
, нет метода по умолчанию. Таким образом, отправка осуществляется на основе класса первого аргумента. Будут отдельные страницы справки для каждого метода, а страница справки для нескольких списков "предсказать". Авторы пакетов должны написать свои собственные методы прогнозирования для новых классов.
Логистическая регрессия предшествует парадигме машинного обучения, поэтому ожидать от нее "предсказания классов" несколько нереально. Даже тот факт, что вы можете получить "ответный" прогноз, является подарком по сравнению с тем, что программное обеспечение предоставило бы 30 лет назад, когда некоторые из нас посещали наши регрессионные классы. Нужно понимать, что вероятности обычно не 0 или 1, а что-то среднее. Если пользователь хочет установить порог и определить, сколько случаев превышает порог, то это решение аналитика, и аналитикам необходимо выполнить любые преобразования в категории, которые они считают стоящими.
Выполнение: predict(fit, train$Sex)
можно было бы ожидать, что результат будет таким же, как и значения из учебного набора, так что я предполагаю, что вы, возможно, хотели попробовать predict(fit, test$Sex)
и были разочарованы. Если это так, то это должно было быть: predict(fit, list(Sex=test$Sex) )
, R требует, чтобы аргумент был значением, которое может быть приведено к кадру данных, поэтому именованный список значений является минимальным требованием для predict
-ors.
Если predict.glm
получает некорректный аргумент ко второму аргументу, newdata
, он возвращается к исходному аргументу данных и использует линейные предикторы, которые сохраняются в объекте модели.