sklearn的高斯混合模型分类器的不稳定精度

问题描述 投票:-1回答:1

我正在与sklearn的GaussianMixture分类器进行斗争。我有来自两个不同说话者的一些数据(用于说话者识别的MFCC功能)。每个人有60个具有13个特征的向量(总共120个)。它们每个都有自己的标签(0和1)。我需要在混淆矩阵上显示结果。唯一的问题是sklearn的GaussianMixture模型是不稳定的。对于每个程序运行,我得到不同的分数(有时精度为0.4,有时为0.7 ...)。我不知道我在做什么错,因为以此类推,我创建了SVM和k-NN模型,并且它们运行良好(精度稳定在0.9左右)。你知道我在做什么错吗?

gmmclf = GaussianMixture(n_components=2, covariance_type='diag')
gmmclf.fit(X_train, y_train) #X_train are mfcc vectors, y_train are labels

ygmm_pred_class = gmmclf.predict(X_test)
print(accuracy_score(y_test, ygmm_pred_class))
print(confusion_matrix(y_test, ygmm_pred_class))
python machine-learning scikit-learn gmm
1个回答
0
投票

简短的回答:您应该简单地[[not使用GMM进行分类。


长答案...

从答案到相关主题,Multiclass classification using Gaussian Mixture Models with scikit learn(原文为重点):

高斯混合物

不是

分类器。这是密度估算方法,并期望其组成部分能够神奇地与你的课不是一个好主意。 [...] GMM只是试图拟合高斯混合体到您的数据中,但是没有任何强制性根据标签(甚至没有在标签中提供)呼叫)。有时会起作用-但仅适用于平凡的问题,班级之间的间隔是如此之大,以至于朴素贝叶斯通常可以使用,但是对于问题。以及答辩人本人的评论(再次强调原文):

如答案中所述-GMM

不是

分类器,请问您是否正确使用“ GMM分类器”是无法回答的。使用GMM作为分类器在定义上是不正确的,没有“有效”在不是这个模型的问题中使用它的方式设计要做。您可以做的是建立一个适当的生成器每个班级的模型。换句话说,构造您自己的分类器您适合一个GMM 每个标签,然后使用分配的概率执行实际分类。然后,这是一个适当的分类器。看到github.com/scikit-learn/scikit-learn/pull/2468((可能有价值的是,您可能会注意到respondent是DeepMind的研究科学家,并且在这里是第一个被授予machine-learning gold badge的人)

进一步详细说明(这就是为什么我没有简单地将问题标记为重复):

确实,在scikit-learn文档中有一个标题为GMM classification的帖子:

用于分类的高斯混合模型的演示。

我想这早在2017年就已不存在,当时写了上述答复。但是,深入研究提供的代码,您将意识到GMM模型实际上是按照上面lejlot提出的方式在那里使用的;有[[0]]形式的

no

语句-all的用法是classifier.fit(X_train, y_train)形式,即不使用实际标签。这正是我们希望从类似

clustering

的算法(实际上就是GMM所期望的),而不是分类器所期望的。再次,scikit-learn提供了一个选项,用于在classifier.fit(X_train)中也提供标签:

GMM fit method

((X,y = None)您实际上已在此处使用(同样,如上述响应所暗示的那样,可能早在2017年就不存在),但是,鉴于我们对GMM及其用法的了解,目前尚不清楚此参数的用途(并且,我可以说,scikit-learn在一些实践上占有一定的份额,这些实践从纯粹的[[programming角度来看似乎是明智的,但从

modeling角度来看却毫无意义)。

最后一句话:尽管将随机种子(如评论中所建议的)固定为“ [工作]”,但信任一个“分类器”,其准确度取决于随机种子在0.4到0.7之间是可以说是[[not一个好主意...
© www.soinside.com 2019 - 2024. All rights reserved.