Ovu stranicu je najbolje pregledavati u modernom internet pregledniku s omogućenim JavaScriptom.

[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

Lumpy To ti se desava jer je Java “pass by reference” za liste, pa svaka iteracija algoritma pokazuje na isti x/activeFeatures. Zato je stvaranje nove liste rijesilo problem, ovdje imas fino objasnjenje.


TheNubKiller

him meni titanic sa ograničenom dubinom radi


« Prethodna stranica Sljedeća stranica »