blob: 03b7ffadefda978b948e0ebc7b310ce5e3cdcbfb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
/**
* @file gensvm_base.h
* @author Gertjan van den Burg
* @date May, 2016
* @brief Header file for gensvm_base.c
*
* @details
* Contains documentation and declarations of GenModel and GenData, and
* function declarations for the functions in gensvm_base.c.
*
*/
#ifndef GENSVM_BASE_H
#define GENSVM_BASE_H
// includes
#include "gensvm_globals.h"
// type declarations
/**
* @brief A structure to represent the data.
*
* @param K number of classes
* @param n number of instances
* @param m number of predictors
* @param *y pointer to vector of class labels
* @param *Z pointer to augmented data matrix
* @param *RAW pointer to augmented raw data matrix
* @param *J pointer to regularization vector
* @param kerneltype kerneltype used in GenData::Z
* @param *kernelparam kernel parameters used in GenData::Z
*
*/
struct GenData {
long K;
///< number of classes
long n;
///< number of instances
long m;
///< number of predictors (width of RAW)
long r;
///< number of eigenvalues (width of Z)
long *y;
///< array of class labels, 1..K
double *Z;
///< augmented data matrix (either equal to RAW or to the eigenvectors
///< of the kernel matrix)
double *RAW;
///< augmented raw data matrix
double *Sigma;
KernelType kerneltype;
double *kernelparam;
};
/**
* @brief A structure to represent a single GenSVM model.
*
*/
struct GenModel {
int weight_idx;
///< which weights to use (1 = unit, 2 = group)
long K;
///< number of classes in the dataset
long n;
///< number of instances in the dataset
long m;
///< number of predictor variables in the dataset
double epsilon;
///< stopping criterion for the IM algorithm.
double p;
///< parameter for the L-p norm in the loss function
double kappa;
///< parameter for the Huber hinge function
double lambda;
///< regularization parameter in the loss function
double *V;
///< augmented weight matrix
double *Vbar;
///< augmented weight matrix from the previous iteration of the IM
///< algorithm
double *U;
///< simplex matrix
double *UU;
///< simplex difference matrix
double *Q;
///< error matrix
double *H;
///< Huber weighted error matrix
double *rho;
///< vector of instance weights
double training_error;
///< loss function value after training has finished
char *data_file;
///< filename of the data
KernelType kerneltype;
///< type of kernel used in the model
double *kernelparam;
///< array of kernel parameters, size depends on kernel type
};
/**
* @brief A structure to hold the GenSVM workspace
*
*/
struct GenWork {
long n;
///< number of instances for the workspace
long m;
///< number of features for the workspace
long K;
///< number of classes for the workspace
double *LZ;
///< n x (m+1) working matrix for the Z'*A*Z calculation
double *ZB;
///< (m+1) x (K-1) working matrix for the Z'*B calculation
double *ZBc;
///< (K-1) x (m+1) working matrix for the Z'*B calculation
double *ZAZ;
///< (m+1) x (m+1) working matrix for the Z'*A*Z calculation
double *ZV;
///< n x (K-1) working matrix for the Z * V calculation
double *beta;
///< K-1 working vector for a row of the B matrix
};
// function declarations
struct GenModel *gensvm_init_model();
void gensvm_allocate_model(struct GenModel *model);
void gensvm_reallocate_model(struct GenModel *model, long n, long m);
void gensvm_free_model(struct GenModel *model);
struct GenData *gensvm_init_data();
void gensvm_free_data(struct GenData *data);
struct GenWork *gensvm_init_work(struct GenModel *model);
void gensvm_free_work(struct GenWork *work);
void gensvm_reset_work(struct GenWork *work);
#endif
|