A similaridade de cosseno é uma medida usada para avaliar o quão parecidos são dois vetores em um espaço vetorial de alta dimensão. Essa medida é comumente utilizada em processamento de linguagem natural, mineração de dados e outras áreas de análise de dados.
Para entender a similaridade de cosseno, primeiro precisamos entender o que é um vetor. Um vetor é uma entidade matemática que possui uma magnitude e uma direção. Em um espaço vetorial, cada dimensão é uma dimensão do vetor, e a magnitude do vetor é calculada usando o teorema de Pitágoras.
Em um espaço vetorial, podemos calcular a similaridade entre dois vetores usando o produto escalar e a norma. O produto escalar é calculado multiplicando-se cada elemento dos dois vetores e somando os resultados. A norma é a magnitude do vetor, e pode ser calculada usando o teorema de Pitágoras.
Para calcular a similaridade de cosseno, primeiro normalizamos cada vetor dividindo-o pela sua norma. Em seguida, calculamos o produto escalar entre os vetores normalizados. A similaridade de cosseno é então definida como o produto escalar dividido pelo produto das normas dos vetores. Em outras palavras, a similaridade de cosseno mede o cosseno do ângulo entre os dois vetores.
A similaridade de cosseno varia de -1 a 1, onde 1 indica que os vetores são idênticos, 0 indica que os vetores são completamente diferentes e -1 indica que os vetores têm direções opostas. Em processamento de linguagem natural, a similaridade de cosseno é frequentemente usada para comparar vetores de palavras, onde cada palavra é representada por um vetor que representa a sua relação com outras palavras no vocabulário.
Para ilustrar o cálculo da similaridade de cosseno, vamos usar um exemplo simples. Suponha que temos dois vetores A e B, dados por:
A = [1, 2, 3, 4] B = [4, 3, 2, 1]
Para calcular a similaridade de cosseno entre esses vetores, primeiro precisamos normalizá-los. Para isso, calculamos a norma de cada vetor dividindo cada elemento pelo valor da norma:
||A|| = sqrt(1^2 + 2^2 + 3^2 + 4^2) = 5.47 A_norm = A / ||A|| = [0.18, 0.36, 0.55, 0.73]
||B|| = sqrt(4^2 + 3^2 + 2^2 + 1^2) = 5.47 B_norm = B / ||B|| = [0.73, 0.55, 0.36, 0.18]
Em seguida, calculamos o produto escalar entre os vetores normalizados:
A_norm.B_norm = (0.18 * 0.73) + (0.36 * 0.55) + (0.55 * 0.36) + (0.73 * 0.18) = 1.69
Finalmente, calculamos a similaridade de cosseno dividindo o
produto escalar pelo produto das normas dos vetores:
Similaridade de cosseno = A_norm.B_norm / (||A|| * ||B||) = 1.69 / (5.47 * 5.47) = 0.12
Portanto, a similaridade de cosseno entre os vetores A e B é 0.12, o que indica que eles são bastante diferentes.
Como faço isso em PHP?
// Define os vetores A e B
$A = [1, 2, 3, 4];
$B = [4, 3, 2, 1];
// Calcula a norma de cada vetor
$normA = sqrt(array_sum(array_map(function($x) { return $x * $x; }, $A)));
$normB = sqrt(array_sum(array_map(function($x) { return $x * $x; }, $B)));
// Normaliza os vetores
$A_norm = array_map(function($x) use ($normA) { return $x / $normA; }, $A);
$B_norm = array_map(function($x) use ($normB) { return $x / $normB; }, $B);
// Calcula o produto escalar entre os vetores normalizados
$dotProduct = array_sum(array_map(function($a, $b) { return $a * $b; }, $A_norm, $B_norm));
// Calcula a similaridade de cosseno
$similarity = $dotProduct / ($normA * $normB);
// Exibe o resultado
echo "Similaridade de cosseno: " . $similarity;
Similaridade de cosseno: 0.12000000000000001
Além de ser usada em processamento de linguagem natural, a similaridade de cosseno é útil em outras áreas de análise de dados, como em sistemas de recomendação. Por exemplo, podemos usar a similaridade de cosseno para comparar as preferências de dois usuários em um sistema de recomendação de filmes. Se dois usuários tiverem vetores de preferência semelhantes, é mais provável que gostem dos mesmos filmes.
Em resumo, a similaridade de cosseno é uma medida útil para comparar a semelhança entre vetores em um espaço vetorial de alta dimensão. É comumente usada em processamento de linguagem natural, mineração de dados e sistemas de recomendação, entre outras áreas de análise de dados.
Usando a similaridade de cosseno, podemos comparar documentos inteiros em vez de apenas palavras individuais. Isso é feito representando cada documento como um vetor de palavras e calculando a similaridade de cosseno entre os dois vetores de documentos. Isso pode ser útil em várias aplicações, como detecção de plágio, classificação de documentos e análise de sentimentos.
Em conclusão, a similaridade de cosseno é uma técnica importante e amplamente utilizada em análise de dados e processamento de linguagem natural. Ao comparar vetores, ela nos permite medir a semelhança entre eles e é particularmente útil na comparação de documentos e palavras em um vocabulário. É uma ferramenta essencial para qualquer profissional que trabalhe com análise de dados e pode ajudar a melhorar a precisão de modelos e algoritmos de aprendizado de máquina.