Python

2013-06-14 34 views
7

Lojistik regresyonunu hesaplayın Mantıksal regresyon hesaplamayı denedim. Verileri csv dosyası olarak aldım. oPython

node_id,second_major,gender,major_index,year,dorm,high_school,student_fac 
0,0,2,257,2007,111,2849,1 
1,0,2,271,2005,0,51195,2 
2,0,2,269,2007,0,21462,1 
3,269,1,245,2008,111,2597,1 
.......................... 

benziyor Bu benim kodlama olduğunu.

Traceback (most recent call last): 
File "D:\project\logisticregression.py", line 24, in <module> 
result = logit.fit() 
File "c:\python26\lib\site-packages\statsmodels-0.5.0-py2.6-   win32.egg\statsmodels\discrete\discrete_model.py", line 282, in fit 
disp=disp, callback=callback, **kwargs) 
File "c:\python26\lib\site-packages\statsmodels-0.5.0-py2.6- win32.egg\statsmodels\discrete\discrete_model.py", line 233, in fit 
disp=disp, callback=callback, **kwargs) 
File "c:\python26\lib\site-packages\statsmodels-0.5.0-py2.6- win32.egg\statsmodels\base\model.py", line 291, in fit 
hess=hess) 
File "c:\python26\lib\site-packages\statsmodels-0.5.0-py2.6-win32.egg\statsmodels\base\model.py", line 341, in _fit_mle_newton 
newparams = oldparams - np.dot(np.linalg.inv(H), 
File "C:\Python26\Lib\site-packages\numpy\linalg\linalg.py", line 445, in inv 
return wrap(solve(a, identity(a.shape[0], dtype=a.dtype))) 
File "C:\Python26\Lib\site-packages\numpy\linalg\linalg.py", line 328, in solve 
raise LinAlgError('Singular matrix') 
LinAlgError: Singular matrix 

Nasıl kodunu yeniden yazmak için:

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

df = pd.read_csv("Reed98.csv") 
print df.describe() 

dummy_ranks = pd.get_dummies(df['second_major'], prefix='second_major') 

cols_to_keep = ['second_major', 'dorm', 'high_school'] 
data = df[cols_to_keep].join(dummy_ranks.ix[:, 'year':]) 
train_cols = data.columns[1:] 
# Index([gre, gpa, prestige_2, prestige_3, prestige_4], dtype=object) 

logit = sm.Logit(data['second_major'], data[train_cols]) 
result = logit.fit() 

print result.summary() 

Ben bir hata var Python kodlama çalıştırdığınızda?

+0

Hata, tekil bir matrisinizin olduğunu söylüyor. Sm.Logit çağırmadan önce verilerde ne var? – doctorlove

cevap

9

Kodunuzda yanlış bir şey yok. Tahminim, verilerinizde eksik değerler var. Bir dropna kullanmayı deneyin veya Logit'e missing='drop' kullanın. Ayrıca sağ tarafın tam olduğunu kontrol edebilirsiniz np.linalg.matrix_rank(data[train_cols].values)

+1

"Tren" matrisinin tam sıra OLMADIĞINI tespit ettiğimizi varsayarsak, sorun çıkarmanıza neden olan sütun (lar) ın atılmasına nasıl başlanırsınız. Bu Stackoverflow'ta tekrar tekrar yanıtlandı, ancak bu işi elde edemedim. Denediğim şeyle birlikte tüm sorunu burada yayınladım. http://stackoverflow.com/questions/23848003/detecting-mulicollinear-or-columns-that-have-linear-combinations-while-modelli - lütfen yanıtlamayı düşünün. – ekta