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)
Esempio n. 2
0
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)