2013-06-14 124 views
7

Tôi đã cố gắng tính toán hồi quy logic. Tôi có dữ liệu dưới dạng tệp csv. có vẻ nhưTính toán hồi quy logistic trong python

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

Đây là mã của tôi.

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

Khi tôi chạy mã trong python tôi có một lỗi:

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 

Làm thế nào để viết lại mã?

+0

Lỗi nói rằng bạn có ma trận số ít. Có gì trong dữ liệu trước khi bạn gọi sm.Logit? – doctorlove

Trả lời

9

Không có gì sai với mã của bạn. Tôi đoán là bạn có các giá trị thiếu trong dữ liệu của bạn. Hãy thử một số dropna hoặc sử dụng missing='drop' để Logit. Bạn cũng có thể kiểm tra xem mặt bên phải có xếp hạng đầy đủ không np.linalg.matrix_rank(data[train_cols].values)

+1

Giả sử chúng tôi phát hiện rằng ma trận "đào tạo" KHÔNG có xếp hạng đầy đủ, bạn nên loại bỏ (các) cột đó gây ra rắc rối cho bạn như thế nào. Điều này được trả lời hơn và hơn nữa trong Stackoverflow, nhưng tôi couldnt dường như để có được công việc này. Đã đăng toàn bộ vấn đề ở đây, cùng với những gì tôi đã thử. http://stackoverflow.com/questions/23848003/detecting-mulicollinear-or-columns-that-have-linear-combinations-while-modelli - vui lòng xem xét trả lời. – ekta