Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在python中为具有二进制类标签的模型选择阈值_Python 2.7_Prediction_Statsmodels_Logistic Regression_Confusion Matrix - Fatal编程技术网

Python 2.7 在python中为具有二进制类标签的模型选择阈值

Python 2.7 在python中为具有二进制类标签的模型选择阈值,python-2.7,prediction,statsmodels,logistic-regression,confusion-matrix,Python 2.7,Prediction,Statsmodels,Logistic Regression,Confusion Matrix,用例:为使用statsmodel的Logit构建的Logistic模型选择最佳阈值,以预测二元类或多项式类,但不包括整数类 要为Python中的逻辑模型选择阈值,是否有内置的东西?我记得,对于小数据集,通过选取最大的真预测标签真0和真1来优化阈值,从这里的图中可以最好地看到- 我还直观地知道,如果我设置alpha值,它应该会给我一个阈值,我可以在下面使用。如果一个简化模型中有变量,所有变量在95%置信度下都是显著的,我应该如何计算阈值?显然,将阈值设置为>0.5->1太天真了&因为我看到的是9

用例:为使用statsmodel的Logit构建的Logistic模型选择最佳阈值,以预测二元类或多项式类,但不包括整数类

要为Python中的逻辑模型选择阈值,是否有内置的东西?我记得,对于小数据集,通过选取最大的真预测标签真0和真1来优化阈值,从这里的图中可以最好地看到-

我还直观地知道,如果我设置alpha值,它应该会给我一个阈值,我可以在下面使用。如果一个简化模型中有变量,所有变量在95%置信度下都是显著的,我应该如何计算阈值?显然,将阈值设置为>0.5->1太天真了&因为我看到的是95%的置信度,这个阈值应该更小,这意味着p>0.2或其他什么

如果标签应为1,则表示临界值的范围,否则为0

我想要的是这样的东西-:

test_scores = smf.Logit(y_train,x_train,missing='drop').fit()
threshold =0.2 
#test_scores.predict(x_train,transform=False) will give the continues probability class, so to transform it into labels, I need to compare it against a threshold, (or x_test if I am testing the model)
y_predicted_train = np.array(test_scores.predict(x_train,transform=False) > threshold, dtype=float)
table = np.histogram2d(y_train, y_predicted_train, bins=2)[0]
# will do the similar on "test" data


# crude way of selecting an optimal threshold
from scipy.stats import ks_2samp
import numpy as np
ks_2samp(y_train, y_predicted_train)
(0.39963996399639962, 0.958989) 
# must get <95 % here & keep modifying the threshold as above till I fail to reject the Null at 95% 
其中y_train是真实值&y_在train数据集上预测。请注意,为了将y_预测为二进制,我已经按照上面的步骤进行了阈值处理

问题:-

一,。如何以客观的方式选择阈值-即减少误分类标签的百分比说我更关心丢失1个真阳性,但如果我将0误预测为1个假阴性,则不太在意&尝试减少此错误。这是我从ROC曲线得到的。statsmodelsroc_曲线中的roc曲线假设我已经为y_预测类做了标记,如果我的理解不正确,我只是在测试点me上重新验证这一点。我还认为,使用混淆矩阵也不能解决阈值拾取问题

二,。这让我想到-我应该如何使用这些内置函数oob、混淆矩阵的输出,以便首先在训练样本上选择最佳阈值,然后在测试和交叉验证样本上对其进行微调

我还在这里的scipy中查阅了K-S测试的官方文档-

相关-:

您好,我想您的问题最好在stats.stackexchange.com上回答。但是,FWIW,有一个PR向statsmodels添加一些分类性能度量,可能会让您朝着正确的方向前进。您还可以查看scikit learn的功能。此外,您还可以使用pred_table方法从Logit模型中获得混淆矩阵。