Вычислите косинусное сходство между векторами, отделяющими пары от столбца

#python #pandas

Вопрос:

У меня есть кадр данных, как показано ниже:

 import pandas as pd
import scipy.spatial.distance as ssd
import numpy as np

df = pd.DataFrame({'SJDR': [2,3,7,8,0,0], 'TR': [0,0,0,1,1,3], 'BSO': [1,1,2,0,1,1], 'CLASS': [2,2,1,3,1,3]})
df
 

и я вычисляю сходство между каждой строкой следующим образом:

 1 - ssd.cosine(df.iloc[0].to_numpy(), df.iloc[1].to_numpy())
 

Однако мне нужно выбрать векторы, которые будут рассчитываться, должны быть выбраны в соответствии с CLASS столбцом. Поэтому мне нужно вычислить косинусное сходство векторов одного класса со всеми остальными. Для этого набора данных я должен был бы выполнить следующие вычисления в соответствии со CLASS столбцом:

 Ex.: 
Class 1 Vectors x Class 1 Vectors 
Class 1 Vectors x Class 2 Vectors 
Class 1 Vectors x Class 3 Vectors
Class 2 Vectors x Class 3 Vectors  
 

До сих пор я не могу придумать, как это сделать. Кто-нибудь может помочь?

Комментарии:

1. Каков ваш ожидаемый результат?

2. Вам просто нужна матрица косинусного подобия df? с from sklearn.metrics.pairwise import cosine_similarity помощью вы можете использовать cosine_similarity(df) для всей матрицы.

3. Результатом может быть словарь или фрейм данных, содержащий сходство косинуса между значениями столбцов разных классов.