Similaridade do Cosseno e Correlação de Pearson
Deslize para mostrar o menu
Similaridade do Cosseno
Similaridade do cosseno é uma métrica que quantifica a semelhança entre dois vetores ao medir o cosseno do ângulo entre eles. É definida matematicamente como:
Cosine Similarity = ∑i=1nAi2⋅∑i=1nBi2∑i=1nAiBi
onde A e B são vetores de usuários ou itens. Geometricamente, a similaridade do cosseno captura o quão alinhados estão dois vetores, independentemente de sua magnitude. Um valor de 1 significa que os vetores apontam na mesma direção (similaridade máxima), 0 significa que são ortogonais (sem similaridade) e -1 significa que apontam em direções opostas. Em sistemas de correspondência comportamental, a similaridade do cosseno é útil quando o interesse está no padrão de preferências e não em seus valores absolutos, como ao comparar usuários que avaliam itens em escalas diferentes.
Correlação de Pearson
A correlação de Pearson mede a relação linear entre dois vetores, levando em consideração tanto a direção quanto a média dos dados. A fórmula é:
Pearson Correlation=∑i=1n(Ai−Aˉ)2⋅∑i=1n(Bi−Bˉ)2∑i=1n(Ai−Aˉ)(Bi−Bˉ)
onde Aˉ e Bˉ são as médias dos vetores A e B. A correlação de Pearson varia de -1 (relação linear negativa perfeita) a 1 (relação linear positiva perfeita), com 0 indicando ausência de relação linear. Essa métrica é especialmente útil quando se deseja comparar usuários ou itens após remover vieses individuais, como quando um usuário tende a avaliar tudo mais alto ou mais baixo que outro.
Comparação
- Foca na orientação dos vetores e ignora sua média e magnitude;
- É uma boa escolha para dados esparsos, onde muitas avaliações estão ausentes ou são zero, mas pode superestimar a similaridade quando usuários possuem escalas de avaliação sistematicamente diferentes.
- Remove a avaliação média de cada vetor, tornando-o robusto a diferenças de escala ou preferência de base;
- É melhor quando se deseja controlar o viés de usuário ou item, mas pode não capturar relações não lineares.
Exemplo: Calculando Ambos os Métricos
Suponha que você tenha dois usuários que avaliaram quatro itens. As avaliações deles são:
- Usuário 1:
[4, 0, 3, 5] - Usuário 2:
[5, 1, 2, 4]
É possível calcular tanto a similaridade do cosseno quanto a correlação de Pearson para esses vetores, a fim de comparar a similaridade comportamental deles.
12345678910111213141516171819import numpy as np # User ratings user1 = np.array([4, 0, 3, 5]) user2 = np.array([5, 1, 2, 4]) # Cosine similarity def cosine_similarity(a, b): dot_product = np.dot(a, b) norm_a = np.linalg.norm(a) norm_b = np.linalg.norm(b) return dot_product / (norm_a * norm_b) cos_sim = cosine_similarity(user1, user2) print(f"Cosine Similarity: {cos_sim:.4f}") # Pearson correlation pearson_corr = np.corrcoef(user1, user2)[0, 1] print(f"Pearson Correlation: {pearson_corr:.4f}")
Explicação do Código Passo a Passo
Definição dos Vetores de Avaliação dos Usuários
user1 = np.array([4, 0, 3, 5]);user2 = np.array([5, 1, 2, 4]);
São criados dois arrays NumPy, cada um representando as avaliações de um usuário para quatro itens. Esses arrays são os vetores dos usuários.
Definição da Função de Similaridade do Cosseno
def cosine_similarity(a, b):
dot_product = np.dot(a, b)
norm_a = np.linalg.norm(a)
norm_b = np.linalg.norm(b)
return dot_product / (norm_a * norm_b)
- Cálculo do Produto Escalar:
dot_product = np.dot(a, b);
Multiplica os elementos correspondentes dos dois vetores e soma os resultados. Isso mede o quanto os dois vetores apontam para a mesma direção. - Cálculo das Normas:
norm_a = np.linalg.norm(a);norm_b = np.linalg.norm(b);
Calcula o comprimento (magnitude) de cada vetor de usuário. A norma é a raiz quadrada da soma dos quadrados dos elementos do vetor. - Cálculo da Similaridade:
return dot_product / (norm_a * norm_b);
Divide o produto escalar pelo produto das duas normas. O resultado é o cosseno do ângulo entre os dois vetores, indicando sua similaridade.
Cálculo da Similaridade do Cosseno e Impressão
cos_sim = cosine_similarity(user1, user2);
print(f"Cosine Similarity: {cos_sim:.4f}");
A função é chamada com os vetores dos usuários para calcular a similaridade do cosseno, e o resultado é impresso formatado com quatro casas decimais.
Cálculo da Correlação de Pearson e Impressão
pearson_corr = np.corrcoef(user1, user2)[0, 1];
print(f"Pearson Correlation: {pearson_corr:.4f}");
Utiliza-se np.corrcoef para calcular a matriz de correlação de Pearson para os dois vetores de usuários. O valor na posição [0, 1] fornece a correlação entre user1 e user2. A impressão desse valor mostra o quão fortemente os padrões de avaliação dos usuários estão linearmente relacionados após remover o viés da média das avaliações.
1. Qual é a principal diferença entre similaridade do cosseno e correlação de Pearson ao comparar vetores de usuários?
2. Qual métrica deve ser escolhida se você deseja comparar usuários que avaliam itens em escalas muito diferentes (por exemplo, um usuário sempre dá notas altas e outro dá notas baixas)?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo