2017-03-07 6 views
0

Ich habe ein Korpus von Dokumenten, die ich erstellt mit dem tm Paket und ich habe eine Dokument-Term-Matrix mit dem gleichen Paket. Ich möchte k-Means-Clustering verwenden, um die Dokumente zu clustern. Ich benutze die Euklidische Distanz, also normalisiere ich zuerst die Vektoren, so dass Euklidisch einen Sinn ergibt. Bei der Normalisierung erzeugt es jedoch "NaN" -Werte für ein bestimmtes Dokument, und ich weiß nicht warum. Der Code, den ich verwenden:K-bedeutet Clustering in R: Normalisierung DTM erstellt '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) 

Wenn ich m_norm aussehen, heißt es (zum Beispiel):

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

So 3 Dokument Werte 'NaN'. Natürlich, wenn ich versuche, k-Mittel zu nutzen, wirft es die folgenden Fehler:

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

Weil es keine Werte ‚NaN‘ verarbeiten kann. Allerdings verstehe ich nicht, warum diese "NaN" -Werte überhaupt erst entstehen.

EDIT: Wenn ich apply(m, MARGIN=1, FUN=function(x) sum(x^2)^.5) von der norm_eucl Funktion siehe oben, wird der Wert für die Dokumente 3 Null ist. Es versucht also, durch Null zu teilen, was natürlich unmöglich ist. Aber weiß jemand, warum das Null ist und wie man das beheben kann, so ist es noch möglich?

+1

Wenn Dokument 3 keine Begriffe enthält, dann entfernen Sie es einfach. Warum es keine Begriffe hat, müssen wir sehen, wie Sie Ihren Korpus und die Daten verarbeiten. Mögliche Gründe: 1) hat nur spärliche Begriffe, die entfernt werden, wenn Sie nach Sparsity filtern. 2) hat nur Stoppwörter, Zahlen und/oder Interpunktion. 3) Wurde nicht richtig in den Korpus gelesen und endete leer. – emilliman5

Antwort

0

Vielleicht ist dieses Dokument leer?

Dann wird es Norm 0 haben, und Sie erhalten ein NaN.

Überprüfen Sie Ihre Vorverarbeitung, aber vielleicht entfernen Sie einfach das fehlerhafte Dokument.