菜鸟教程小白 发表于 2022-12-13 01:17:35

ios - 在 CvSVM 中获取权重,OpenCV 的 SVM 实现


                                            <p><p>我在 iOS 上使用 OpenCV 的 SVM 实现(基于 LibSVM)。训练后是否可以得到权重向量? </p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>处理它之后,我已经能够获得权重。为了获得权重,必须首先获得支持向量,然后将它们与 alpha 值相乘。</p>

<pre><code>// get the svm weights by multiplying the support vectors by the alpha values
int numSupportVectors = SVM.get_support_vector_count();
const float *supportVector;
const CvSVMDecisionFunc *dec = SVM.decision_func;
svmWeights = (float *) calloc((numOfFeatures+1),sizeof(float));
for (int i = 0; i &lt; numSupportVectors; ++i)
{
    float alpha = *(dec.alpha + i);
    supportVector = SVM.get_support_vector(i);
    for(int j=0;j&lt;numOfFeatures;j++)
      *(svmWeights + j) += alpha * *(supportVector+j);
}
*(svmWeights + numOfFeatures) = - dec.rho; //Be careful with the sign of the bias!
</code></pre>

<p>这里唯一的技巧是实例变量 <code>float *decision_function</code> 在 opencv 框架上受到保护,所以我必须更改它才能访问它。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 在 CvSVM 中获取权重,OpenCV 的 SVM 实现,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/15033363/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/15033363/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 在 CvSVM 中获取权重,OpenCV 的 SVM 实现