2016-11-01 7 views
0

두 개의 서로 다른 데이터 프레임 df1 및 df2의 회사 이름을 일치 시키려고합니다. 나는 df1의 company1과 df2의 company2에서 tf-idf와 cosine 유사성을 구현하려고합니다.tf-idf에서 호환되지 않는 행렬 모양 처리

tfidf_matrix1.shape 

출력으로 나에게 (78684, 46844)를 제공합니다 때문에

ValueError: Incompatible dimension for X and Y matrices: X.shape[1] 
== 31089 while Y.shape[1] == 46844 

이것은 아마도 :

from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.metrics.pairwise import cosine_similarity 
v = TfidfVectorizer() 
tfidf_matrix1 = v.fit_transform(df1['company1']) 
tfidf_matrix2 = v.fit_transform(df2['company2']) 
cosine_similarity(tfidf_matrix2, tfidf_matrix1) 

이 나에게 오류를 제공합니다. 및 -

tiff_matrix2.shape 

은 출력으로 me (39462, 31089)를 제공합니다. 이 오류를 어떻게 수정합니까?

+0

정말 오류입니까? 행렬이 같은 모양을 가지기를 기대합니까? 그들이 같은 모양을 가지지 않는다면 문제를 어떻게 "고치고"싶습니까? – ASGM

+0

tf-idf를 처음 사용했습니다. 나는 각 회사 이름 사이에 코사인 유사성을 찾고 일치하는 회사를 찾을 수 있기를 원합니다. 나의 주요 목표는 일치하는 회사를 찾는 것입니다. 나는이 오류 때문에 더 진행할 방법을 모른다. – ComplexData

답변

0

문제는 두 데이터 집합 모두에서 fit_transform을 수행하고 있기 때문입니다. 피팅의 첫 번째 단계는 문서에서 사용하는 어휘를 배우는 것입니다 (hashingTF 무시). 따라서 행렬 1은 31089 개의 고유 용어를 가지며 2는 46844입니다.

코사인 유사성은 두 행렬을 곱하여 유사성을 만듭니다 따라서 각 열은 다른 용어와 일치합니다. 그러나 두 번 적합하기 때문에 두 가지 다른 어휘를 사용하고 있습니다. 한 번 맞춰서 두 번 변형해야합니다.