LinAlgError:用于在logistic回归中查找p值的奇异矩阵

时间:2020-07-12 05:53:19

标签: python numpy scikit-learn logistic-regression p-value

我正在尝试查找信用风险建模的违约概率,因此我尝试使用此代码查找p值,但出现以下错误。您能检查一下并建议我吗?

from sklearn import linear_model
import scipy.stats as stat

class LogisticRegression_with_p_values:
    
    def __init__(self,*args,**kwargs):
        self.model = linear_model.LogisticRegression(*args,**kwargs)
        
    def fit(self,X,y):
        self.model.fit(X,y)
        denom = (2.0 * (1.0 + np.cosh(self.model.decision_function(X))))
        denom = np.tile(denom,(X.shape[1],1)).T
        F_ij = np.dot((X / denom).T,X) ## Fisher Information Matrix
        Cramer_Rao = np.linalg.inv(F_ij) ## Inverse Information Matrix
        sigma_estimates = np.sqrt(np.diagonal(Cramer_Rao))
        z_scores = self.model.coef_[0] / sigma_estimates # z-score for eaach model coefficient
        p_values = [stat.norm.sf(abs(x)) * 2 for x in z_scores] ### two tailed test for p-values
        
        self.z_scores = z_scores
        self.p_values = p_values
        self.sigma_estimates = sigma_estimates
        self.F_ij = F_ij
        self.coef_ = self.model.coef_
        self.intercept_ = self.model.intercept_
        self.p_values = p_values

reg = LogisticRegression_with_p_values()

reg.fit(inputs_train, loan_data_targets_train)

输出结果: 在这里,我收到类似下面的错误,请检查并建议我

---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-25-94eedca582e4> in <module>
----> 1 reg.fit(inputs_train, loan_data_targets_train)

<ipython-input-23-ba71be0f295c> in fit(self, X, y)
     12         denom = np.tile(denom,(X.shape[1],1)).T
     13         F_ij = np.dot((X / denom).T,X) ## Fisher Information Matrix
---> 14         Cramer_Rao = np.linalg.inv(F_ij) ## Inverse Information Matrix
     15         sigma_estimates = np.sqrt(np.diagonal(Cramer_Rao))
     16         z_scores = self.model.coef_[0] / sigma_estimates # z-score for eaach model coefficient

~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in inv(a)
    549     signature = 'D->D' if isComplexType(t) else 'd->d'
    550     extobj = get_linalg_error_extobj(_raise_linalgerror_singular)
--> 551     ainv = _umath_linalg.inv(a, signature=signature, extobj=extobj)
    552     return wrap(ainv.astype(result_t, copy=False))
    553 

~\Anaconda3\lib\site-packages\numpy\linalg\linalg.py in _raise_linalgerror_singular(err, flag)
     95 
     96 def _raise_linalgerror_singular(err, flag):
---> 97     raise LinAlgError("Singular matrix")
     98 
     99 def _raise_linalgerror_nonposdef(err, flag):

LinAlgError: Singular matrix```

0 个答案:

没有答案