2017-03-07 3 views
0

tm 패키지를 사용하여 만든 문서 모음이 있고 동일한 패키지를 사용하여 문서 용어 행렬을 만들었습니다. k-means 클러스터링을 사용하여 문서를 클러스터하고 싶습니다. 유클리드 거리를 사용하기 때문에 먼저 벡터를 정규화하여 유클리드가 의미를 갖도록합니다. 그러나 정규화 할 때 하나의 특정 문서에 대해 'NaN'값이 만들어지며 그 이유를 알 수 없습니다. 코드는 내가 사용 : 나는 m_norm 볼 때R에서 클러스터링을 의미합니다. DTM이 'NaN'을 만듭니다.

m = dtm 
norm_eucl = function(m) m/apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5) 
m_norm = norm_eucl(m) 
cl = kmeans(m_norm, 2) 

, 그것은 (예를 들어) 말한다 : 그래서 3을 기록

Terms  term1   term2 
Docs 
    1  0.2568640  0.8650674 
    2  0.6204346  0.0000000 
    3  NaN    NaN  
    4  0.0000000  0.6543098 

가 'NaN이'값이 있습니다. 내가 K-수단을 사용하려고하면 물론, 다음과 같은 오류가 발생합니다 :

Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1) 

는 'NaN이'값을 처리 할 수 ​​없기 때문에. 그러나, 왜 이러한 'NaN'값이 처음 만들어 졌는지 이해할 수 없습니까?

EDIT : I 위 norm_eucl 함수로부터 apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5) 보면 는, 문헌 3에 대한 값은 0이다. 그래서 그것은 0으로 나누려고 시도하고 있습니다. 물론 불가능합니다. 그러나 이것이 왜 제로인지 그리고 이것을 고치는 법을 아는 사람은 kmeans가 가능한가?

+1

문서 3에 용어가 없으면 그냥 제거하십시오. 왜 용어가 없는지에 관해서는, 우리는 당신이 당신의 코퍼스와 데이터를 어떻게 처리 하는지를 알아야 할 것입니다. 가능한 원인은 다음과 같습니다. 1) 희소성으로 필터링하면 제거되는 스파 스 조건 만 있습니다. 2)에는 불용어, 숫자 및/또는 문장 부호 만 있습니다. 3) 코퍼스를 올바르게 읽지 못하고 비어있게되었습니다. – emilliman5

답변

0

어쩌면 해당 문서가 비어 있습니다.일까요?

그러면 규범이 0이되고 NaN을 얻습니다.

전처리를 확인하십시오.하지만 잘못된 문서를 제거하십시오.

관련 문제