Нужно ли нормализовать данные перед использованием scipy.spatial.distance.cosine () в python?
Если "нормализация" данных предполагает только умножение входных данных на скаляра то нет, нормализовать не нужно. Проверьте формулу для расстояния в строке документа . Теперь предположим, что a и b являются положительными скалярами. Тогда
cosine(a*u, b*v) = 1 - dot(a*u, b*v)/(norm(a*u)*norm(b*v))
= 1 - a*b*dot(u, v)/(a*b*norm(u)*norm(v))
= 1 - dot(u, v)/(norm(u)*norm(v))
= cosine(u, v)
Таким образом, коэффициент масштабирования, который вы использовали бы для нормализации ввода, будет отменен и не повлияет на результат.
Это можно увидеть на простом примере:
In [17]: from scipy.spatial.distance import cosine
In [18]: u = np.array([1.0, 3.0, 5.0, 10.0])
In [19]: v = np.array([-3.0, 1.0, 0.0, 2.0])
In [20]: cosine(u, v)
Out[20]: 0.5399562937717639
In [21]: cosine(u/10, v)
Out[21]: 0.5399562937717639
In [22]: cosine(3*u, 4*v)
Out[22]: 0.5399562937717639