use*_*183 39 python svm scikit-learn
我正在使用scikit中的sklearn.svm.svc来学习二进制分类.我正在使用它的predict_proba()函数来获得概率估计.谁能告诉我predict_proba()如何在内部计算概率?
Fre*_*Foo 68
Scikit-learn在内部使用LibSVM,而这又使用了Platt缩放,如LibSVM作者在本说明中所详述,校准SVM以产生除类预测之外的概率.
普拉特缩放要求首先训练SVM像往常一样,然后优化参数向量甲和乙使得
P(y|X) = 1 / (1 + exp(A * f(X) + B))
Run Code Online (Sandbox Code Playgroud)
f(X)样本与超平面的符号距离在哪里(scikit-learn的decision_function方法).您可能会认识到此定义中的逻辑sigmoid,与逻辑网络和神经网络用于将决策函数转换为概率估计的功能相同.
请注意:B参数,"拦截"或"偏见"或您喜欢称之为的任何参数,都可能导致基于此模型的概率估计的预测与您从SVM决策函数获得的预测不一致f.例如,假设f(X) = 10,那么预测为X正; 但如果B = -9.9和A = 1,那么P(y|X) = .475.我是凭空捏造这些数字,但你注意到这可能会在实践中发生.
实际上,Platt缩放在交叉熵损失函数下在SVM输出之上训练概率模型.为了防止此模型过度拟合,它使用内部五重交叉验证,这意味着训练SVM probability=True可能比一个非概率SVM昂贵得多.
| 归档时间: |
|
| 查看次数: |
31736 次 |
| 最近记录: |