2014-04-14 9 views
5

Ich verwende Rs Caret-Paket, um eine Grid-Suche und Modellbewertung durchzuführen. Ich habe eine benutzerdefinierte Bewertungsmaßzahl, die ein gewichteter Durchschnitt des absoluten Fehlers ist. Gewichte werden auf der Beobachtungsebene zugewiesen.R-Caret-Modellbewertung mit alternativer Leistungsmetrik

X <- c(1,1,2,0,1) #feature 1 
w <- c(1,2,2,1,1) #weights 
Y <- 1:5 #target, continuous 

#assume I run a model using X as features and Y as target and get a vector of predictions 

mymetric <- function(predictions, target, weights){ 

v <- sum(abs(target-predictions)*weights)/sum(weights) 
return(v) 
} 

auf ein Beispiel gegeben, wie summaryFunction verwenden, um eine kundenspezifische Bewertungsmetrik für das Caret-Bahn() zu definieren. Zum Angebot:

Die Funktion trainControl hat ein Argument namens summaryFunction, das eine Funktion für die Rechenleistung angibt. Die Funktion sollte diese Argumente hat:

Daten sind eine Referenz für einen Datenrahmen oder eine Matrix mit Spalten obs und pred für die beobachteten und die vorhergesagten Ergebnis-Werte (entweder numerisch Daten für Regression oder Zeichenwerte für die Klassifizierung) aufgerufen . Derzeit werden Klassenwahrscheinlichkeiten nicht an die Funktion übergeben. Die Werte in Daten sind die verharrten Vorhersagen (und ihre zugehörigen Referenzwerte) für eine einzelne Kombination von Abstimmungsparametern. Wenn das Argument classProbs des trainControl-Objekts auf TRUE gesetzt ist, werden zusätzliche Spalten in Daten vorhanden sein, die die Klassen Wahrscheinlichkeiten enthalten. Die Namen dieser Spalten entsprechen denen der Klasse . lev ist eine Zeichenkette, die die Ergebnisfaktorniveaus aus den Trainingsdaten enthält. Für die Regression wird ein Wert von NULL in die Funktion übergeben. Modell ist eine Zeichenfolge, die für das Modell verwendet wird (d. h. der Wert, der an das Methodenargument von train übergeben wird).

Ich kann nicht ganz herausfinden, wie die Beobachtungsgewichte an summaryFunction übergeben werden.

Antwort

3

Sie können Gewichte nicht direkt an die Zusammenfassungsfunktion übergeben, was ein Versehen ist, da Sie sie an die Modellierungsfunktion übergeben können. Wenn das zugrundeliegende Modell Gewichte berücksichtigt, werden diese verwendet, um die vorhergesagten Werte zu erzeugen.

Ich werde das auf die nächste Version hinzufügen.

Max

+0

Hallo .. Nur um zu bestätigen, ob diese Änderung in der neuen Version von Caret vorgenommen wird? Ich benutze Caret-6.0-58 und seine Argumente haben keine Gewichte – myloginid

+0

Bestätigt - Der Code schlägt mit Gewichtungen, die Zusammenfassung Funktion mit Fehler hinzugefügt - "Fehler in FUN (links, rechts): nicht numerische Argument zu binären Operator" – myloginid

Verwandte Themen