5

che sto cercando di eseguire questo codice: (merito va a Greg)dati suddivisione in prova e in treno, facendo un modello di regressione logistica in panda

import pandas as pd 
from sklearn.cross_validation import train_test_split 
import statsmodels.api as sm 

quality = pd.read_csv("https://courses.edx.org/c4x/MITx/15.071x/asset/quality.csv") 
train, test = train_test_split(quality, train_size=0.75, random_state=1) 

qualityTrain = pd.DataFrame(train, columns=quality.columns) 
qualityTest = pd.DataFrame(test, columns=quality.columns) 

qualityTrain['PoorCare'] = qualityTrain['PoorCare'].astype(int) 

cols = ['OfficeVisits', 'Narcotics'] 
x = qualityTrain[cols] 
x = sm.add_constant(x) 
y = qualityTrain['PoorCare'] 

model = sm.Logit(y, x).fit() 
model.summary() 

Ma sto ottenendo:

AttributeError: 'int' object has no attribute 'exp' 

sulla penultima riga. Ciò è chiaramente introdotto campionando i dati (train_test_split), perché il modello si adatta perfettamente all'intero dataset non modificato.

Come risolvere il problema?

risposta

5

solo convertire la variabile x per galleggia:

model = sm.Logit(y, x.astype(float)).fit() 

ottengo il seguente risultato:

<class 'statsmodels.iolib.summary.Summary'> 
""" 
          Logit Regression Results       
============================================================================== 
Dep. Variable:    PoorCare No. Observations:     98 
Model:       Logit Df Residuals:      95 
Method:       MLE Df Model:       2 
Date:    Mon, 23 Mar 2015 Pseudo R-squ.:     0.2390 
Time:      16:45:51 Log-Likelihood:    -39.714 
converged:      True LL-Null:      -52.188 
             LLR p-value:     3.823e-06 
================================================================================ 
        coef std err   z  P>|z|  [95.0% Conf. Int.] 
-------------------------------------------------------------------------------- 
const   -2.7718  0.561  -4.940  0.000  -3.872 -1.672 
OfficeVisits  0.0680  0.031  2.211  0.027   0.008  0.128 
Narcotics  0.1223  0.041  2.991  0.003   0.042  0.203 
================================================================================ 
""" 
+0

Grazie. Ma è strano che non sia in grado di adattarsi ai dati interi, no? – alkamid

+0

nell'esecuzione dell'esempio: 'train_test_split' restituisce una matrice di oggetto dtype. La versione principale di statsmodels ora solleva un'eccezione se uno degli array è un oggetto 'object' dtype. – user333700