2017-11-23 14 views
0

으로 내 dataframe 아래에 보여 큰 데이터 프레임에 열의 모든 쌍 계산 코사인 유사성 내가 모든 사용자에 대해 사용자가 사용자 코사인 유사성 행렬을 계산하고자하고

enter image description here 다음 열을 포함합니다.

총 사용자 : 75,541 따라서 총 사용자 쌍 : 2853183570가

나는 .apply() 메소드에 그것을 할 수 있지만 시간이 많이 걸릴 것입니다. 더 빠른 방법으로이를 수행 할 수있는 기술이 있습니까?

답변

0

내가 방금 발견 한 this answer을 살펴보십시오.

희박한 행렬을 압축하는 데 scipy.sparse.csr_matrix을 사용합니다.

그런 다음 sklearn.metrics.pairwise.cosine_similarity을 사용하여 cosine_similarity를 ​​계산하십시오.

또는 아래 함수를 사용하여 계산할 수 있습니다.

def cosine_similarity(matrix): 
    norm = pd.DataFrame(np.sqrt(np.square(matrix).sum(axis = 1))) 
    denominator = norm.dot(norm.T) 
    numerator = matrix.dot(matrix.T) 
    similarity_matrix = numerator.divide(denominator,axis =0) 
    return similarity_matrix 

이 기능을 더 apply 모든 행렬 연산 없다.