rpart()

Entscheidungsbäume, Random Forest, Support Vektor Maschinen, Neuronale Netze, ...

Moderator: consuli

Antworten
riju

rpart()

Beitrag von riju »

Hallo,

ich beschäftige mich seit kurzem mit R und Entscheidungsbäumen. Nun möchte ich mit der Funktion rpart() ein Entscheidungsbaum erstellen. Allerdings kommt immer nur eine Wurzel raus. Bei Testbeispielen (wie die Titanic) hat es funktioniert. Auch mit der Funktion ctree() aus dem Package 'party' funktioniert es. Hat einer eine Idee woran das liegen kann, das kein Baum mit rpart() aufgebaut wird?

Verzeihung für die doofe Frage :?

Liebe Grüße
riju
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: rpart()

Beitrag von bigben »

Hallo riju,

herzlich willkommen im Forum. Es gibt unendlich viele Gründe, warum Du keinen Baum bekommst. Die reichen von einer Fehlbedienung bis hin zu Datensätzen, in denen richtigerweise immer das gleiche herauskommen sollte (vielleicht ein für Dich lesenswertes Beispiel dazu: viewtopic.php?f=23&t=675 ). Was bei Dir schlecht läuft, schauen wir uns gerne mit Dir zusammen an, aber dafür brauchen wir Deine Daten und Deine Fragestellung.

Lies Dir bitte diese beiden Seiten durch und formuliere dann die Fragestellung nochmal um:
viewtopic.php?f=20&t=11
https://stackoverflow.com/help/mcve

Jeder Entscheidungsbaum darf nicht so verzweigt wachsen, dass am Ende jeder einzelne Punkt im Trainingsdatensatz zu einem eigenen Blatt wird. Dafür braucht man eine Stopping rule und/oder Pruning. Unterschiede zwischen rpart und ctree könnten schon die unterschiedlichen Ergebnisse mit beiden Funktionen erklären.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
student
Beiträge: 674
Registriert: Fr Okt 07, 2016 9:52 am

Re: rpart()

Beitrag von student »

Hallo riju,

ich habe hier etwas zu Entscheidungsbäumen gemacht. Vielleicht hilft es weiter....
Viele Grüße,
Student
-----------------------------------------------------------------------------------------------------------------------
faes.de, Datenanalyse mit R & das Ad-Oculos-Projekt
Das Ad-Oculos-Projekt auf YouTube

Habe Mut, dich deines eigenen Verstandes zu bedienen! (Kant)
riju

Re: rpart()

Beitrag von riju »

Hallo,

die Daten kann ich hier nicht veröffentlichen.
An sich ist mein Programm so aufgebaut, wie es auf der Seite von faes vorgemacht wurde. Mit anderen Daten funktioniert auch alles.

Mein Zielattribut beinhaltet 2199x ja und 182252x nein. Kann es daran liegen, dass "Ja" so selten vorkommt?

Liebe Grüße
riju
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: rpart()

Beitrag von EDi »

die Daten kann ich hier nicht veröffentlichen.
Dann könntest du einen Fake-Datensatz erstellen, der das Problem zeigt.
Ansonsten kann man dir hier nur schwer helfen :(
Mein Zielattribut beinhaltet 2199x ja und 182252x nein. Kann es daran liegen, dass "Ja" so selten vorkommt?
Ja, das könnte einen negative Einfluss auf das Model-fitting haben.
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: rpart()

Beitrag von bigben »

riju hat geschrieben: Fr Jan 05, 2018 2:43 pmMein Zielattribut beinhaltet 2199x ja und 182252x nein. Kann es daran liegen, dass "Ja" so selten vorkommt?
In einem der oben von mir verlinkten Threads war das so: "Nein" war viel häufiger und es gab keine unabhängige, die beides gut getrennt hätte.

Du kannst über "ALLES AUSWÄHLEN", dann copy und paste mal Folgende Daten in R kopieren:

Code: Alles auswählen

beispiel <- dput(beispiel)
structure(list(x = c(594.827461289242, 989.85280143097, 615.4084878508, 
273.077666992322, 63.7068431824446, 72.303275577724, 873.511214042082, 
362.82499670051, 945.622149156407, 558.318939991295, 512.661150889471, 
947.7716635447, 109.801595564932, 818.907550536096, 377.342106774449, 
556.641047820449, 313.871186692268, 82.3428803123534, 779.937542276457, 
193.234728416428, 655.585467582569, 435.147053329274, 197.148326551542, 
994.660422205925, 446.742866421118, 31.4266642089933, 937.016558134928, 
870.983954286203, 601.246283389628, 299.015456344932, 809.346275171265, 
952.142385067418, 852.053971262649, 127.309735864401, 968.882349785417, 
557.101008715108, 5.36444736644626, 135.763919679448, 5.84710156545043, 
816.874062176794, 782.163587864488, 931.066285818815, 368.689882336184, 
974.454874172807, 823.743681889027, 787.448863266036, 622.82583466731, 
967.354928841814, 499.91849064827, 893.695599632338, 401.043246965855, 
447.541609639302, 935.77908212319, 683.332197368145, 18.1631301529706, 
165.526717668399, 495.834498899058, 426.535228034481, 992.053120629862, 
888.950123917311, 345.755371265113, 705.844125011936, 908.724687062204, 
676.292887190357, 639.10027127713, 149.604527046904, 601.125390036032, 
272.751235868782, 457.853371044621, 222.253093263134, 254.921516869217, 
653.687727171928, 471.993161132559, 160.963035654277, 272.080334601924, 
712.956093018875, 613.353652181104, 132.121966220438, 70.0072532054037, 
966.265012975782, 368.27027797699, 677.454084623605, 845.951730385423, 
241.650385316461, 35.1509910542518, 595.240236725658, 836.191128008068, 
362.249210244045, 332.188533386216, 644.73633072339, 958.615136798471, 
596.203628461808, 510.280017973855, 155.264135915786, 845.851005520672, 
214.380425633863, 669.873244827613, 617.75645124726, 49.9997769948095, 
949.398775584996, 582.552031613886, 860.954337054864, 518.46724934876, 
266.127483453602, 597.377663478255, 795.576084172353, 689.286037581041, 
480.631644604728, 465.929388767108, 618.412335170433, 449.270514305681, 
602.707532700151, 4.60897409357131, 994.994512526318, 406.462448416278, 
117.951637133956, 869.53909532167, 540.192956570536, 881.59766793251, 
37.5398390460759, 881.43396214582, 722.349669784307, 769.810296595097, 
863.593708956614, 500.742103205994, 925.864024320617, 208.074670284986, 
27.1055938210338, 315.793072106317, 660.112249664962, 314.69130073674, 
944.461387814954, 778.970579849556, 339.431246276945, 481.646264670417, 
415.994798764586, 776.333899470046, 485.427005914971, 15.29910415411, 
642.451295163482, 234.829984838143, 747.025883058086, 295.607374515384, 
906.218191608787, 853.324017953128, 461.963776964694, 71.3482482824475, 
577.803724445403, 579.579334007576, 993.576776934788, 335.274414392188, 
666.801774175838, 938.556001987308, 574.856834951788, 691.711413906887, 
89.7585870698094, 866.459244629368, 501.139396801591, 223.256284138188, 
412.419241620228, 886.306279571727, 495.593437226489, 672.753727762029, 
282.504437956959, 817.058302927762, 246.0994545836, 369.646193925291, 
235.524395015091, 935.75692595914, 415.076828328893, 137.449405388907, 
914.364723023027, 347.641376079991, 852.930875727907, 142.635178752244, 
359.432870987803, 245.505067519844, 45.9059465210885, 784.547902178019, 
199.171734508127, 391.850244253874, 323.562244651839, 602.105905069038, 
541.271679569036, 990.823732689023, 253.79104912281, 735.269893193617, 
977.608161047101, 558.046241756529, 392.708159517497, 824.68925928697, 
112.384460866451, 535.777904093266, 443.831584881991, 273.957212688401, 
157.357535790652, 871.838073711842, 562.044856371358, 550.689758267254, 
592.365285614505), y = c(727.812862722203, 638.925284612924, 
614.450164837763, 52.4168505799025, 565.157752949744, 587.341380305588, 
628.56707512401, 621.890645008534, 82.270042039454, 77.6426121592522, 
687.094689812511, 830.303592374548, 145.909875165671, 783.530072309077, 
486.450079130009, 989.265105454251, 499.104954535142, 562.260535079986, 
378.257020609453, 518.637197325006, 74.2837921716273, 538.472344167531, 
961.061000823975, 527.810139581561, 437.159451888874, 32.2669965680689, 
37.734180688858, 47.348293941468, 160.959035623819, 469.097393332049, 
805.92397483997, 280.597516102716, 754.783985204995, 521.825814852491, 
288.947193184868, 17.3772014677525, 668.349529849365, 66.9759646989405, 
836.386426817626, 135.343155823648, 655.878108460456, 837.947728810832, 
257.647996069863, 135.995285119861, 763.488414231688, 211.996233323589, 
267.96959922649, 531.831194646657, 474.116867408156, 373.443664982915, 
775.349928531796, 558.203970082104, 155.236621154472, 989.418448414654, 
244.44643035531, 130.378512199968, 212.681135395542, 380.004248348996, 
359.621168812737, 302.662048954517, 44.3997136317194, 934.783352771774, 
568.717029877007, 220.802745083347, 877.961175283417, 467.288806336001, 
542.34981467016, 784.39817391336, 647.870272397995, 144.893147051334, 
321.637377142906, 951.055582612753, 188.198490999639, 750.404248479754, 
459.158475277945, 141.365048941225, 205.193076049909, 675.293499603868, 
138.030210509896, 415.543700801209, 451.247031800449, 622.946569696069, 
251.174297416583, 464.153463719413, 165.509229060262, 857.806453481317, 
156.551897292957, 88.3316337130964, 893.417771905661, 300.620508380234, 
752.086671069264, 401.606647996232, 448.558106087148, 159.673980204388, 
144.515851279721, 149.180392036214, 514.434259850532, 492.827306268737, 
616.342768538743, 447.422890691087, 55.6767152156681, 5.39630954153836, 
221.834201132879, 850.963223958388, 267.346206121147, 598.600273253396, 
608.599697239697, 992.158440407366, 191.189960809425, 753.390584606677, 
242.387337144464, 327.452220022678, 3.53549467399716, 997.424143599346, 
438.059504376724, 997.688744915649, 196.719169151038, 111.476795747876, 
250.736450543627, 680.476603098214, 577.254296746105, 416.347296210006, 
729.181243572384, 574.189733015373, 577.6351490058, 589.999127434567, 
222.928340081125, 103.492298629135, 736.506026936695, 612.403756240383, 
951.212360523641, 959.875865606591, 744.836050085723, 434.830145677552, 
174.775137333199, 435.288068838418, 762.458187760785, 919.029311044142, 
906.697582919151, 815.512828994542, 199.752942658961, 49.625585321337, 
478.948525618762, 590.393368853256, 96.6202358249575, 950.890234904364, 
162.743138615042, 921.506262617186, 127.775072818622, 662.739590508863, 
784.041927428916, 764.613161794841, 672.570310533047, 115.665902383626, 
851.301487535238, 617.961594834924, 836.411555996165, 169.928224757314, 
10.2812200784683, 323.469731258228, 269.682724494487, 825.261356076226, 
933.661737013608, 127.791483653709, 913.337606238201, 605.233947746456, 
400.285166455433, 665.795303415507, 767.599277198315, 521.895700134337, 
394.507517106831, 965.786833548918, 48.9855406340212, 153.308271663263, 
696.839065523818, 727.785873226821, 108.379415469244, 464.568545576185, 
642.125536222011, 397.110937861726, 990.430257050321, 678.708809893578, 
315.318457549438, 153.769260039553, 301.251735771075, 94.5155306253582, 
26.8755068536848, 310.483304318041, 742.438868619502, 960.092212306336, 
415.802662726492, 522.235407261178, 67.5197287928313, 629.841805435717, 
353.413787204772, 424.71465212293, 963.768790708855, 680.998486932367, 
718.463884433731, 170.629765372723), z = c(FALSE, FALSE, FALSE, 
FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, 
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, 
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, 
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, 
TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, 
FALSE)), .Names = c("x", "y", "z"), row.names = c(NA, -200L), class = "data.frame")
Das ist dann ein Datensatz `beispiel` mit zwei unabhängigen Variablen x und y und einer abhängigen z:

Code: Alles auswählen

summary(beispiel)
Wie Du siehst, sind TRUE und FALSE in deutlich ungleichem Zahlenverhältnis vorhanden. FALSE ist viel häufiger und doch erkennt rpart sehr schnell eine Abhängigkeit von x:

Code: Alles auswählen

library(rpart)

model <- rpart(z ~ x, data = beispiel, method="class")
plot(model)
text(model)
und auch eine Abhängigkeit von y

Code: Alles auswählen

model <- rpart(z ~ y, data = beispiel, method = "class")
plot(model)
text(model)
und auch eine komplexe von beiden Variablen:

Code: Alles auswählen

model <- rpart(z ~ x + y, data = beispiel, method = "class")
plot(model)
text(model)

Auch wenn TRUE und FALSE stark unterschiedlich häufig im Datensatz vorkommen, kommt rpart ganz gut zurecht. Wichtiger ist die Frage, wie stark die Abhängigkeit von den Prädiktoren ist.


LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
riju

Re: rpart()

Beitrag von riju »

Hallo,

es funktioniert jetzt. Ich denke, es lag wirklich an der Verteilung von Ja und Nein. Nun habe ich meinen Datensatz für das Training dementsprechend angepasst. Somit habe ich jetzt 2244x Ja und 19756x Nein. Für meinen Test muss ich doch nun mein Ergebnis zurück skalieren. Wie mache ich das am Besten? Ich finde dazu leider nichts.

Vielen Dank
Liebe Grüße
riju
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: rpart()

Beitrag von bigben »

Sorry, kannst Du das noch mal erklären? Sowohl das mit dem Datensatz anpassen, als auch das mit dem Rückskalieren. Insbesondere würde mich interessieren, woher Du inhaltlich die Rechtfertigung ableitest, die Daten durch künstliches Ausdünnen des einen Ergebnisses zu verfälschen.

Ich kann nur sagen: Vorsicht, vorsicht, vorsicht!

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: rpart()

Beitrag von EDi »

Für meinen Test muss ich doch nun mein Ergebnis zurück skalieren. Wie mache ich das am Besten?
Down-sampling kann man mit dem Trainings-Datensatz machen.
Den Test-Datensatz würde ich allerdings unverändert belassen und dieser sollte die rellen Verhältnisse wiederspiegeln.

Literaturtipp: Applied Preditive Modelling von Max Kuhn (Author des caret pakets).
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
Antworten