【问题标题】:C# Linear Discriminant Analysis with Alglib使用 Alglib 进行 C# 线性判别分析
【发布时间】:2012-06-16 18:28:35
【问题描述】:

假设我有一个包含 10 个类的数据集。每个类在 3D 中包含 3 个点:

Class 1: (1,2,3),(4,5,6),(7,8,9)
Class 2: (2,3,4),(5,6,7),(8,9,10)
.
.
Class 10: (10,15,20),(10,11,19),(4,8,9)

如何使用 Alglib LDA(或任何其他免费 LDA 库)确定 X 类是否属于上述类之一?

示例代码将不胜感激。

【问题讨论】:

  • 任何显示您迄今为止尝试过的代码也将不胜感激。
  • 甚至无法开始编写它。直到我自己编写了课程并且效果很好,我才理解 PCA。尽管我确实了解 LDA 的基础知识,但我无法弄清楚如何确定一个班级的财产到另一个班级的逻辑。使用 PCA,比较确定的是欧几里得距离的大小。对于 LDA,它与类在具有最高特征值的向量上的投影有关。

标签: c# alglib


【解决方案1】:

经过一段时间我终于弄明白了:

static public double[,] Test()
    {
        // This example is for points in 3D.
        // The forth variable is the class label. In this case 2 classes: 0 and 1.
        double[,] xy = new double[,]
        {
        { 4,2,1, 0 }, { 2,4,2, 0 }, { 2,3,3, 0 }, { 3,6,4, 0 }, { 4,4,5, 0 },
        { 9,10,10, 1 }, { 6,8,11, 1 }, { 9,5,12, 1 }, { 8,7,9, 1 }, { 10,8,10, 1 }
        };

        int NPoints = 10;
        int NVars = 3; // 1 for 1 dimension, 2 for 2D and so on...
        int NClasses = 2;

        int info = 0;
        double[,] w = new double[0, 0];

        alglib.lda.fisherldan(xy, NPoints, NVars, NClasses, ref info, ref w);

        return w; // The projection vector/s.
    }

【讨论】:

  • 嗨。你能解释一下这里发生了什么吗?我正在使用这个库的 C++ 版本来尝试分析一组 6 个对问题的响应(答案在 1 到 7 之间),并将它们与 5 个集合/类进行匹配。我真的被困住了,所以任何帮助都将不胜感激。
  • 嗨@RASS。刚看到你的问题。我希望你现在明白了。如果没有,请不要犹豫再问一次。
  • 嗨@Igor。不幸的是,还没有运气,老实说,我没能花太多时间在上面。我正在做一个项目,用户必须回答 6 个问题,他们为每个问题给出的答案在 1 到 7 之间。然后我有 4 个特征,每个特征都被分配了一个值,并使用用户的答案和一组费希尔 LDA 常数必须根据最适合用户的特性来确定。不知道你能不能说明一下这个问题?非常感谢。
  • 嗨@RASS。首先让我说我没有参加任何 LDA 课程,所以我所知道的一切都是从网上学到的,所以请考虑一下我可能是错的。话虽如此,您的问题似乎相对论很简单。 NClasses = 6(6 个问题)。 NPoints = 6(6 个问题 x 1 个答案 = 6 分)。 NVars = 2(x 是问题。y 是答案 => 2D)。现在,您有 4 个特征。这意味着您需要以某种方式将这些特征转换为 4 个定义的向量,并且每次获得用户的投影向量(w)时 - 检查最接近它的定义特征向量。希望对您有所帮助。
  • @Igor 如何将此代码用于分类器(3,5,2)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2013-06-19
  • 2019-05-21
  • 2013-12-10
  • 2018-07-08
  • 2022-06-22
  • 2012-05-09
相关资源
最近更新 更多