2015-07-09 4 views
1

При использовании статистических моделей я получаю эту странную ошибку: ValueError: endog must be in the unit interval. Может ли кто-нибудь дать мне больше информации об этой ошибке? Google не помогает.ValueError: endog должен находиться в единичном интервале

Код, который произвел ошибку:

""" 
Multiple regression with dummy variables. 
""" 

import pandas as pd 
import statsmodels.api as sm 
import pylab as pl 
import numpy as np 

df = pd.read_csv('cost_data.csv') 
df.columns = ['Cost', 'R(t)', 'Day of Week'] 
dummy_ranks = pd.get_dummies(df['Day of Week'], prefix='days') 
cols_to_keep = ['Cost', 'R(t)'] 
data = df[cols_to_keep].join(dummy_ranks.ix[:,'days_2':]) 
data['intercept'] = 1.0 

print(data) 

train_cols = data.columns[1:] 
logit = sm.Logit(data['Cost'], data[train_cols]) 

result = logit.fit() 

print(result.summary()) 

И в отслеживающий:

Traceback (most recent call last): 
    File "multiple_regression_dummy.py", line 20, in <module> 
    logit = sm.Logit(data['Cost'], data[train_cols]) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/statsmodels/discrete/discrete_model.py", line 404, in __init__ 
    raise ValueError("endog must be in the unit interval.") 
ValueError: endog must be in the unit interval. 
+0

Возможно, проверьте это условие, которое генерирует эту ошибку: if (self .__ class __.__ name__! = 'MNLogit' и не np.all ((self.endog> = 0) & (self.endog <= 1))) : raise ValueError ("endog должен быть в единичном интервале.") – DmitryK

+0

Каковы ваши данные 'Cost'? Logit требует, чтобы зависимая переменная (endog) находилась в единичном интервале. Если вам нужна логистическая регрессия со значениями за другой интервал, вам необходимо преобразовать свои значения так, чтобы они находились в единичном интервале. Однако Logit не требует, чтобы 'endog' были 0, 1 целыми числами, поэтому мы можем использовать его для пропорций. – user333700

+0

Ah 'Cost' не находится в единичном интервале. Любая идея, почему Logit требует этого? –

ответ

3

Я получил эту ошибку, когда мой целевой столбец имел значения больше 1. Убедитесь, что целевой столбец находится между 0 и 1 (как это требуется для логистической регрессии) и повторите попытку. Например, если у вас есть целевой столбец со значениями 1-5, сделайте 4 и 5 положительным классом и 1,2,3 отрицательным классом. Надеюсь это поможет.

1

Похоже, вы следовали той же логистической регрессии учебник, который я сделал: http://blog.yhat.com/posts/logistic-regression-and-python.html

я в конечном итоге получить ту же ошибку значение, когда я подхожу свою логистическую регрессию, и трюк мне нужно было, чтобы он работает делал обязательно удалите все строки моих данных с отсутствующими значениями (N/A или np.nan).

Это может быть сделано с помощью функции панды pandas.notnull() следующим образом:

данных = данные [pd.notnull (данные [ 'Стоимость'])],

данные = данные [Pd .notnull (данные ['R (t)'])],

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

Надеюсь, это поможет кому-то еще!

Смежные вопросы