Muuttujien muokkaus Kingfisherille

Binäärimuuttujat

Binäärimuuttujia voi käyttää sellaisenaan, mikäli et ole kiinnostunut negaatioista. Tämä on tyypillistä "esiintymisdatalle" (occurrence data), kuten soiden kasvilajiluettelot tai geenin GO-luokat. Koska data esitetään transaktiomuodossa, jokainen datarivi vain luettelee alkioon liittyvät arvot. Ennen ohjelma-ajoa nämä koodataan numeroiksi ja lopuksi säännöt taas nimiksi, jolloin tulkinta on helppoa.

Jos haluat mukaan myös muuttujien negaatioita, luo jokaiselle negaatiolle oma binäärimuuttuja. Esim. ei-Ai:ta vastaa muuttuja Bi (tai voit havainnollisuuden vuoksi nimetä sen "ei-Ai:ksi").

Nominaalimuuttujat

Luo jokaiselle nominaalimuuttujan A arvolle ai binäärimuuttuja Bi. Voit nimetä sen vaikka "A=ai":ksi, jolloin tulkinta on selkeää. Esimerkiksi jos suon tyyppi voi olla letto, neva tai räme, voit luoda binäärimuuttujat tyyppi=letto, tyyppi=neva ja tyyppi=rame tai yksinkertaisesti letto, neva tai rame.

Huomaa että nyt negaatio ei-rame tarkoittaa siis samaa kuin "neva tai letto" (ellei mukana ole tyypittelemättömiä soita). Jos nominaalimuuttujalla on paljon arvoja, et ehkä halua tällaisia disjunktiomuuttujia mukaan (eli ei kannata luoda negaatioille omia muuttujia).

Huom2! Triviaalien sääntöjen muotoa "neva->ei-letto'' estämiseksi kannattaa etsiä vain positiiviset riippuvuudet (optio -t). Voit myös kieltää eheysehdoilla (optio -e) tiettyjä binäärimuuttujia esiintymästä samoissa säännöissä.

Numeeriset muuttujat

Numeerinen muuttuja täytyy diskretoida joko etukäteen (staattinen diskretointi) tai ohjelman aikana (dynaaminen diskretointi). Kingfisher ei tue aitoa dynaamista diskretointia, mutta seuraavassa on selostettu, miten voit simuloida sitä.

Staattisessa diskretoinnissa valitaan ensin sopiva diskretointi väleihin [b1,b2[,[b2,b3[,...,[b(m-1),bm] ja jokaiselle osavälille luodaan oman muuttuja. Voit nimetä muuttujan osavälin mukaan, esim. Ab1_b2. Jos osavälit vastaavat nomaalia pienempiä, normaaleja ja normaalia suurempia arvoja, voit nimetä muuttujat esim. Apieni, Anorm, Asuuri. Huomaa, että normaaliarvojen riippuvuudet eivät yleensä ole kovinkaan kiinnostavia. Jos haluat etsiä hienompaa diskretointia "hännille" (poikkeaville arvoille), voit jättää normaaliarvot kokonaan pois (eli vastaavia muuttujanimiä ei luetella alkion rivillä transaktiodatassa; rivin on silti oltava mukana, jotta frekvenssit menevät oikein).

Huomaa, että diskretointi tuottaa helposti triviaaleja sääntöjä muotoa "Ab1_b2 -> ei (Ab2_b3)", ellet estä niitä kuten nominaalimuuttujien yhteydessä selostettiin.

Dynaamista diskretointia voit simuloida seuraavasti: Luo ensin joukko "atomisia" diskretointivälejä, joista oikeat diskretointivälit muodostetaan. Näitä voi siis olla aika paljon. Olkoon diskretointivälien jakopisteet a1, a2, ..., am. Luo sitten jokaiselle ai:lle kaksi binäärimuuttujaa A<=ai ja A>=ai. Nyt on tärkeää estää triviaalit säännöt muotoa "A>=7->A>=5" antamalla eheysehdot. Eheysehtotiedostossa on joka rivillä lueteltu muuttujat jotka eivät saa esiintyä samassa säännössä. Nyt luodaan kaksi riviä, joista ensimmäisellä luetellaan kaikki muuttujat A>=a1,A>=a2,...,A>=am ja toisella rivillä kaikki muuttujat A<=a1, A<=a2,...,A<=am. (Huom! Näitä ei saa laittaa samalle riville tai diskretointi ei toimi!) Eheysehtotiedosto koodataan numeeriseksi (namescodes) ja annetaan ohjelmalle optiolla -e. Todennäköisesti haluat kieltää myös tyyppiä "A>=2->A<=5" olevat säännöt. Tätä varten pitää antaa toinen eheysehtotiedosto, joka vain kieltää tietyt seurausosien ja ehto-osamuuttujien yhdistelmät. Tiedoston joka rivillä on ensin seurausosa ja sitten sen kielletyt ehto-osamuuttujat. Nyt tulee siis A>=ai,A<=a1,...,A<=am -tyypin ehtoja (em. kieltää säännöt joiden seurausosassa A>=ai ja ehto-osassa jokin A<=aj).

Kun Kingfisher ajetaan, se luo automaattisesti optimaaliset diskretointivälien yhdistelmät. Esim. sääntö A>=5,A<=7->C kertoo, että ehto-osan diskretointiväli on [5,7].