[UUUI] 3. laboratorijska vježba - 2020/2021
boban_rajovic
Ako je netko radio u javi , kako ste spremali stablo odluke
TheNubKiller
ravindrababu ravula ja sam napravio klase Node i Leaf koje implementiraju sučelje Value. Sučelje je prazno a implementiraju ga i Node i Leaf tako da ID3 algoritam vraća Value. ID3 će ti uvijek vratiti korijen. Taj korijen je Value (znači ili Leaf ili Node) a to ispituješ sa if(root instanceof Node) ili if(root instanceof Leaf)
TheNubKiller
Kako bi se algoritam trebao ponašati ako je train set prazan? Npr ima samo header a nema niti jednog primjera u datoteci. Što bi onda trebalo vratiti? (Pitam zato što u labosu piše da provjerimo sve rubne slučajeve pa da ne bi ovako nešto uvalili na svojim primjerima)
TheNubKiller
Jedno stablo mi “krivo” iscrta, tj. krive grane ali sve predikcije su točne… Ima tko ideju u čemu je problem? Jel moguće da sam nešto krivo sortirao kad se tražilo abecedno pa da je drugim redoslijedom čvorove ispitivao i zbog toga je drugačiji ispis iako stablo dobro radi?
faboche
Lumpy U kojem primjeru ti se to pojavilo? Imao sam slicnu situaciju, problem je bio da su mi grane medusobno dijelile listu neiskoristenih znacajki, ali slucajno se dogodilo da mi je vracalo ispravne predikcije.
TheNubKiller
him - Failed test: java -cp target/classes -Dfile.encoding=UTF-8 ui.Solution heldout_logic_f2_train.csv heldout_logic_f2_test.csv
taj, vidim da u ispisu se u nekoliko navrata pojavljuje isti IG za par značajki pa mi je to sumnjivo, ali ako imaš alternativu, bio bih jako zahvalan.
wesley
Kako da odredim “najčešću” vrijednost kod ograničavanja dubine stabla?
TheNubKiller
wesley ja sam napravio rekurzivnu funkciju koja prima listu oznaka i čvor. i onda samo ide kroz subtrees. Ako je vrijednost Leaf onda dodaš 1, ako je vrijednost node onda ponovno pozoveš funkciju. Efektivno ide razinu po razinu od zadanoga čvora i prebroajva listove (naravno, prebrojene vrijednosti moraš negdje spremiti)
faboche
Lumpy Meni se u istom primjeru dogodilo. A se granao na True i B, B se granao na D i C. Kada sam isao granati C, s obzirom da su mi grane dijelile neiskoristene znacajke, u cvoru C vise nije bilo neiskoristenih znacajki (iako je D neiskoristen u toj grani) tako da je algoritam vratio najcescu klasu iz podskupa u cvoru. Nadam se da ti je relevantno
wesley
Lumpy mozes molim te objasniti na volleyball primjeru iz uputa za labos, gdje su stavili dubinu 1
meni kao rezultat dolazi ovako:
1:weather=cloudy yes
1:weather=rainy no
1:weather=sunny no
ne kuzim kako se tim postupkom dobiva yes za weather=rainy
wesley
Lumpy tebi prolazi volleyball primjer u autograderu?
TheNubKiller
him aha, mislio sam da pitaš za ono sa nepoznatom značajkom. Zanemari prošli odgovor onda. To sam lako riješio. Pogledaj pseudokod prezentacije. Taman prije nego što se zove argmaxX, samo stavi uvjet:
if(depth == 0){
return new Leaf(v); //v je argmaxV koji se prije zvao
}
TheNubKiller
him JE. TAKO MI SE GRANA. Kako si popravio pliz?
faboche
Lumpy Ako radis u javi, u rekurzivnom pozivu kao argument posalji new ArrayList<>(activeFeatures)
umjesto activeFeatures.
Pazi da prije rekurzivnog poziva uklonis upravo obradenu znacajku iz activeFeatures
TheNubKiller
him Ček što je activeFeatures? Jel to ovaj X u pseudokodu?
faboche
Lumpy Da
TheNubKiller
him Probat ću. Tenks! Jel to kojim slučajem popravilo i titanic? 😂
faboche
Lumpy Ne, imam i ja problema s njim
TheNubKiller
him osim ovoga što mi ne radi, titanic mi ne radi za 2 primjera:
- Failed test: java -cp target/classes -Dfile.encoding=UTF-8 ui.Solution titanic_train_categorical.csv titanic_test_categorical.csv
Failed test: java -cp target/classes -Dfile.encoding=UTF-8 ui.Solution titanic_train_categorical.csv titanic_heldout_categorical.csv
Jel ti bar za jedan radi?
- edit: btw, nez na koju foru ono radi sa array list ali to sam dodao i nekim čudom proradilo… Tako da ti hvala puno
faboche
Lumpy Ne, sva 3 titanica mi imaju razlike u granama pa za dio primjera daje krivi prediction
faboche
Lumpy Bilo bi smijesno da bi nam je opet isti uzrok problema.. Ja sam primjere za treniranje spremao kao Set<List<String>>
i pohranjivao ih je samo 256 od 700injak. Proradilo je kad sam pretvorio u List<List<String>>
.
JayOhAit
TheNubKiller
him meni titanic sa ograničenom dubinom radi