Source code for lda.h

/* Implements Linear Discriminant Analysis (LDA).
 * Copyright (C) 2016-2026 designed, written and maintained by Giuseppe Marco Randazzo <gmrandazzo@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program. If not, see <https://www.gnu.org/licenses/>.
 */

#ifndef LDA_H
#define LDA_H
#include <stdio.h> #include "matrix.h" #include "vector.h" #include "tensor.h" #include "scientificinfo.h"
[docs]typedef struct{
matrix *inv_cov;
tensor *features;
tensor *mnpdf;
matrix *evect;
matrix *mu;
matrix *fmean;
matrix *fsdev;
matrix *yscrambling;
matrix *recalculated_y;
matrix *recalculated_residuals;
matrix *predicted_y;
matrix *predicted_residuals;
dvector *eval;
dvector *pprob;
uivector *classid;
size_t nclass;
size_t class_start;
tensor *roc;
tensor *pr;
dvector *roc_aucs;
dvector *pr_aucs;
} LDAMODEL;
[docs]/** * Initialize and LDAMODEL */ void NewLDAModel(LDAMODEL **m);
[docs]/** * Delete and LDAMODEL */ void DelLDAModel(LDAMODEL **m);
[docs]/** * @brief Print LDAMODEL to video. * * @param [in] m computed lda model * * @par Returns * Nothing. */ void PrintLDAModel(LDAMODEL *m);
[docs]/** * Calculate and LDA Fisher discriminant analyisis model * * @param [in] mx input matrix of independent variables * @param [in] my input matrix of classes * @param [out] lda initialized model using NewLDAModel(...). The datastructure will be populated with results */ void LDA(matrix *mx, matrix *my, LDAMODEL *lda);
[docs]/** Predict classes using an LDA fisher discriminant analysis model * * @param [in] mx input matrix of independent variables * @param [in] lda computed LDAMODEL * @param [out] pfeatures predicted features * @param [out] probabilities * @param [out] multivariate normal probability distribution of features * @param [out] predicted classes * */ void LDAPrediction(matrix *mx, LDAMODEL *lda, matrix *pfeatures, matrix *probability, matrix *mnpdf, matrix *prediction);
[docs]/** * Binary statistics */ void LDAStatistics(dvector *y_true, dvector *y_pred, matrix *roc, double *roc_auc, matrix *precision_recal, double *pr_auc);
[docs]/** * Multiclass statistics */ void LDAMulticlassStatistics(matrix *y_true, matrix *y_pred, tensor *roc, dvector *roc_aucs, tensor *precision_recals, dvector *pr_aucs);
int getNClasses(matrix *my);
#endif