Seaborn Regplot и Scikit-Learn Логистические модели рассчитаны по-разному?

1

Я использую функции логической регрессии Scikit-Learn и Seaborn - первый для извлечения информации о модели (то есть лог-коэффициентов, параметров и т.д.), А позже для построения результирующей сигмоидальной кривой, подходящей для оценок вероятности.

Возможно, моя интуиция неверна для того, как интерпретировать этот сюжет, но я, кажется, не получаю результатов, как я ожидал:

#Build and visualize a simple logistic regression
ap_X = ap[['TOEFL Score']].values 
ap_y = ap['Chance of Admit'].values

ap_lr = LogisticRegression()
ap_lr.fit(ap_X, ap_y)

def ap_log_regplot(ap_X, ap_y):
    plt.figure(figsize=(15,10))
    sns.regplot(ap_X, ap_y, logistic=True, color='green')
    return None

ap_log_regplot(ap_X, ap_y)
plt.xlabel('TOEFL Score')
plt.ylabel('Probability')
plt.title('Logistic Regression: Probability of High Chance by TOEFL Score')
plt.show

Изображение 174551

Кажется, все в порядке, но затем я пытаюсь использовать функцию predict_proba в Scikit-Learn, чтобы найти вероятности Chance to Admit учитывая какое-то произвольное значение для TOEFL Score (в этом случае 108, 104 и 112):

eight = ap_lr.predict_proba(108)[:, 1]
four = ap_lr.predict_proba(104)[:, 1]
twelve = ap_lr.predict_proba(112)[:, 1]
print(eight, four, twelve)

Где я получу:

[0.49939019] [0.44665597] [0.55213799]

Для меня это, по-видимому, указывает на то, что показатель TOEFL в 112 дает человеку 55% вероятности быть допущенным на основе этого набора данных. Если бы я растянул вертикальную линию от 112 по оси х до сигмовидной кривой, я бы ожидал пересечения около 0,90.

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

Любые идеи или я полностью моделирую/интерпретирую это неточно?

  • 0
    Вы должны использовать разделение теста поезда. затем тренируйтесь с набором поездов и прогнозируйте с помощью набора тестов. тогда найдите показатель точности
Теги:
scikit-learn
logistic-regression
seaborn

2 ответа

0
Лучший ответ

После некоторого поиска Cross-Validated предоставил правильный ответ на мой вопрос. Хотя он уже существует в Cross-Validated, я хотел бы также предоставить этот ответ на Stack Overflow.

Проще говоря, Scikit-Learn автоматически добавляет штраф регуляризации к логистической модели, которая сжимает коэффициенты. Statsmodels не добавляет этого штрафа. По-видимому, нет способа отключить это, поэтому нужно установить параметр C= в экземпляре LogisticRegression на некоторое сколь угодно высокое значение, например C=1e9.

Попробовав это и сравнив Scikit-Learn predict_proba() с сигмоидальным графом, созданным regplot (который использует statsmodels для его вычисления), оценки вероятности выравниваются.

Ссылка на полный пост: https://stats.stackexchange.com/questions/203740/logistic-regression-scikit-learn-vs-statsmodels

0
from sklearn.linear_model import LogisticRegression
from sklearn import metrics

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.4, random_state=4)
print(x_train.shape)
print(x_test.shape)
print(y_train.shape)
print(y_test.shape)

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

y_pred = logreg.predict(x_test)
print('log: ', metrics.accuracy_score(y_test, y_pred))

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

  • 0
    Мой вопрос был на самом деле не о точности прогноза, а о том, как оценки коэффициентов между Scikit-Learn и Statsmodels отличаются в контексте логистической регрессии. Я думаю, что нашел ответ в Перекрестной проверке (см. Ниже).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню