#include "generic.h"
Go to the source code of this file.
Data Structures | |
| struct | _VlIKMFilt |
| Integer K-Means filter. More... | |
Typedefs | |
| typedef vl_int32 | vl_ikm_acc |
| typedef vl_uint8 | vl_ikm_data |
Enumerations | |
| enum | VlIKMAlgorithms { VL_IKM_LLOYD, VL_IKM_ELKAN } |
| IKM algorithms. More... | |
Functions | |
Create and destroy | |
| VlIKMFilt * | vl_ikm_new (int method) |
| Create a new IKM quantizer. | |
| void | vl_ikm_delete (VlIKMFilt *f) |
| Delete IKM qunatizer. | |
Process data | |
| void | vl_ikm_init (VlIKMFilt *f, vl_ikm_acc const *centers, int M, int K) |
| Inintialize quantizer with centers. | |
| void | vl_ikm_init_rand (VlIKMFilt *f, int M, int K) |
| Inintialize quantizer with random centers. | |
| void | vl_ikm_init_rand_data (VlIKMFilt *f, vl_ikm_data const *data, int M, int N, int K) |
| Inintialize with centers from random data. | |
| int | vl_ikm_train (VlIKMFilt *f, vl_ikm_data const *data, int N) |
| Train clusters. | |
| void | vl_ikm_push (VlIKMFilt *f, vl_uint *asgn, vl_ikm_data const *data, int N) |
| Project data to clusters. | |
| vl_uint | vl_ikm_push_one (vl_ikm_acc const *centers, vl_ikm_data const *data, int M, int K) |
| Project one datum to clusters. | |
Retrieve data and parameters | |
| VL_INLINE int | vl_ikm_get_ndims (VlIKMFilt const *f) |
| Get data dimensionality. | |
| VL_INLINE int | vl_ikm_get_K (VlIKMFilt const *f) |
| Get the number of centers K. | |
| VL_INLINE int | vl_ikm_get_verbosity (VlIKMFilt const *f) |
| Get verbosity level. | |
| VL_INLINE int | vl_ikm_get_max_niters (VlIKMFilt const *f) |
| Get maximum number of iterations. | |
| VL_INLINE vl_ikm_acc const * | vl_ikm_get_centers (VlIKMFilt const *f) |
| Get maximum number of iterations. | |
Set parameters | |
| VL_INLINE void | vl_ikm_set_verbosity (VlIKMFilt *f, int verb) |
| Set verbosity level. | |
| VL_INLINE void | vl_ikm_set_max_niters (VlIKMFilt *f, int max_niters) |
| Set maximum number of iterations. | |
Use the function vl_ikm_new() to create a IKM quantizer. Initialize the IKM quantizer with K clusters by vl_ikm_init() or similar function. Use vl_ikm_train() to train the quantizer. Use vl_ikm_push() or vl_ikm_push_one() to quantize new data.
Given data
and an a number of clusters
, the goal is to find assigments
and centers
so that the expected distortion
is minimized. Here
is the distortion, i.e. the cost we pay for representing
by
. IKM uses the squared distortion
.
. We include the following options:
K randomly selected data points (vl_ikm_init_rand_data).
This algorithm is not particularly efficient because all data points need to be compared to all centers, for a complexity
, where T is the total number of iterations.
| typedef vl_int32 vl_ikm_acc |
IKM accumulator data type
| typedef vl_uint8 vl_ikm_data |
IKM data type
| enum VlIKMAlgorithms |
| void vl_ikm_delete | ( | VlIKMFilt * | f | ) |
| f | IKM qunatizer. |
| VL_INLINE vl_ikm_acc const * vl_ikm_get_centers | ( | VlIKMFilt const * | f | ) |
| f | IKM filter. |
| VL_INLINE int vl_ikm_get_K | ( | VlIKMFilt const * | f | ) |
| f | IKM filter. |
| VL_INLINE int vl_ikm_get_max_niters | ( | VlIKMFilt const * | f | ) |
| f | IKM filter. |
| VL_INLINE int vl_ikm_get_ndims | ( | VlIKMFilt const * | f | ) |
| f | IKM filter. |
| VL_INLINE int vl_ikm_get_verbosity | ( | VlIKMFilt const * | f | ) |
| f | IKM filter. |
| void vl_ikm_init | ( | VlIKMFilt * | f, | |
| vl_ikm_acc const * | centers, | |||
| int | M, | |||
| int | K | |||
| ) |
| f | IKM quantizer. | |
| centers | centers. | |
| M | data dimensionality. | |
| K | number of clusters. |
| void vl_ikm_init_rand | ( | VlIKMFilt * | f, | |
| int | M, | |||
| int | K | |||
| ) |
| f | IKM quantizer. | |
| M | data dimensionality. | |
| K | number of clusters. |
| void vl_ikm_init_rand_data | ( | VlIKMFilt * | f, | |
| vl_ikm_data const * | data, | |||
| int | M, | |||
| int | N, | |||
| int | K | |||
| ) |
| f | IKM quantizer. | |
| data | data. | |
| M | data dimensionality. | |
| N | number of data. | |
| K | number of clusters. |
| VlIKMFilt* vl_ikm_new | ( | int | method | ) |
| method | Clustering algorithm. |
method has values in the enumerations VlIKMAlgorithms.
| void vl_ikm_push | ( | VlIKMFilt * | f, | |
| vl_uint * | asgn, | |||
| vl_ikm_data const * | data, | |||
| int | N | |||
| ) |
| f | IKM qunatizer. | |
| asgn | Assigments (out). | |
| data | data. | |
| N | number of data (N >= 1). |
| vl_uint vl_ikm_push_one | ( | vl_ikm_acc const * | centers, | |
| vl_ikm_data const * | data, | |||
| int | M, | |||
| int | K | |||
| ) |
| centers | centers. | |
| data | datum to project. | |
| K | number of centers. | |
| M | dimensionality of the datum. |
| VL_INLINE void vl_ikm_set_max_niters | ( | VlIKMFilt * | f, | |
| int | max_niters | |||
| ) |
| f | IKM filter. | |
| max_niters | maximum number of iterations. |
| VL_INLINE void vl_ikm_set_verbosity | ( | VlIKMFilt * | f, | |
| int | verb | |||
| ) |
| f | IKM filter. | |
| verb | verbosity level. |
| int vl_ikm_train | ( | VlIKMFilt * | f, | |
| vl_ikm_data const * | data, | |||
| int | N | |||
| ) |
| f | IKM qunatizer. | |
| data | data. | |
| N | number of data (N >= 1). |
1.5.4