2017-03-03 5 views
0

Ich benutze einen Entscheidungsbaum für Textdaten und ich habe die n häufigsten Begriffe in einer Variablen gespeichert und ich versuche, diese Variable in der Formel für die rpart Funktion zu verwenden. Allerdings habe ich die Fehlermeldung erhalten, ist die folgende:Rpart in R: Variable in Formel

Error in model.frame.default(formula = class ~ x, data = dtm.df, na.action = function (x): variable lengths differ (found for 'x')

x = findFreqTerms(dtm, 0.5) 
fit = rpart(class ~ x, data = dtm.train 

Ist es möglich, automatisch in der Formel zu füllen, ohne manuell auf jedes Feature geben?

+0

Aus dem Beispielcode Sie es schaffen, ist offensichtlich die Formel, die das Problem hier ist. Wie in der [R-Dokumentation zur Formelklasse] (https://stat.ethz.ch/R-manual/R-devel/library/stats/html/formula.html) angemerkt wird, "besteht ein solches Modell aus einer Reihe (...) Die Begriffe selbst bestehen aus Variablen- und Faktornamen (...). Ein solcher Begriff wird als die Interaktion aller Variablen und Faktoren interpretiert, die in dem Begriff vorkommen. Zunächst werden hier keine Variablen für die Regression verwendet; Zweitens, da 'x' nicht alle Faktoren der Klasse enthält, die darin erscheinen, wirft es einen Fehler auf. –

+0

Wie sollte rpart dann auf Textdaten verwendet werden? Was nach dem "~" kommt, sollten Worte aus der Dokumenten-Term-Matrix sein, nein? – vdvaxel

+0

Können Sie uns ein Muster der Daten liefern, die Sie klassifizieren möchten? Nach dem '~' brauchst du Variablennamen oder ein '.', wie zB' class ~ Variable1 + Variable2 + Variable3' oder wie 'class ~ .'. –

Antwort

0

Technische Basis für die Lösung

Die Idee hinter dem, was Sie erreichen möchten, ist die Formel von den am häufigsten verwendeten Begriffe zu schaffen, die Saiten sind.

Die allgemeine Idee besteht darin, die Formel aus der Variablen zu erstellen, anstatt Eingabetext wie in meinem Kommentar (, d. H. direkt Schreiben class~Variable1 + Variable2 + Variable3) zu verwenden.

This link provide an example on how to use a string to create a formula, und Sie werden auch in der collapse Argument der paste()function in R documentation suchen.

-Code

# First find your most frequent terms 
x <- findFreqTerms(dtm, 0.5) 

# Then prepare the variables for the formula 
sMeasureVar <- "class" 
sGroupVars <- paste(x, collapse = " + ") 

# Create the formula from the variables 
fRpart <- as.formula(paste(sMeasureVar, sGroupVars, sep=" ~ ")) 

# Fit the tree associated 
fit <- rpart(formula = fRpart , data = dtm.train) 
+0

einzugeben. Das funktioniert wie ein Zauber. Es gibt jedoch ein Problem: Es funktioniert nicht, wenn Sie Bigramme verwenden, d. H. Die Merkmale eines Dokuments sind immer 2 Wörter. Die Formel würde dann so aussehen: Klasse ~ a b + c d + e f (wenn Sie es so eingeben, sagt es "unerwartetes Symbol"). Hast du eine Idee, wie die Formel aussehen soll, wenn du Bigramme (oder sogar Trigramme) verwendest? – vdvaxel

+0

Ich fand das Problem: Ich musste nur jeden Begriff zwischen Backticks setzen. Vielen Dank! – vdvaxel