我正在使用以下函数来计算p值,以建立拟合逻辑回归模型。
但是我得到了LinAlgError:奇异矩阵错误。
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)
Cramer_Rao = np.linalg.inv(F_ij)
sigma_estimates = np.sqrt(np.diagonal(Cramer_Rao))
z_scores = self.model.coef_[0] / sigma_estimates
p_values = [stat.norm.sf(abs(x)) * 2 for x in z_scores]
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)
答案 0 :(得分:0)
错误:reg = LogisticRegression_with_p_values()LinAlgError:奇异矩阵P值函数抛出错误后拟合模型:LinAlgError:奇异矩阵
第1步:运行以下代码,并观察绿线中的所有缺失值。
corr = inputs_train.corr()
kot = corr[corr>=.9]
plt.figure(figsize=(18,10))
sns.heatmap(kot, cmap="Greens")
我正在Lending Club分析中,遇到此错误,因此使用了上述热图,并在绿线中找到了一个缺失值,因此为了进一步调查,我运行了以下代码,检查输出是否为“ nan” inputs_train [ 'term:36']。corr(inputs_train ['term:36'])
O / P ::南
下一步:
当我们创建变量'term_int'时,我们没有将其从字符串转换为数字。要验证此检查输出,如果type(df_inputs_prepr_train ['term_int'] [0])给出'STR'
所以当我们写的时候:
df_inputs_prepr_train[df_inputs_prepr_train['term_int']==36]['term_int']
它将输出显示为零行,因为'term_int'仍然是str 36,而不是数字36。
所以当我们使用代码:::
df_inputs_prepr_train['term:36']=np.where((df_inputs_prepr_train['term_int']==36),1,0)
it basically stores only zeroes as output.
要采取的措施::
`df_inputs_prepr_train['term_int']=pd.to_numeric(df_inputs_prepr_train['term_int'])`
交叉验证:如果再次运行热图,您将不会在绿线中看到任何缺失的值