Косинусный коэффициент cosine similarity — мера подобия между двумя массивами данных, вычисляемая как косинус угла между векторами в многомерном пространстве.
Если a или b — нулевой вектор, то положим cos(a, b) = 0.
Требуется написать программу, считывающую значения двух векторов из двух файлов и выводящую на экран значение косинусного коэффициента.
Пример вычисления. Дано
a = { 1, 5, 10, 0, 0, 2, 4 };
b = { 5, 2, 2, 10, 2, 5, 0 };
Тогда cos(a, b) = 0.292603 (угол 73°).
Пример кода: чтение вектора чисел (результат функции) из файла с заданным именем (параметр функции).
#include <vector>
#include <string>
#include <fstream>
std::vector<double> dv_read(const std::string &file_name)
{
std::vector<double> result;
std::ifstream file(file_name);
for (double val; file >> val;)
result.push_back(val);
return result;
}
Рекомендация: написать сначала функцию, принимающую два вектора и возвращающую их скалярное произведение.
Добавить в алгоритм вычисления косинусного коэффициента предварительную обработку данных:
Пример вычисления. Дано
a = { 1, 5, 10, 0, 0, 2, 4 };
b = { 5, 2, 2, 10, 2, 5, 0 };
После центрирования:
a == { -2.14286, 1.85714, 6.85714, -3.14286, -3.14286, -1.14286, 0.857143 };
b == { 1.28571, -1.71429, -1.71429, 6.28571, -1.71429, 1.28571, -3.71429 };
После нормирования:
a == { -0.3125, 0.270833, 1, -0.458333, -0.458333, -0.166667, 0.125 };
b == { 0.204545, -0.272727, -0.272727, 1, -0.272727, 0.204545, -0.590909 };
После центрирования и нормирования cos(a, b) = -0.517737 (угол 121°).
Кувшинов Д.Р. © 2017