C++ 基于alglib的线性判别分析

C++ 基于alglib的线性判别分析,c++,alglib,C++,Alglib,我被要求对我的一个项目的一组数据进行线性判别分析。我正在使用ALGLIB(C++版本),它有一个fisherlda函数,但是我需要一些帮助来理解如何使用它 用户回答了一组6个问题(答案是1-7之间的数字),这给了我一个示例数据集,例如{1,2,3,4,5,6}。然后我有5个类,每个类有6个值,例如{0.765,0.895,1.345,2.456,0.789,5.678}。 fisher lda函数接受一个二维值数组并返回另一个一维值数组(我不知道它们的意思) 据我所知,我需要看看用户最适合哪一类

我被要求对我的一个项目的一组数据进行线性判别分析。我正在使用ALGLIB(C++版本),它有一个fisherlda函数,但是我需要一些帮助来理解如何使用它

用户回答了一组6个问题(答案是1-7之间的数字),这给了我一个示例数据集,例如{1,2,3,4,5,6}。然后我有5个类,每个类有6个值,例如{0.765,0.895,1.345,2.456,0.789,5.678}。 fisher lda函数接受一个二维值数组并返回另一个一维值数组(我不知道它们的意思)

据我所知,我需要看看用户最适合哪一类

如能帮助我理解LDA和/或如何使用此功能,将不胜感激

编辑:

下面是我尝试使用的函数的定义:

/*************************************************************************
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);
/*************************************************************************
多类Fisher-LDA
子例程查找线性组合的系数,这些系数以最佳方式分离
在课堂上进行训练。
输入参数:
XY-训练集,数组[0..NPoints-1,0..nVAR]。
第一个NVars列存储独立变量的值
变量,下一列存储类的数量(从0开始
到NClasses-1),数据集元素属于哪个。分数的
值四舍五入为最接近的整数。
NPoints-训练集大小,NPoints>=0
NVars-自变量数,NVars>=1
NClasses-类数,NClasses>=2
输出参数:
信息-返回代码:
*-4,如果内部EVD子例程未收敛
*-2,如果存在具有类编号的点
在[0..n类别-1]之外。

*-1,如果传递了不正确的参数(NPoints您使用的是fisherlda函数,它是LDA算法的实现

线性判别分析(LDA)的目的是找到一个线性组合的特征,最好的特征或分离两个或更多类的对象或事件

假设y=wx(w,x在这里都代表一个矩阵),那么fisherlad的给定结果是一个1d系数数组,它是w。然后你可以使用这条线来确定答案属于哪一类