spark ml 2.0 - Naive Bayes - 如何确定每个类的阈值

时间:2016-11-07 23:54:41

标签: apache-spark machine-learning text-classification threshold naivebayes

我正在使用NB进行文档分类并尝试了解阈值参数,以了解它如何帮助优化算法。

Spark ML 2.0 thresholds doc说:

Param for Thresholds in multi-class classification to adjust the probability of predicting each class. Array must have length equal to the number of classes, with values >= 0. The class with largest value p/t is predicted, where p is the original probability of that class and t is the class' threshold.

0)有人可以更好地解释这个吗?它可以实现什么目标?我的一般想法是,如果你有0.7的阈值,那么至少一个类预测概率应该大于0.7,如果不是那么预测应该返回空。手段将其归类为“不确定”或仅为预测列留空。当你仍然选择具有最大概率的类别时,p / t函数如何实现呢?

1)它调整的概率是多少?默认列'概率'实际上是条件概率,'rawPrediction'是 根据文件的信心。我相信阈值会调整'rawPrediction'而非'概率'列。我对吗?

2)以下是我的一些概率和rawPrediction矢量的样子。如何基于此设置阈值,以便我可以删除某些不确定的分类? probability介于0和1之间,但rawPrediction似乎是对数比例。

概率: [2.233368649314982E-15,1.6429456680945863E-9,1.4377313514127723E-15,7.858651849363202E-15]

rawPrediction: [-496.9606736723107,-483.452183395287,-497.40111830218746]

基本上我希望分类器在没有任何概率超过0.7%时将预测列留空。

此外,当多于一个类别具有非常接近的分数时,如何将某些内容归类为不确定的,例如0.812,0.800,0.799。挑选最大值是我可能不想要的东西,而是归类为“不确定”或留空,我可以对这些文档进行进一步的分析和处理,或者为这些文档训练另一个模型。

1 个答案:

答案 0 :(得分:2)

我还没玩过它,但目的是为每个类提供不同的阈值。我从docstring中提取了这个例子:

model = nb.fit(df)
>>> result.prediction
1.0
>>> result.probability
DenseVector([0.42..., 0.57...])
>>> result.rawPrediction
DenseVector([-1.60..., -1.32...])
>>> nb = nb.setThresholds([0.01, 10.00])
>>> model3 = nb.fit(df)
>>> result = model3.transform(test0).head()
>>> result.prediction
0.0

如果我理解正确,效果是将[0.42,0.58]转换为[ .42 / .01 .58 / 10 ] = [42,5.8],将预测("最大p / t")从第1列(上面的第三行)切换到第0列(上面的最后一行)。但是,我无法在源代码中找到逻辑。任何人吗?

退后一步:我没有看到内置的方法来做你想要的事情:如果没有阶级占主导地位,那就是不可知论者。您必须添加以下内容:

def weak(probs, threshold=.7, epsilon=.01):
    return np.all(probs < threshold) or np.max(np.diff(probs)) < epsilon

>>> cases = [[.5,.5],[.5,.7],[.7,.705],[.6,.1]]
>>> for case in cases:
...    print '{:15s} - {}'.format(case, weak(case))

[0.5, 0.5]      - True
[0.5, 0.7]      - False
[0.7, 0.705]    - True
[0.6, 0.1]      - True

(注意我还没有检查probs是否是合法概率分布。)

或者,如果您实际上并未做出艰难的决定,请使用预测概率和诸如Brier分数,对数丢失或信息增益之类的度量标准来解释校准以及准确性。