Логистическая регрессия в Python, набор тестов и набор поездов
file = pd.DataFrame({'name':['s', 'k', 'lo', 'ki'] , 'age':[12, 23, 32, 22], 'marks':[34, 34, 43, 22], 'score':[1, 1, 0, 1]})
Я хотел бы запустить логистическую регрессию с помощью команды:
import statsmodels.formula.api as smf
logit = smf.logit( 'score ~ age + marks', file)
results = logit.fit()
Но я получаю ошибку:
"statsmodels.tools.sm_exceptions.PerfectSeparationError:
Perfect separation detected, results not available".
Я также разделил бы данные, чтобы обучить набор и проверить набор, как я могу сделать это? Я должен использовать команду прогнозирования после этого.
Команда "glm" в R выглядит намного проще, чем Python.
1 ответ
Я тоже сталкивался с подобной ошибкой, когда работал с некоторыми данными. Это связано со свойством данных. Поскольку две группы (оценка =0 и оценка =1) идеально разделены в ваших данных, граница принятия решения может быть где угодно (бесконечное решение). Таким образом, библиотека не может вернуть ни одного решения. Эта фигура показывает ваши данные. Решение 1,2,3 все действительны.
Я запустил это, используя glmnet в Matlab. Ошибка от Matlab гласит:
Предупреждение: расчетные коэффициенты отлично отделяют неудачи от успехов. Это означает, что теоретические лучшие оценки не являются конечными.
Использование большего количества точек данных поможет.
Интересно, что LogisticRegression от scikit-learn работает без нареканий.
Пример кода с использованием scikit-learn для вашей задачи:
import pandas as pd
import numpy as np
from patsy import dmatrices
from sklearn.linear_model import LogisticRegression
file = pd.DataFrame({'name':['s', 'k', 'lo', 'ki'] , 'age':[12, 23, 32, 22], 'marks':[34, 34, 43, 22], 'score':[1, 1, 0, 1]})
# Prepare the data
y,X = dmatrices('score ~ age + marks',file)
y = np.ravel(y)
# Fit the data to Logistic Regression model
model = LogisticRegression()
model = model.fit(X,y)
Чтобы разделить данные на обучение и тестирование, вы можете обратиться к этому: http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.train_test_split.html