# load audio models # fit audio ensemble trainy_audio = pd.Series(trainy_audio).factorize(sort=True)[0] audio_logistic = fit_logistic(all_models, trainX_audio, trainy_audio) # # evaluate standalone models on test dataset from tensorflow.keras.utils import to_categorical from sklearn.metrics import accuracy_score, confusion_matrix stackedX_train = stacked_dataset(all_models, trainX_audio) trainy_audio_pred = audio_logistic.predict(stackedX_train) print('Stacked Model Accuracy (train): ', accuracy_score(trainy_audio, trainy_audio_pred)) ############# testy_audio = pd.Series(testy_audio).factorize(sort=True)[0] stackedX_test = stacked_dataset(all_models, testX_audio) testy_audio_pred = audio_logistic.predict(stackedX_test) print('Stacked Model Accuracy (test): ', accuracy_score(testy_audio, testy_audio_pred)) # stacking: regression + 4 emotions (treat audio models as one) from sklearn.linear_model import LogisticRegression
from scipy.special import softmax import numpy as np index_map = {'neg': 0, 'neu': 1, 'pos': 2} rev = { v:k for k,v in index_map.items()} ##### audio # convert audio into feature audio = audio2wave(file) audio_X = prepare_data_librosa(audio, features='logmel', scaled=True) stackedX_test = stacked_dataset(all_models, audio_X) audio_pred = audio_logistic.predict(stackedX_test) print('Audio prediction:', [rev[item] for item in audio_pred]) ##### text text_pred = predict_text(bert_model,text) print('Text prediction:', [rev[item] for item in np.array([np.argmax(text_pred)])]) ##### ensemble ensemble_text_test = softmax(text_pred) ensemble_audio_test = audio_logistic.predict_proba(stackedX_test) stack_test = np.dstack((ensemble_text_test, ensemble_audio_test)) stack_test = stack_test.reshape((stack_test.shape[0], stack_test.shape[1]*stack_test.shape[2])) ensemble_pred = final_logistic.predict(stack_test)