2013-06-14 16 views
7

논리적 회귀를 계산하려고했습니다. 나는 csv 파일로 데이터를 가지고있다. 모양은파이썬에서 로지스틱 회귀 계산

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 
.......................... 

이것은 내 코딩입니다.

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 

어떻게 코드를 다시 작성하기 :

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() 

나는 내가 오류가 발생했습니다 파이썬에서 코드를 실행하면?

+0

오류가 발생했습니다. 단 하나의 행렬이 있다고합니다. sm.Logit을 호출하기 전에 데이터에 무엇이 있습니까? – doctorlove

답변

9

코드에 아무 문제가 없습니다. 내 추측으로는 데이터에 누락 된 값이 있다는 것입니다. dropna을 시도하거나 missing='drop'을 사용하여 Logit하십시오. 또한 오른손 쪽이 가득 차 있는지 확인하십시오. np.linalg.matrix_rank(data[train_cols].values)

+1

"열차"매트릭스가 가득 차있는 등급이 아니라고 판단한 경우 문제의 원인이되는 열을 어떻게 폐기해야합니까? 이것은 Stackoverflow에서 반복적으로 대답하지만, 나는이 일을 할 수 없었다. 내가 뭘 시도했는지와 함께 여기에 전체 문제점을 게시하십시오. http://stackoverflow.com/questions/23848003/detecting-mulicollinear-or-columns-that-have-linear-combinations-while-modelli - 답변을 고려해보십시오. – ekta