나는 다음과 같은 코드를 사용하여 파이썬에서 로지스틱 회귀 분석을 수행하기 위해 노력하고 있어요 -로지스틱 회귀를
from patsy import dmatrices
import numpy as np
import pandas as pd
import statsmodels.api as sm
df=pd.read_csv('C:/Users/Documents/titanic.csv')
df=df.drop(['ticket','cabin','name','parch','sibsp','fare'],axis=1) #remove columns from table
df=df.dropna() #dropping null values
formula = 'survival ~ C(pclass) + C(sex) + age'
df_train = df.iloc[ 0: 6, : ]
df_test = df.iloc[ 6: , : ]
#spliting data into dependent and independent variables
y_train,x_train = dmatrices(formula, data=df_train,return_type='dataframe')
y_test,x_test = dmatrices(formula, data=df_test,return_type='dataframe')
#instantiate the model
model = sm.Logit(y_train,x_train)
res=model.fit()
res.summary()
을이
--->res=model.fit()
을 라인 -에서 나는 오류를 얻고있다
데이터 세트에 누락 된 값이 없습니다. 그러나 내 데이터 세트는 단지 10 개 항목으로 매우 작습니다. 나는 여기서 무엇이 잘못되고 있는지를 확신하지 못하고 어떻게 고칠 수 있습니까? Jupyter 노트북에서 프로그램을 실행하고 있습니다. 전체 오류 메시지는 아래에 주어진다 -
---------------------------------------------------------------------------
PerfectSeparationError Traceback (most recent call last)
<ipython-input-37-c6a47ec170d5> in <module>()
19 y_test,x_test = dmatrices(formula, data=df_test,return_type='dataframe')
20 model = sm.Logit(y_train,x_train)
---> 21 res=model.fit()
22 res.summary()
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\discrete\discrete_model.py in fit(self, start_params, method, maxiter, full_output, disp, callback, **kwargs)
1374 bnryfit = super(Logit, self).fit(start_params=start_params,
1375 method=method, maxiter=maxiter, full_output=full_output,
-> 1376 disp=disp, callback=callback, **kwargs)
1377
1378 discretefit = LogitResults(self, bnryfit)
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\discrete\discrete_model.py in fit(self, start_params, method, maxiter, full_output, disp, callback, **kwargs)
201 mlefit = super(DiscreteModel, self).fit(start_params=start_params,
202 method=method, maxiter=maxiter, full_output=full_output,
--> 203 disp=disp, callback=callback, **kwargs)
204
205 return mlefit # up to subclasses to wrap results
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\base\model.py in fit(self, start_params, method, maxiter, full_output, disp, fargs, callback, retall, skip_hessian, **kwargs)
423 callback=callback,
424 retall=retall,
--> 425 full_output=full_output)
426
427 #NOTE: this is for fit_regularized and should be generalized
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\base\optimizer.py in _fit(self, objective, gradient, start_params, fargs, kwargs, hessian, method, maxiter, full_output, disp, callback, retall)
182 disp=disp, maxiter=maxiter, callback=callback,
183 retall=retall, full_output=full_output,
--> 184 hess=hessian)
185
186 # this is stupid TODO: just change this to something sane
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\base\optimizer.py in _fit_newton(f, score, start_params, fargs, kwargs, disp, maxiter, callback, retall, full_output, hess, ridge_factor)
246 history.append(newparams)
247 if callback is not None:
--> 248 callback(newparams)
249 iterations += 1
250 fval = f(newparams, *fargs) # this is the negative likelihood
C:\Program Files\Anaconda3\lib\site-packages\statsmodels\discrete\discrete_model.py in _check_perfect_pred(self, params, *args)
184 np.allclose(fittedvalues - endog, 0)):
185 msg = "Perfect separation detected, results not available"
--> 186 raise PerfectSeparationError(msg)
187
188 def fit(self, start_params=None, method='newton', maxiter=35,
PerfectSeparationError: Perfect separation detected, results not available
추가 : AFAICS, model.raise_on_perfect_prediction = False'를 호출하기 전에 model.fit이 완벽한 분리 예외를 해제합니다. 그러나 설명 된 바와 같이 매개 변수는 식별되지 않거나 이론적으로 무한하지만 예상되는 매개 변수는 최적화 중지 기준에 따라 달라집니다. – user333700