(model *SVM_Model, x []SVM_Node, dec_values []float64)
| 2256 | } |
| 2257 | |
| 2258 | func (this *SVM) SVM_predict_values(model *SVM_Model, x []SVM_Node, dec_values []float64) float64 { |
| 2259 | var i int |
| 2260 | var rst float64 |
| 2261 | if model.param.svm_type == ONE_CLASS || |
| 2262 | model.param.svm_type == EPSILON_SVR || |
| 2263 | model.param.svm_type == NU_SVR { |
| 2264 | sv_coef := model.sv_coef[0] |
| 2265 | sum := float64(0) |
| 2266 | for i = 0; i < model.l; i++ { |
| 2267 | sum += sv_coef[i] * k_function(x, model.SV[i], model.param) |
| 2268 | } |
| 2269 | sum -= model.rho[0] |
| 2270 | dec_values[0] = sum |
| 2271 | |
| 2272 | if model.param.svm_type == ONE_CLASS { |
| 2273 | if sum > 0 { |
| 2274 | rst = 1 |
| 2275 | } else { |
| 2276 | rst = -1 |
| 2277 | } |
| 2278 | } else { |
| 2279 | rst = sum |
| 2280 | } |
| 2281 | } else { |
| 2282 | nr_class := model.nr_class |
| 2283 | l := model.l |
| 2284 | |
| 2285 | kvalue := make([]float64, l) |
| 2286 | for i = 0; i < l; i++ { |
| 2287 | kvalue[i] = k_function(x, model.SV[i], model.param) |
| 2288 | } |
| 2289 | |
| 2290 | start := make([]int, nr_class) |
| 2291 | start[0] = 0 |
| 2292 | for i = 1; i < nr_class; i++ { |
| 2293 | start[i] = start[i-1] + model.nSV[i-1] |
| 2294 | } |
| 2295 | |
| 2296 | vote := make([]int, nr_class) |
| 2297 | for i = 0; i < nr_class; i++ { |
| 2298 | vote[i] = 0 |
| 2299 | } |
| 2300 | |
| 2301 | p := 0 |
| 2302 | for i = 0; i < nr_class; i++ { |
| 2303 | for j := i + 1; j < nr_class; j++ { |
| 2304 | sum := float64(0) |
| 2305 | si := start[i] |
| 2306 | sj := start[j] |
| 2307 | ci := model.nSV[i] |
| 2308 | cj := model.nSV[j] |
| 2309 | |
| 2310 | var k int |
| 2311 | coef1 := model.sv_coef[j-1] |
| 2312 | coef2 := model.sv_coef[i] |
| 2313 | for k = 0; k < ci; k++ { |
| 2314 | sum += coef1[si+k] * kvalue[si+k] |
| 2315 | } |
no test coverage detected