我在python中编码。
在我的工作中,我有一个特定的参数,其中有多个可能的值,以及一些具有相关二进制目标值X
的数据y
。
对于每个参数值,我使用X
和y
上的scickit-learn运行一些分类算法(例如:Naive Bayes)。
在这一步中,我们使用交叉验证,对我们的数据集进行80:20的列车测试分割,并对结果进行平均。
这会产生每个参数值的分数(精确回忆曲线下的面积),我们选择分数最高的分数作为此分类器的首选参数值。
然后,我们希望使用数据X
的所有来训练算法,而不是仅仅80%,获得我们将使用的一些决策函数f
用于做出预测。
这些决策函数返回概率或数值,表明“有多确定”'算法是属于某一类的某个样本;他们没有正确预测样本的类。
这是通过阈值t
来完成的:数值小于t
的样本被赋予类0,而其余的样本被赋予类1。
当我们拥有真正的标签时,可以针对真实标签测试这些预测,以进行有关预测的评估(如精确度和召回)。
改变t
的值正是精确回忆空间中生成多个点的原因,允许我们绘制给定模型的曲线(从而计算其下的面积)。
我们在交叉验证中为每个折叠做了这个。
现在,我们可以应用Z
一些数据f
,但我们没有标签。
我们如何为我们的模型选择合适的t
值?
更具体地说,考虑交叉验证期间生成的模型(对于相同的首选参数值)。 每个这样的模型都有一个相应的决策函数,因此具有相应的精确回忆曲线和相关的阈值。
在其中一条曲线中给出一个点p_0
,因此相关的阈值t_0
值,可以合理地假设其他曲线中接近p_0
的点将具有相关的阈值值接近t_0
?
换句话说,如果我们将交叉验证期间获得的阈值的平均值用作阈值,那么期望我们的模型(使用所有数据训练)的行为与我们在交叉验证中的行为类似是否合理?
您可以假设在交叉验证中获得的模型的平均值与每个交叉验证模型本身之间几乎没有差异。 对于前面提到的朴素贝叶斯分类器,例如我们有
如此不同的折叠会产生非常接近的曲线。