aboutsummaryrefslogtreecommitdiff
path: root/src/gensvm_train.c
diff options
context:
space:
mode:
authorGertjan van den Burg <gertjanvandenburg@gmail.com>2016-05-16 21:41:27 +0200
committerGertjan van den Burg <gertjanvandenburg@gmail.com>2016-05-16 21:41:27 +0200
commit2584591266e434140a94d818402745f34fb3acf3 (patch)
tree2faeb4f27b6b4101149e608657d2d018249e73c1 /src/gensvm_train.c
parentmajor refactor of the code (diff)
downloadgensvm-2584591266e434140a94d818402745f34fb3acf3.tar.gz
gensvm-2584591266e434140a94d818402745f34fb3acf3.zip
create a single training function for easy external access
Diffstat (limited to 'src/gensvm_train.c')
-rw-r--r--src/gensvm_train.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/src/gensvm_train.c b/src/gensvm_train.c
new file mode 100644
index 0000000..4c0f332
--- /dev/null
+++ b/src/gensvm_train.c
@@ -0,0 +1,51 @@
+/**
+ * @file gensvm_train.c
+ * @author Gertjan van den Burg
+ * @date May, 2016
+ * @brief Main function for training a GenSVM model.
+ *
+ */
+
+#include "gensvm_train.h"
+
+/**
+ * @brief Utility function for training a GenSVM model
+ *
+ * @details
+ * This function organizes model allocation, kernel preprocessing, instance
+ * weight initialization, and model training. It is the function that should
+ * be used for training a single GenSVM model. Note that optionally a seed
+ * model can be passed to the function to seed the V matrix with. When no such
+ * model is used this parameter should be set to NULL.
+ *
+ * @param[in] model a GenModel instance
+ * @param[in] data a GenData instance with the training data
+ * @param[in] seed_model an optional GenModel to seed the V matrix
+ *
+ */
+void gensvm_train(struct GenModel *model, struct GenData *data,
+ struct GenModel *seed_model)
+{
+ // copy dataset parameters to model
+ model->n = data->n;
+ model->m = data->m;
+ model->K = data->K;
+
+ // initialize the V matrix (potentially with a seed model)
+ gensvm_init_V(seed_model, model, data);
+
+ // allocate model
+ gensvm_allocate_model(model);
+
+ // preprocess kernel
+ gensvm_kernel_preprocess(model, data);
+
+ // reallocate model for kernels
+ gensvm_reallocate_model(model, data->n, data->r);
+
+ // initialize weights
+ gensvm_initialize_weights(data, model);
+
+ // start training
+ gensvm_optimize(model, data);
+}