MCPcopy Create free account
hub / github.com/Xtra-Computing/thundersvm / train_binary

Method train_binary

src/thundersvm/model/nusvc.cpp:7–45  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5#include <thundersvm/solver/nusmosolver.h>
6
7void NuSVC::train_binary(const DataSet &dataset, int i, int j, SyncArray<float_type> &alpha, float_type &rho) {
8 DataSet::node2d ins = dataset.instances(i, j);//get instances of class i and j
9 int n_pos = dataset.count()[i];
10 int n_neg = dataset.count()[j];
11 SyncArray<int> y(ins.size());
12 alpha.resize(ins.size());
13 SyncArray<float_type> f_val(ins.size());
14 alpha.mem_set(0);
15 f_val.mem_set(0);
16 float_type sum_pos = param.nu * ins.size() / 2;
17 float_type sum_neg = sum_pos;
18 int *y_data = y.host_data();
19 float_type *alpha_data = alpha.host_data();
20 for (int l = 0; l < n_pos; ++l) {
21 y_data[l] = +1;
22 alpha_data[l] = min(1., sum_pos);
23 sum_pos -= alpha_data[l];
24 }
25 for (int l = 0; l < n_neg; ++l) {
26 y_data[n_pos + l] = -1;
27 alpha_data[n_pos + l] = min(1., sum_neg);
28 sum_neg -= alpha_data[n_pos + l];
29 }
30 vector<int> ori = dataset.original_index(i, j);
31
32 KernelMatrix k_mat(ins, param);
33 int ws_size = get_working_set_size(ins.size(), k_mat.n_features());
34 NuSMOSolver solver(false);
35 solver.solve(k_mat, y, alpha, rho, f_val, param.epsilon, 1, 1, ws_size, max_iter);
36
37 LOG(INFO)<<"rho = "<<rho;
38 int n_sv = 0;
39 alpha_data = alpha.host_data();
40 for (int l = 0; l < alpha.size(); ++l) {
41 alpha_data[l] *= y_data[l];
42 if (alpha_data[l] != 0) n_sv++;
43 }
44 LOG(INFO)<<"#sv = "<<n_sv;
45}
46
47void NuSVC::model_setup(const DataSet &dataset, SvmParam &param) {
48 SVC::model_setup(dataset, param);

Callers

nothing calls this directly

Calls 9

minFunction · 0.85
instancesMethod · 0.80
resizeMethod · 0.80
mem_setMethod · 0.80
original_indexMethod · 0.80
solveMethod · 0.80
sizeMethod · 0.45
host_dataMethod · 0.45
n_featuresMethod · 0.45

Tested by

no test coverage detected