私は現在、音声認識と機械学習に関連するプロジェクトを行っています。 私は今、2つのクラスを持っており、それぞれのクラスに対して2つのGMMクラシファイアを作成します。ラベルは「happy」と「sad」GMMクラシファイアで実行するたびに異なる結果が出る
MFCCベクトルでGMM分類子を訓練します。
私はラベルごとに2つのGMM分類子を使用しています。 (これまではファイルごとにGMMが使用されていました)
しかし、私はスクリプトを実行するたびに別の結果が出ています。 同じテストとトレーンのサンプルでは、その原因は何でしょうか?
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
Iは各ラインは、順序付けられたテストサンプル
コードの結果に対応する10個の試験サンプルと を持っていることを注意してください以下の出力で
サンプル出力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
まず、訂正と解説をいただきありがとうございます。 私はデータサイズを大幅に増やしましたが、スクリプトを実行するたびに異なる結果が得られました。時には20%の精度が得られることもありますが、テストデータによるこの問題は80%です。 また、予測結果は2つのクラスを持つ[x y]を持つ配列を返します。つまり、値XはGMMがそのラベルで訓練される確率を表しますか?私はすべてのscikitのドキュメントを読んだが、答えを見つけることができなかった。 最後に、GMM分類結果の大半を最終結果として選択する必要がありますが、何をお勧めしますか? – Ugur
あなたは一度にあまりにも多くの質問をして、一緒にすべてをまとめているわけではなく、ひとつずつ別々に質問してみてください。可能な限り多くの情報を質問に提供する。完全なコードまたはその一部ではなく、完全なコードの説明を提供してください。何をしているのかが明確になります。私はまた、あなたが別々に各ファイルからGMMを訓練しているのを見て、これはよく考えられる良い考えではありません。一度にすべてのファイルに対してGMMをトレーニングする必要があります。アルゴリズムを確認する必要があります。 –
私はアルゴリズムを改訂し、GMMあたりのファイルではなく2つの異なるクラスに対してGMMを作成しました。私が言及したように、私がスクリプトを実行するたびに、私は別の結果を得る。 私は質問とコードと出力を編集しました。 – Ugur