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 < numSupportVectors; ++i)
{
float alpha = *(dec.alpha + i);
supportVector = SVM.get_support_vector(i);
for(int j=0;j<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]