Визуализация логистической регрессии в соответствии с моделями статистики - PullRequest
0 голосов
/ 10 сентября 2018

Простой вопрос, правда.Я просто подгоняю логистическую регрессию к некоторым данным:

logit = sm.Logit(df.flow2, df.latency_condition)
result = logit.fit()

print(result.summary())

Что дает:

                          Logit Regression Results                           
==============================================================================
Dep. Variable:                  flow2   No. Observations:                 5930
Model:                          Logit   Df Residuals:                     5929
Method:                           MLE   Df Model:                            0
Date:                Mon, 10 Sep 2018   Pseudo R-squ.:                 -0.3009
Time:                        21:18:35   Log-Likelihood:                -3927.8
converged:                       True   LL-Null:                       -3019.2
                                        LLR p-value:                       nan
=====================================================================================

Теперь я хотел бы отобразить этот результат поверх моих точек данных, но у меня нетИдея как это сделать.Я использовал seaborn для построения регрессии:

sns.lmplot(x="latency_condition", logistic=True, y="flow2", data=df)
plt.show()

Я знаю, что lmplot использует statsmodels, но я не уверен, что мне подходит модель, точно такая же, как lmplot.Кроме того, я просто хочу иметь возможность построить полную кривую логистической регрессии (от y = 1 до y = 0).Итак, как мне построить этот результат statsmodels?Приветствуются альтернативные подходы.

Редактировать:

Даниэль ниже дал мне простое решение, и я считаю, что это правильно.Я не уверен, в чем разница между подходящей логистической регрессией и тем, что делает lmplot.Я предполагаю, что должен отразить свою ось X или подогнать другую кривую из-за нисходящего уклона моих данных?

Вот что дает мне lmplot:

lmplot

И это результат регрессии:

enter image description here

1 Ответ

0 голосов
/ 11 сентября 2018

Хорошо, так что я протестировал решение, и оно работает.Попробуйте это:

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt

HOW_MANY = 10
x = np.random.randn(HOW_MANY)

y = np.linspace(0,1,HOW_MANY)
df = pd.DataFrame({'x':x,'y':y})
logit = sm.Logit(df['y'],df['x']).fit()

pred_input = np.linspace(x.min(),x.max(),HOW_MANY)
predictions = logit.predict(pred_input)
plt.scatter(df['x'],df['y'])
plt.plot(pred_input,predictions,c='red')
plt.show()

Если вы хотите расширить красную кривую дальше вправо или влево, просто передайте массив pred_input, который охватывает больший диапазон.

Я знаю, что lmplot используетstatsmodels, но я не уверен, что то, как я соответствую модели, было точно таким же, как то, как это делает lmplot.

У вас нет никаких гарантий, так как sns.lmplot () подойдет для новогорегрессия, если вы называете это так, как вы предлагаете.Вы хотите построить пространство предсказания конструктора Logit, передав ему фиктивный входной вектор, который находится в пространстве всех возможных входных данных или настолько, насколько это возможно.Значения 10/100 - это хорошее число.

...