【问题标题】:Multivariate gaussian classifier implementation. Trouble understanding, going from Naive Gaussian多元高斯分类器实现。麻烦理解,从朴素的高斯开始
【发布时间】:2013-05-16 18:40:44
【问题描述】:

感谢您查看此问题。 我试图了解如何使用多元高斯分类器。

为了更好地向您介绍我的问题,我将展示我目前如何对数据进行分类。

我有一个包含这些对象的库:

public class AccFeat {
    int id;

    Double[] mean = new Double[3];
    Double[] sd = new Double[3];
    Double[] avPeakDistance = new Double[3];
    int[][] histogram = new int[3][10];
    int[][] fftHistogram = new int[3][10];
    int[] crossingCount = new int[3];
    double resultantAcc;
    int type;

然后我得到一个带有 type 字段的对象,表明它未被识别。

程序:

  1. 为每个类加载一个包含 30 个训练样本的库。

  2. 计算每个样本类的每个特征的均值和方差,将这些值存储在数组中,每个类一个包含 73 个均值/方差对的数组。 (因为总共有 73 个特征,包括 6 个直方图,每个 10 个 bin(60 个数字))

  3. 创建一个包含 73 个值的数组,这些值对应于要识别的 AccFeat 对象的特征。

  4. 使用我理解的朴素贝叶斯分类器计算概率。

我们检查 i 从 0 到 8,因为有 9 个样本类。

    for (int i = 0; i < 9; i++) {
            result = 1;
            for (int j = 0; j < SAMPLEFEATURES.get(i).size(); j++) {
                result = result * p(QUERYFEATURES.get(j), SAMPLEFEATURES.get(i).get(j)); 
//this is the p function, first argument is value of feature, 
//second argument is mean-variance pair for this feature in this particular i class.

            }
            results[i] = result;
        }
    }

p(x) 函数就是这样的:

  1. http://i.stack.imgur.com/1iws5.jpg

然后我有 9 个概率值,对于每个类,我的分类器会说它是对应于最高概率值的类。


现在我想创建一个多元高斯分类器。

这是在这种情况下用于计算概率的公式:

  1. http://i.stack.imgur.com/JNiwT.jpg

  2. 因此,我为 9 个类中的每一个创建了一个方差-协方差矩阵。这里我不确定我是否做得对,我采用了所有 73 个特征,其中又包含 6 个直方图,每个直方图 10 个,因此其中 60 个特征是加速度频率和加速度值的直方图

我觉得这有点狡猾,我应该将所有这些值放在一个矩阵中吗?计算 x 轴上 10-20 范围内的加速度频率与 y 加速度的峰值距离之间的协方差似乎有点……奇怪。

但我这样做了,并为每个单元格使用此公式为每个类创建一个 73x73 矩阵:

Cov(特征 a, 特征 b) = sum ( ( featureA[i] - mean_featureA ) * ( featureB[i] - mean_featureB ) ) / n-1

  1. 接下来我需要一个均值向量,因此我为与每个类关联的每组样本创建了一个包含每个特征均值的 73 元素向量,总共 9 个向量。

    李>
  2. 据我了解,在我的程序中,公式中的 x 是未识别 AccFeat 对象的特征值的 73 元素向量。

  3. 所以我实现了这个公式,思考:我必须使用协方差矩阵和每个类的均值来运行它,结果最高的最有可能是识别的候选者

问题:

  • 协方差矩阵充满了负值,其中只有大约 5% 是正值,而当它们是正值时,它们通常非常大。

  • 此矩阵的行列式在某些情况下非常接近 0 或负数,这会破坏公式。

我使用分类器的方式有什么问题?不幸的是我没有人可以帮助我 有了这个,我所有的薄弱理解都基于在线讲座幻灯片....

谁能帮助我如何使用它?

【问题讨论】:

    标签: java machine-learning classification gaussian


    【解决方案1】:

    我尚未彻底检查您所做的是否有效,但我可以帮助您解决您遇到的错误。您没有足够的数据点来估计协方差矩阵,因此最大似然估计是奇异的。

    一种选择是移动到Linear Discriminant Analysis 的变体,您可以在其中使用所有类的池化协方差矩阵。如果您在所有类中汇集了足够的数据,这可能会为您提供一个非奇异的协方差矩阵。另一种选择是朴素贝叶斯,这就是你所拥有的,你有一个对角协方差矩阵。

    否则,您是否有任何理由希望使用 MVN 分类器?您可以只使用其他东西,例如带有旨在比较直方图的内核的 SVM。

    【讨论】:

    • 我已经和我的主管讨论过这个问题,是的,他提出了和你一样的建议。我试图实现 MVN,因为这是他的建议,我也会看看 SVN。我完全没有机器学习背景,只有高中统计,所以这对我来说很有挑战性。
    猜你喜欢
    • 2012-04-09
    • 2015-08-27
    • 2018-05-09
    • 2015-09-16
    • 2018-03-12
    • 2017-06-21
    • 2018-06-11
    • 2021-11-12
    • 2019-09-14
    相关资源
    最近更新 更多