Heyo,
ich wollte mich nur auch nochmal zurückmelden. So langsam kommt man ja rein in den ganzen Sums.
Mit cforest sehe ich mich auf keinen grünen Ast kommen, aber die normalen randomForests arbeiten und die Prognosen waren wohl auch ganz ok, danke für Deine Hilfe!
Irgendwie macht mir das sogar Spaß, deswegen will ich noch ein wenig damit rumspielen. Auf Hochdeutsch: Fragenkatalog hängt an
Hatte ein wenig das Problem, dass mir zumeist die Klasse mit größter relativer Häufigkeit im Datensatz prognostiziert wurde.
Habe gelesen dass das daran liegen kann, dass die predictor-Variablen einfach keine vernünftige Entscheidung zulassen, glaube aber, dass ich dem Algorithmus auch keine Strafe auferlegt habe, wenn er etwas falsch kategorisiert hat.
Was zur ersten Frage führt.
1. Wenn ich nun Kosten für die Klassifikationsfehler einführen würde, wie kann ich das einbinden? Über cutoff?
Können Kosten Einfluss auf die Splits haben (wenn ja, ist das implementiert?)
Haben Kosten einen Einfluss auf die Klassifikationen der Blätter? (Fehlentscheidung für A wäre teurer als Fehlentscheidung für B, wenn ich nicht sicher genug bin, prognostiziere ich B..)
Selbe Frage für Wälder. Ich habe 10 Bäume, die A sagen, 9 sagen B. Aber das finde ich zu unsicher, da möchte ich lieber B.
2. Boosting von RF in R.
Geht das mit irgendeinem package? Ich sehe in randomForest nur die Methoden tuneRF, welches an mtry herumspielt, und rfcv, das die Predictorvariablen schrittweise rauswirft.
Aber Boosting, welches ja den Wald in mehreren Iterationen verbessert, sehe ich da nicht realisiert.
Überhaupt finde ich Boosting häufig nur als alternative Ensemblemethode, die halt einen Haufen kleiner Baumstümpfe anpasst. Gibt es das garnicht verbunden mit Wäldern aus komplexen Bäumen?
3. Ich würde ganz gerne der stumpfen Mehrheitsentscheidung nochmal entgegentreten.
Habe mir die OOB-Votes im Waldaufbau ausgeben lassen mit fit$votes.
Darüber habe ich dann nochmal eine Funktion rennen lassen (glaube rm, randomForest und eins von den party-dingern.. ctree oder cforest), die aus den relativen Häufigkeiten der Votes auf die Klasse schließen sollte.
(Vielleicht läuft das hier auch mit dem cutoff zusammen, den ich so verstanden habe, dass er abfängt, wenn zB 70% meiner Daten einer Klasse zufallen, die sonst immer gewählt würde.)
D.h. die Aussage (32% Bäume entscheiden sich für Klasse A, 30% B, 38% C..) hab ich nicht als Kategorisierung in Klasse C akzeptiert, anhand derer ich dann sage: "ok, C ist nicht <15min.", sondern werfe die relativen Häufigkeiten noch einmal in eine Funktion, die als Zielvariable die binäre "<15min?" Kategorie hat und erhalte ein besseres Ergebnis (plötzlich nur noch 6% Fehler beider Art in meinem zurückgehaltenen Drittel Testdaten)
Ich glaube, dass das nicht ganz falsch war, bin aber nicht sicher, ob ich nicht wieder was übersehen habe..
Zum Beispiel, dass ich ja nun an meine OOB-Daten anpasse. Aber ich validiere es ja mit nem unabhängigen Testset. Müsste ok sein..
Einschub/Nachtrag:
Der Beweis von Breiman (paper, Theorem 1.2) dass RFs nicht overfitten basiert auf der Marge-Funktion, die die korrekten Klassifikationen der Bäume innerhalb eines Waldes durch Mehrheitsentscheid bewertet. Wenn ich diese Klassifikationen nun nochmal nachträglich anpasse auf meine Testdaten, störe ich damit den Beweis?Darüber hinaus frage ich mich, ob ich dann nicht nur die Prognosehäufigkeiten, sondern die Prognosen der einzelnen Bäume einbeziehen kann um wirklich explizit die Prognosen "guter" Bäume zu betonen.
Aber dafür sehe ich keine vernünftige Methode, die mir sagt, welcher Baum welche Prognose getroffen hat, so dass ich aus predict eine Matrix mit ntree Spalten bekäme.
Sollte es sinnvoll gewesen sein, würde ich gerne das selbe Entscheidungstuning für die Blätter der Bäume machen (also quasi eine Ebene vorher schon).
Denn dort kamen ja auch zB (2 Klasse A, 3 Klasse B, 3 Klasse C 0 Klasse D) Daten an -> Blatt entscheidet random auf B oder C.
Ich sehe aber eine ~Tendenz zu A, will also lieber B als C. Außerdem hab ich ja evtl. unterschiedliche Kosten (siehe Frage 1)
Oder sind meine Bäume sowieso so überangepasst, dass ich meist "reine" Blätter habe? (Würde es sich dann lohnen, wenn ich über nodesize flachere Bäume pflanze und dann die unreinen Blätter fitte?)
LG
ps. gerade vor der Formelschreibweise wurde ich gewarnt, da R sich dadran wohl sehr aufhält... Bin jetzt zu x = daten[,-1], y = daten[,1] übergegangen, auch wenn ich bei mir noch keinen harten Performance-gain drin sehe.