在用sklearn进行逻辑回归的时候,如果想要查看变量的p值是否足够小,那么就只能自己计算p值。似然比是逻辑回归参数检验的一种方法
假设我们的逻辑回归有n个特征,需要对其中的x1特征对于的参数w1做参数检验
1、计算包含全部特征的预测概率似然估计L0
2、扣除x1特征进行重新拟合逻辑回归,计算新的逻辑回归模型的似然估计L1
3、计算2*ln(L0 / L1)服从自由度为1的卡方分布
import copy
def likelihood(pred,y):
if not isinstance(y,list):
yt = y.tolist()
else:
yt = copy.copy(y)
ss = 0
for i in range(len(yt)):
ss += np.log(pred[i][yt[i]])
return ss
from scipy.stats import chi2
# lr为包含所有特征的模型,X_train为包含所有特征自变量,y_train为包含所有特征的因变量
pred = lr.predict_proba(X_train)
total_likelihood = likelihood(pred,y_train)
for i in range(len(x_cols)):
# 统计所有特征的pvalue
# 计算扣除col的预测值
left_col = x_cols[:i] + x_cols[i+1:]
left_train_x = X_train.loc[:,left_col]
left_lr = LogisticRegression(penalty='l2', C=0.9, n_jobs=-1)
left_lr.fit(left_train_x, y_train)
left_pred = left_lr.predict_proba(left_train_x)
left_likelihood = likelihood(left_pred,y_train)
ch2_value = (total_likelihood - left_likelihood) * 2
pvalue = chi2.sf(ch2_value, 1)
print(x_cols[i],pvalue)