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

Method train

src/thundersvm/model/oneclass_svc.cpp:9–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

7#include <thundersvm/solver/csmosolver.h>
8
9void OneClassSVC::train(const DataSet &dataset, SvmParam param) {
10 model_setup(dataset, param);
11 int n_instances = dataset.n_instances();
12 SyncArray<float_type> alpha(n_instances);
13 SyncArray<float_type> f_val(n_instances);
14
15 KernelMatrix kernelMatrix(dataset.instances(), param);
16
17 alpha.mem_set(0);
18 float_type *alpha_data = alpha.host_data();
19 int n = static_cast<int>(param.nu * n_instances);
20 for (int i = 0; i < n; ++i) {
21 alpha_data[i] = 1;
22 }
23 if (n < n_instances)
24 alpha_data[n] = param.nu * n_instances - n;
25 int ws_size = get_working_set_size(n_instances, kernelMatrix.n_features());
26
27 //TODO batch, thrust
28 f_val.mem_set(0);
29 SyncArray<int> y(n_instances);
30 int *y_data = y.host_data();
31 for (int i = 0; i < n_instances; ++i) {
32 y_data[i] = 1;
33 }
34 CSMOSolver solver;
35 solver.solve(kernelMatrix, y, alpha, rho.host_data()[0], f_val, param.epsilon, 1, 1, ws_size, max_iter);
36
37 //todo these codes are similar to svr, try to combine them
38 LOG(INFO) << "rho = " << rho.host_data()[0];
39 vector<float_type> coef_vec;
40 for (int i = 0; i < n_instances; ++i) {
41 if (alpha_data[i] != 0) {
42 sv.push_back(dataset.instances()[i]);
43 sv_indices.push_back(i);
44 coef_vec.push_back(alpha_data[i]);
45 }
46 }
47 LOG(INFO) << "#sv = " << sv.size();
48 n_sv.host_data()[0] = sv.size();
49 n_sv.host_data()[1] = 0;
50 n_total_sv = sv.size();
51 coef.resize(coef_vec.size());
52 coef.copy_from(coef_vec.data(), coef_vec.size());
53
54 if(param.kernel_type == SvmParam::LINEAR){
55 compute_linear_coef_single_model(dataset.n_features(), dataset.is_zero_based());
56 }
57}
58
59vector<float_type> OneClassSVC::predict(const DataSet::node2d &instances, int batch_size) {
60 vector<float_type> dec_values = SvmModel::predict(instances, batch_size);

Callers

nothing calls this directly

Calls 11

instancesMethod · 0.80
mem_setMethod · 0.80
solveMethod · 0.80
resizeMethod · 0.80
copy_fromMethod · 0.80
dataMethod · 0.80
is_zero_basedMethod · 0.80
n_instancesMethod · 0.45
host_dataMethod · 0.45
n_featuresMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected