сравнить данные с идеальными значениями для подсчета очков - PullRequest
0 голосов
/ 19 декабря 2018

Я использую расчетную оценку, основанную на косинусном сходстве массива идеальных значений и массива собранных данных.(код ниже) Однако, когда я запускаю следующий код, результатом будет 99.4, что, на мой взгляд, странно, поскольку значение 150 сильно отличается от идеального значения 300.

import numpy as np

def cos_sim(speechrate, pitch):  #speechrate and pitch are the data collected
    v1 = np.array([300, 25]) #array of ideal values
    v2 = np.array([speechrate, pitch]) #array of data   
    similarity = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2)) 
    print("{:.1f}".format(similarity*100))

    cos_sim(150, 23)

Есть ли у кого-нибудь идеи?Как рассчитать балл по разнице значений?(не обязательно использовать косинусное сходство)

1 Ответ

0 голосов
/ 19 декабря 2018

Ваша формула для similarity вычисляет \cos \theta между векторами (300,25) и (150,23), или другими словами, измеряет косинус угла между ними.Если вы посмотрите на следующий график, между двумя векторами нет большого угла.Фактически, {\cos} ^{-1}(.994) = 6.27 градусов, что мало чем отличается от 0 градусов, где cos имеет наибольшее значение 1.vectors (300,25) and (150,23)

Метрика, которую вы здесь используете, должна зависеть от вашего определения сходства.Тривиальная метрика, которую вы можете использовать, - это евклидово расстояние между двумя точками.

Евклидово расстояние между этими двумя точками равно d = 150.01.Например, между (300, 25) и (280,23) есть d = 20.09, что дает представление о том, насколько они разделены в 2D-плоскости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...