Получая разные результаты каждый прогон с GMM Classifier

В настоящее время я занимаюсь проектом по распознаванию речи и машинному обучению. У меня сейчас два класса, и я создаю два классификатора GMM для каждого класса, для ярлыков "счастливый" и "грустный"

Я хочу тренировать классификаторы GMM с векторами MFCC.

Я использую два классификатора 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

1 ответ

Решение

Но каждый раз, когда я запускаю скрипт, у меня появляются разные результаты. Что может быть причиной этого с теми же тестовыми и обучающими образцами?

scikit-learn использует случайный инициализатор. Если вы хотите воспроизводимые результаты, вы можете установить аргумент random_state

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

для имени, данных в training.iteritems():

Это не правильно, так как вы тренируетесь только на последнем примере. Вам нужно объединить объекты для каждой метки в один массив, прежде чем вы запустите fit. Ты можешь использовать np.concatenate для этого.

Другие вопросы по тегам