How can I get weights from the trained SVM (regression)?
How can I get bias and array of weights from the trained SVM::Types::NU_SVR
to perform prediction by myself?
For example, I trained SVM for regression with linear kernel function and I want to get the trained weights, to perform this part of code by myself: https://github.com/cjlin1/libsvm/blob...
I want to get double sv_coef[]
and double bias
from trained Ptr<SVM> svr
:
double train::trainSVR(Mat data, vector<int> labels, Mat unlabled_data)
{
Ptr<TrainData> trainData = TrainData::create(data, ml::ROW_SAMPLE, labels);
Ptr<SVM> svr = SVM::create();
svr->setType(SVM::Types::NU_SVR); //For regression, to predict value
svr->setKernel(SVM::LINEAR); // linear kernel function
svr->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
svr->setNu(0.1);
cout << "Training Support Vector Regressor..." << endl;
//svr->trainAuto(trainData);
svr->train(trainData);
bool trained = svr->isTrained();
double sum = 0;
if (trained)
{
//svr->save(".\\Trained Models\\SVR Model.xml");
// how to get: double sv_coef[] ?
// how to get: double bias (rho) ?
// custom prediction
for(int i=0; i<unlabled_data.cols; i++) {
sum += sv_coef[i] * unlabled_data.at<double>(0,i);
}
sum -= bias;
}
return sum;
}
imho, your for-loop is wrong. it should iterate over the support vectors, not over the query data