2015-07-27 2 views
0

On m'a demandé d'effectuer une analyse discriminante linéaire sur un ensemble de données pour un de mes projets. J'utilise ALGLIB (version C++) qui a une fonction fisherlda mais j'ai besoin d'aide pour comprendre comment l'utiliser.Analyse discriminante linéaire utilisant alglib

L'utilisateur répond à un ensemble de 6 questions (les réponses sont un nombre compris entre 1 et 7), ce qui me donne un exemple de jeu de données de par ex. {1,2,3,4,5,6}. J'ai alors 5 classes de 6 valeurs chacune. {0,765, 0,895, 1,345, 2,456, 0,789, 5,668}. La fonction fisher lda prend un tableau de valeurs bidimensionnel et renvoie un autre tableau de valeurs 1d (que je n'ai aucune idée de ce que cela signifie). Si je comprends bien, j'ai besoin de voir à quelle classe répond le mieux les utilisateurs?

Toute aide pour comprendre l'ADL et/ou comment utiliser cette fonction serait grandement appréciée.

EDIT:

est ici la définition de la fonction que je suis en train d'utiliser:

/************************************************************************* 
Multiclass Fisher LDA 

Subroutine finds coefficients of linear combination which optimally separates 
training set on classes. 

INPUT PARAMETERS: 
    XY   - training set, array[0..NPoints-1,0..NVars]. 
        First NVars columns store values of independent 
        variables, next column stores number of class (from 0 
        to NClasses-1) which dataset element belongs to. Fractional 
        values are rounded to nearest integer. 
    NPoints  - training set size, NPoints>=0 
    NVars  - number of independent variables, NVars>=1 
    NClasses - number of classes, NClasses>=2 


OUTPUT PARAMETERS: 
    Info  - return code: 
        * -4, if internal EVD subroutine hasn't converged 
        * -2, if there is a point with class number 
          outside of [0..NClasses-1]. 
        * -1, if incorrect parameters was passed (NPoints<0, 
          NVars<1, NClasses<2) 
        * 1, if task has been solved 
        * 2, if there was a multicollinearity in training set, 
          but task has been solved. 
    W   - linear combination coefficients, array[0..NVars-1] 

    -- ALGLIB -- 
    Copyright 31.05.2008 by Bochkanov Sergey 
*************************************************************************/ 
void fisherlda(const real_2d_array &xy, const ae_int_t npoints, const ae_int_t nvars, const ae_int_t nclasses, ae_int_t &info, real_1d_array &w); 

Répondre

2

Vous utilisez la fonction fisherlda qui est une implémentation de l'algorithme LDA.

LDA (Linear Discriminant Analysis) vise à trouver une combinaison linéaire de caractéristiques qui caractérise ou sépare au mieux deux ou plusieurs classes d'objets ou d'événements. Supposons que la ligne y = wx (w, x les deux représentent une matrice ici), de sorte que le résultat donné de fisherlad est un tableau de coefficients de 1d qui est w.Vous pouvez ensuite utiliser cette ligne pour déterminer quelle classe les réponses appartenir.