擅长:python、mysql、java
<p>Scikit learn在内部使用LibSVM,而这反过来又使用<a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.1639" rel="noreferrer">Platt scaling</a>,如<a href="http://www.csie.ntu.edu.tw/~cjlin/papers/plattprob.pdf" rel="noreferrer">this note by the LibSVM authors</a>中详细描述的那样,来校准支持向量机,以生成类预测之外的概率。</p>
<p>Platt标度首先需要像往常一样训练支持向量机,然后优化参数向量<em>A</em>和<em>B</em>,以便</p>
<pre><code>P(y|X) = 1 / (1 + exp(A * f(X) + B))
</code></pre>
<p>其中<code>f(X)</code>是样本到超平面的有符号距离(scikit learn的<code>decision_function</code>方法)。您可能认识到这个定义中的<a href="https://en.wikipedia.org/wiki/Logistic_function" rel="noreferrer">logistic sigmoid</a>,与逻辑回归和神经网络用于将决策函数转换为概率估计的函数相同。</p>
<p>请注意:参数<code>B</code>、“截距”或“偏差”或您喜欢称之为的任何参数都可能导致基于此模型的概率估计的预测与从SVM决策函数<code>f</code>得到的预测不一致。E、 g.假设<code>f(X) = 10</code>,那么<code>X</code>的预测是正的;但是如果<code>B = -9.9</code>和<code>A = 1</code>,那么<code>P(y|X) = .475</code>。我只是凭空说出这些数字,但你已经注意到这在实践中是可能发生的。</p>
<p>有效地,Platt标度在交叉熵损失函数下在支持向量机的输出上训练概率模型。为了防止这个模型过度拟合,它使用了一个内部的五重交叉验证,这意味着用<code>probability=True</code>训练支持向量机比普通的非概率支持向量机要昂贵得多。</p>