def createPrediction(trainedGMM, jsonFile, silenceClassNum): """ Create prediction with a 2s majority vote. Like in the Android app, 2s windows where all amplitude values are below the threshold will be ignored, and no prediction will be made. @param trainedGMM: already trained GMM @param jsonFile: path the json file that contains the features and amplitude values. This file has to have the features under the key "features" and the amplitude values under the key "amps" @param silenceClassNum: The class number to which silent sequences will be assigned """ n_classes = len(trainedGMM['clfs']) jsonData = json.load(open(jsonFile, "rb")) featureData = np.array(jsonData["features"]) amps = np.array(jsonData["amps"]) X_test = trainedGMM['scaler'].transform(featureData) logLikelihood = np.zeros((n_classes, X_test.shape[0])) """ Compute log-probability for each class for all points: """ for i in range(n_classes): logLikelihood[i] = logProb(X_test, trainedGMM['clfs'][i].weights_, trainedGMM['clfs'][i].means_, trainedGMM['clfs'][i].covars_) """ Select the class with the highest log-probability: """ y_pred = np.argmax(logLikelihood, 0) return majorityVoteSilence(y_pred, amps, silenceClassNum)
def makePrediction(trainedGMM, evalFeatures, evalAmps, silenceClassNum): """ @param trainedGMM: @param evalFeatures: not scaled!! @param evalAmps: Amplitude values @param silenceClassNum: @return: """ n_classes = len(trainedGMM['clfs']) X_test = trainedGMM['scaler'].transform(evalFeatures) logLikelihood = np.zeros((n_classes, X_test.shape[0])) user_component_matrix = np.empty((n_classes, X_test.shape[0]), dtype=np.bool_) """ Compute log-probability for each class for all points: """ for i in range(n_classes): logLikelihood[i], tmp_comp_matrix = logProb(X_test, trainedGMM['clfs'][i].weights_, trainedGMM['clfs'][i].means_, trainedGMM['clfs'][i].covars_, return_component_matrix=True) user_component_matrix[i] = tmp_comp_matrix """ Select the class with the highest log-probability: """ y_pred = np.argmax(logLikelihood, 0) # Number of predictions where most likely component from user-centric model: n_user_component = 0 for i in range(X_test.shape[0]): if user_component_matrix[y_pred[i],i] == True: n_user_component += 1 percent_user_component = round(100 * (n_user_component / float(X_test.shape[0])), 2) print(str(percent_user_component) + "% of all predictions had component from user" + " as most likely component") return majorityVoteSilence(y_pred, evalAmps, silenceClassNum), percent_user_component
def makePrediction(trainedGMM, evalFeatures, evalAmps, silenceClassNum): """ @param trainedGMM: @param evalFeatures: not scaled!! @param evalAmps: Amplitude values @param silenceClassNum: @return: """ n_classes = len(trainedGMM['clfs']) X_test = trainedGMM['scaler'].transform(evalFeatures) logLikelihood = np.zeros((n_classes, X_test.shape[0])) """ Compute log-probability for each class for all points: """ for i in range(n_classes): logLikelihood[i] = logProb(X_test, trainedGMM['clfs'][i].weights_, trainedGMM['clfs'][i].means_, trainedGMM['clfs'][i].covars_) """ Select the class with the highest log-probability: """ y_pred = np.argmax(logLikelihood, 0) return majorityVoteSilence(y_pred, evalAmps, silenceClassNum)