diff --git a/machine_learning/adaline_learning.c b/machine_learning/adaline_learning.c
index 1054b142..f8181aa5 100644
--- a/machine_learning/adaline_learning.c
+++ b/machine_learning/adaline_learning.c
@@ -2,9 +2,7 @@
* \file
* \brief [Adaptive Linear Neuron
* (ADALINE)](https://en.wikipedia.org/wiki/ADALINE) implementation
- *
- * \author [Krishna Vedala](https://github.com/kvedala)
- *
+ * \details
*
@@ -20,6 +18,7 @@
* computed. Computing the \f$w_j\f$ is a supervised learning algorithm wherein
* a set of features and their corresponding outputs are given and weights are
* computed using stochastic gradient descent method.
+ * \author [Krishna Vedala](https://github.com/kvedala)
*/
#include
diff --git a/machine_learning/kohonen_som_topology.c b/machine_learning/kohonen_som_topology.c
index 9ae8df47..2dcc10ac 100644
--- a/machine_learning/kohonen_som_topology.c
+++ b/machine_learning/kohonen_som_topology.c
@@ -1,6 +1,5 @@
/**
* \file
- * \author [Krishna Vedala](https://github.com/kvedala)
* \brief [Kohonen self organizing
* map](https://en.wikipedia.org/wiki/Self-organizing_map) (topological map)
*
@@ -13,6 +12,7 @@
*
+ * \author [Krishna Vedala](https://github.com/kvedala)
* \warning MSVC 2019 compiler generates code that does not execute as expected.
* However, MinGW, Clang for GCC and Clang for MSVC compilers on windows perform
* as expected. Any insights and suggestions should be directed to the author.
diff --git a/machine_learning/kohonen_som_trace.c b/machine_learning/kohonen_som_trace.c
index 68c3bb18..c893bd02 100644
--- a/machine_learning/kohonen_som_trace.c
+++ b/machine_learning/kohonen_som_trace.c
@@ -3,13 +3,12 @@
* \brief [Kohonen self organizing
* map](https://en.wikipedia.org/wiki/Self-organizing_map) (data tracing)
*
- * \author [Krishna Vedala](https://github.com/kvedala)
- *
* \details
* This example implements a powerful self organizing map algorithm.
* The algorithm creates a connected network of weights that closely
* follows the given data points. This this creates a chain of nodes that
* resembles the given input shape.
+ * \author [Krishna Vedala](https://github.com/kvedala)
* \see kohonen_som_topology.c
*/
#define _USE_MATH_DEFINES /**< required for MS Visual C */
@@ -21,6 +20,13 @@
#include
#endif
+/**
+ * @addtogroup machine_learning Machine learning algorithms
+ * @{
+ * @addtogroup kohonen_1d Kohonen SOM trace/chain algorithm
+ * @{
+ */
+
#ifndef max
/** shorthand for maximum value */
#define max(a, b) (((a) > (b)) ? (a) : (b))
@@ -95,7 +101,7 @@ int save_nd_data(const char *fname, double **X, int num_points,
* \param[out] val minimum value found
* \param[out] idx index where minimum value was found
*/
-void get_min_1d(double const *X, int N, double *val, int *idx)
+void kohonen_get_min_1d(double const *X, int N, double *val, int *idx)
{
val[0] = INFINITY; // initial min value
@@ -120,8 +126,8 @@ void get_min_1d(double const *X, int N, double *val, int *idx)
* \param[in] alpha learning rate \f$0<\alpha\le1\f$
* \param[in] R neighborhood range
*/
-void update_weights(double const *x, double *const *W, double *D, int num_out,
- int num_features, double alpha, int R)
+void kohonen_update_weights(double const *x, double *const *W, double *D,
+ int num_out, int num_features, double alpha, int R)
{
int j, k;
@@ -138,11 +144,11 @@ void update_weights(double const *x, double *const *W, double *D, int num_out,
D[j] += (W[j][k] - x[k]) * (W[j][k] - x[k]);
}
- // step 2: get closest node i.e., node with snallest Euclidian distance to
+ // step 2: get closest node i.e., node with smallest Euclidian distance to
// the current pattern
int d_min_idx;
double d_min;
- get_min_1d(D, num_out, &d_min, &d_min_idx);
+ kohonen_get_min_1d(D, num_out, &d_min, &d_min_idx);
// step 3a: get the neighborhood range
int from_node = max(0, d_min_idx - R);
@@ -177,7 +183,7 @@ void kohonen_som_tracer(double **X, double *const *W, int num_samples,
double alpha = 1.f;
double *D = (double *)malloc(num_out * sizeof(double));
- // Loop alpha from 1 to slpha_min
+ // Loop alpha from 1 to alpha_min
for (; alpha > alpha_min; alpha -= 0.01, iter++)
{
// Loop for each sample pattern in the data set
@@ -185,7 +191,7 @@ void kohonen_som_tracer(double **X, double *const *W, int num_samples,
{
const double *x = X[sample];
// update weights for the current input pattern sample
- update_weights(x, W, D, num_out, num_features, alpha, R);
+ kohonen_update_weights(x, W, D, num_out, num_features, alpha, R);
}
// every 10th iteration, reduce the neighborhood range
@@ -196,6 +202,11 @@ void kohonen_som_tracer(double **X, double *const *W, int num_samples,
free(D);
}
+/**
+ * @}
+ * @}
+ */
+
/** Creates a random set of points distributed *near* the circumference
* of a circle and trains an SOM that finds that circular pattern. The
* generating function is