4

Calculo de coeficiente de correlación y ángulo entre dos vectores

A pesar de que en clase se vio cómo se puede calcular estos dos valores (coeficiente de correlación y angulo entre dos vectores), dejo un código bien comentado como en Python se pueden calcular

import numpy as np

"""
El coeficiente de correlación viene dado por:

              (â.T)b̂
            -----------
            ||â||.||b̂||
donde â y b̂ son 
  â = a - mean(a)*1
  b̂ = b - mean(b)*1
Donde â.T es la transpuesta de â
"""defcalculo_coeficiente_correlacion(a,b):"""
  Calcula el coeficiente de correlación dados 
  dos vectores a y b.

  Esta función recibe "a" y "b" como listas
  """#Crea los array a y b a partir de las listas#Esto, con el fin de hacer operaciones entre vectores
  array_a = np.array(a)
  array_b = np.array(b)

  #calcula los promedios de los vectores a y b
  promedio_a = np.mean(a)
  promedio_b = np.mean(b)

  #Calcula las distancias de cada dato puntual respecto a su media
  distancia_a = a-promedio_a*np.array([1]*len(a))
  distancia_b = b-promedio_b*np.array([1]*len(b))

  #Calcula el producto punto entre estas dos distancias#Que viene siendo el numerador de la ecuación de coeficientes de correlacion
  numerador = np.dot(distancia_a,distancia_b)

  #Calcula la norma de â y b̂#Construcción del denominador
  norma_a = np.linalg.norm(distancia_a)
  norma_b = np.linalg.norm(distancia_b)

  denominador = norma_a*norma_b

  #Calculo del coeficiente de correlación
  coef_corr = numerador/denominador

  return coef_corr

"""
El angulo entre dos vectores está dado por la siguiente fórmula:

                              (a)(b)
              Cos (theta) =  ---------
                            ||a||.||b||
"""defangulo(a,b):

  a = np.array(a)
  b = np.array(b)

  #Calcula la norma de a y b

  norma_a = np.linalg.norm(a)
  norma_b = np.linalg.norm(b)

  resultado = np.dot(a,b) / (norma_a*norma_b)

  #despejando theta:
  angulo = np.rad2deg(np.arccos(resultado))
  return angulo




if __name__ == '__main__':
  a = [ 1, 2, 3, 4, 5]

  b = [-6, -7, -8, -9, -10]

  resultado = calculo_coeficiente_correlacion(a,b)
  print(f'El coeficiente de correlación es: {resultado}')

  c = [1,0]
  d = [-1,0]
  #De antemano sabemos que el ángulo será 180°
  
  angulo = angulo(c,d)
  print(f'EL angulo entre c y d (en grados) es: {angulo}')

Escribe tu comentario
+ 2
0
3303Puntos

Excelente, muchas gracias!!