【问题标题】:Having different results every run with GMM Classifier使用 GMM 分类器每次运行都有不同的结果
【发布时间】:2016-10-28 04:45:23
【问题描述】:

我目前正在做一个语音识别和机器学习相关的项目。 我现在有两个类,我为每个类创建了两个 GMM 分类器,分别用于标签“快乐”和“悲伤”

我想用 MFCC 向量训练 GMM 分类器。

我为每个标签使用了两个 GMM 分类器。 (以前是每个文件的 GMM):

但每次我运行脚本时,我都会得到不同的结果。 使用相同的测试和训练样本可能是什么原因?

请注意,在下面的输出中,我有 10 个测试样本和 每行对应有序测试样本的结果

代码:

classifiers = {'happy':[],'sad':[]}
probability = {'happy':0,'sad':0}

def createGMMClassifiers():
    for name, data in training.iteritems():
        #For every class: In our case it is two, happy and sad
        classifier = mixture.GMM(n_components = n_classes,n_iter=50)
        #two classifiers.
        for mfcc in data:
            classifier.fit(mfcc)
        addClassifier(name, classifier)
    for testData in testing['happy']:
        classify(testData)

def addClassifier(name,classifier):
    classifiers[name]=classifier

def classify(testMFCC):
    for name, classifier in classifiers.iteritems():
        prediction = classifier.predict_proba(testMFCC)
        for f, s in prediction:
            probability[name]+=f
    print 'happy ',probability['happy'],'sad ',probability['sad']

样本输出 1:

happy  154.300420496 sad  152.808941585
happy
happy  321.17737915 sad  318.621788517
happy
happy  465.294473363 sad  461.609246112
happy
happy  647.771003768 sad  640.451097035
happy
happy  792.420461416 sad  778.709674995
happy
happy  976.09526992 sad  961.337361541
happy
happy  1137.83592093 sad  1121.34722203
happy
happy  1297.14692405 sad  1278.51011583
happy
happy  1447.26926553 sad  1425.74595666
happy
happy  1593.00403707 sad  1569.85670672
happy

示例输出 2:

happy  51.699579504 sad  152.808941585
sad
happy  81.8226208497 sad  318.621788517
sad
happy  134.705526637 sad  461.609246112
sad
happy  167.228996232 sad  640.451097035
sad
happy  219.579538584 sad  778.709674995
sad
happy  248.90473008 sad  961.337361541
sad
happy  301.164079068 sad  1121.34722203
sad
happy  334.853075952 sad  1278.51011583
sad
happy  378.730734469 sad  1425.74595666
sad
happy  443.995962929 sad  1569.85670672
sad

【问题讨论】:

    标签: python machine-learning speech-recognition svm mfcc


    【解决方案1】:

    但每次我运行脚本时,我都会得到不同的结果。使用相同的测试和训练样本可能是什么原因?

    scikit-learn 使用随机初始化器。如果想要可重现的结果,可以设置random_state argument

    random_state: RandomState or an int seed (None by default)
    

    对于名称,training.iteritems() 中的数据:

    这是不正确的,因为您仅在最后一个样本上进行训练。在运行 fit 之前,您需要将每个标签的特征连接到一个数组中。你可以使用np.concatenate

    【讨论】:

    • 首先,感谢您的更正和澄清。我大大增加了我的数据量,但是每次运行脚本我得到不同的结果,有时我得到 20% 的准确率有时是 80%,这个问题是由测试数据引起的吗?此外,预测结果返回一个包含 2 个类别的 [x y] 数组,这是否意味着值 X 表示使用该标签训练的 GMM 的概率?我阅读了所有 scikit 文档,但找不到答案。最后,我是否应该选择大多数 GMM 分类结果作为我的最终结果,你有什么建议?
    • 你一次问了太多问题,试着分开问,一个接一个,而不是一起问。尽可能多地提供有关问题的信息。提供完整代码或完整代码的描述,而不是其中的一部分,这样您在做什么就会很清楚。我还看到您正在分别从每个文件中训练 GMM,这很可能不是一个好主意。您需要一次在所有文件上训练 GMM。您需要检查您的算法。
    • 我修改了我的算法并为两个不同的类创建了 GMM,而不是每个 GMM 的文件。正如我所提到的,每次运行脚本时,我都会得到不同的结果。我已经编辑了问题,提供了代码和输出。
    • 我建议您编辑这个问题(包括标题)以清楚地表明您的问题。目前,这简直是一团糟。此外,您发布的代码与您发布的输出不匹配。在代码中打印确定的标签,在输出中仅打印概率。
    • 我仍然在您的问题中看到 3 个问题。一个在标题中,两个在问题正文中。
    猜你喜欢
    • 2011-08-07
    • 2020-04-16
    • 2012-05-02
    • 2016-07-31
    • 2018-12-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2019-04-14
    相关资源
    最近更新 更多