TfidfVectorizer 변환을 수행 한 후 메트릭으로 cosine_distances와 함께 DBSCAN을 사용하여 문자열 묶음을 클러스터하려고합니다. 두 개의 현이 있다고 해봅시다. 그것들 사이의 cosine_distance (sklearn.metrics.pairwise.cosine_distance를 사용하여 계산 됨)는 단지 두 개의 문자열 일 때 더 큰 데이터 세트 (다른 많은 문자열이있는 경우)의 일부일 때의 거리와 다릅니다.두 문자열 사이의 sklearn cosine_distances는 전체 데이터 세트의 크기에 따라 다릅니다.
왜 이런 일이 발생하며 두 문자열 사이의 거리가 일부 데이터 세트의 크기와 관계없이 동일하게 유지되는 것을 어떻게 확인할 수 있습니까?
그런 식으로 내 DBSCAN은 클러스터링을 안정적으로 수행 할 수 있습니다!
편집 : 요청에 따라 추가 예제 코드 :
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_distances
X = [
'this is a string',
'this was a string'
]
Y = [
'this could be a string',
'this may be a string'
]
Z = [
'this is a string',
'this was a string',
'this could be a string',
'this may be a string'
]
for d in [X, Y, Z]:
tv = TfidfVectorizer()
print(cosine_distances(tv.fit_transform(d)))
출력 : 당신이 여기에서 볼 수 있듯이
[[ 0. 0.49689739]
[ 0.49689739 0. ]]
[[ 0. 0.39702518]
[ 0.39702518 0. ]]
[[ 0. 0.64740127 0.70225689 0.70225689]
[ 0.64740127 0. 0.70225689 0.70225689]
[ 0.70225689 0.70225689 0. 0.46163155]
[ 0.70225689 0.70225689 0.46163155 0. ]]
, this is a string
및 this was a string
사이의 거리가 데이터 세트 X
에서 0.497
이지만 0.647
입니다 데이터 세트 Z
. 문자열 this could be a string
및 this may be a string
셋 Y
및 상기 예에서
Z
대한 동일 I는 DBSCAN의 최대 거리 (EPS) 파라미터는 다음 데이터 집합 X에서 0.6로 선택한 경우, 양쪽 캐릭터가 동일한 클러스터에 배치되며, 그러나 데이터 세트 Z에서는 다른 클러스터에 배치됩니다.
목표를 더 명확하게 만들기 위해 예제/코드를 추가하십시오. – sera