我正在使用来自scikit-learn的sklearn.svm.svc进行二进制分类。我正在使用其predict_proba()函数来获取概率估计值。谁能告诉我predict_proba()是如何内部计算概率的?
Scikit- learn在内部使用LibSVM,而这又使用了Platt缩放(如LibSVM作者在本说明中所述)来校准SVM以产生除类预测之外的概率。
普拉特缩放需要首先像往常一样训练SVM,然后优化参数向量 A 和 B ,使得
P(y|X) = 1 / (1 + exp(A * f(X) + B))
f(X)样品到超平面的有符号距离在哪里(scikit- learndecision_function方法)。您可能会在此定义中认识到逻辑乙状结肠,这与逻辑回归和神经网络用于将决策函数转换为概率估计的功能相同。
f(X)
decision_function
请注意:B参数“截距”或“偏差”或您喜欢调用的任何参数,都可能导致基于该模型的概率估计进行的预测与您从SVM决策函数获得的预测不一致f。例如,假设f(X) = 10,则对的预测为X正;但是如果B = -9.9和A = 1,那么P(y|X) = .475。我凭空想出这些数字,但是您已经注意到,这实际上可能会发生。
B
f
f(X) = 10
X
B = -9.9
A = 1
P(y|X) = .475
实际上,Platt缩放可在交叉熵损失函数下,在SVM输出的顶部训练概率模型。为了防止此模型过度拟合,它使用内部五重交叉验证,这意味着使用SVM训练SVMprobability=True可能比原始的非概率SVM昂贵得多。
probability=True