怎么用r来做呢?
在下面的练习中,我使用逻辑回归来预测泰坦尼克号数据集中的一个乘客是否存活下来。其目的是为了找到一个预测的最优阈值,以确定是否将结果分类为1或0。
阈值示例:考虑模型预测了两名乘客的以下值:p1 = 0.7,p2 = 0.4。如果阈值为0.5,则p1>阈值和乘客1处于幸存类别中。而p2<阈值,所以乘客2处于未存活类别。
但是,根据我们的数据,0.5“默认”的阈值将不能确保正确分类的最大数量。在这种情况下,我们可以使用交叉验证来根据在验证集上运行模型的结果来确定每个折叠的最佳阈值。
在执行过程中,我遵循以下步骤:
将数据随机分为80训练和验证,20不可见数据的测试。
对80%的数据进行交叉验证,这些数据将用于培训和验证模型。
在验证数据集上运行模型后,根据每次折叠迭代的最佳精度获取最佳阈值。
找到最佳阈值具有最高精度的阈值,并在测试该模型与测试数据集时使用它作为中断。
注意:roc通常是找到最佳“截止”概率的最佳方法,但为了简单起见,我在下面的代码中使用了准确性。
下面的cross_validation方法将:
创建一个“perf”数据框,将数据存储在验证数据上的模型测试结果。
使用createfolds方法创建nbfolds折叠数。
在每一个折叠上:
训练k-1倍的模型
在剩余部分数据上测试模型
使用性能方法测量模型的准确性。
将最优阈值和它的精度添加到perf dataframe中。
在perf dataframe中查看optthresh——具有最高精度的阈值。
在测试集上测试模型(原始数据的20%)时,将其用作截止值。
使用f1分数来衡量模型的准确性。
那么,如果我们运行这个方法100次,我们可以测量使用交叉验证时的最大模型精度:
我们可以看到,在使用阈值选择的准确性方法时,我们的最大性能大约是0.885,考虑到该模型正在对不可见数据进行测试,所以这并不差。
我们可以看到,当使用精度方法进行阈值选择时,我们的最大性能约为0.885,
作者:sondosatwi
来源:wordpress
编译:fintechprobe