Pamąstymai apie slankiojančio lango signalų analizavimo metodą

Geriausios mintys kyla tuomet, kai darai ką nors visiškai pašalinio – šiuo atveju besėdint prie visiškai intelektro nereikalaujančio kompiuterinio žaidimo, kilo įdomi mintis kaip galima praplėsti slankiojančiu langu pagrįsta signalų analizavimo sistemą.

Visa idėja remiasi kintamo ilgio slankiojančiu langu (tiksliau jo ilgis kinta tik signalo analizavimo pradžioje), o toliau lieka pastovus. Taip galima praplėsti analizuojamo signalo ilgį, išsaugant mažą reakcijos laiką. Idėja dar reikalauja darbo, tačiau pačią pradžią jau galima publikuoti.

Tikiu, kad jau kažkas iki manęs apturėjo ir aprašė šitą idėja, tačiau vistiek ją aprašiau, kad nepamest.

Kadangi wordpress sistema yra labai, labai nedraugiška grafikams ir lygčių rašymui, nusprendžiau viską aprašyti LaTeX pagalba ir tiesiog patalpinti savo rašliavų interneto kampelyje.

Popierių galite atsisiųsti iš čia.

Advertisements

Įžanga į Paslėptą Markovo modelį (skaidrės)

Šį kart trumpa prezentacija apie Paslėptą Markovo modelį, su trupučiu matematikos.

Skaidrėse pristatomi mašininio apmokymo tipai, parodyta pavyzdinė savybių erdvė, aptariamas Markovo procesas, Markovo grandinė, apibūdinti Paslėpto Markovo modelio parametrai, apžvelgiamas Viterbi kelio radimo algoritmas.

Viskas paruošta nėra super-idealiai, dėl didelio akademinio užimtumo. Skaidrės yra daugiau kaip špargalkė kalbai, negu kaip mokomoji priemonė. Mokomajai priemonei reikia knygas rašyti. Skaidres galite peržiūrėti slideshare, arba atsisiųsti pdf formatu.

Vektoriaus palaikymo mašina

Kažkodėl nusprendžiau, kad seniai berašiau įrašų, kurių niekas nesuprato. Šiandien su plačia tauta norėčiau pasidalinti maža teorijos ir praktikos samprata apie Support Vector Machine (SVM) (lietuviškai galima versti įvairiai, tačiau, kadangi niekur jokio vertimo nerandu, tai sugalvojau savo variantą – Vektoriaus palaikymo mašina); Labiausiai man patiko Christopher J.C. Burgers parašytas įvadas “A Tutorial on Support Vector Machines for Pattern Recognition“. Nors, aišku, galite bandyti skaityti originalų Vapnik straipsnį “An overview of statistical learning theory“. Ten daugiau matematikos, bet ir aišku mažiau.

Įžanga

SVM sprendžia klasifikavimo problemas. Turim tam tikrą savybių erdvę ir mums reikia toje savybių erdvėje gražiai `padalinti` duomenis. SVM genialumas yra tai, kad jis naudoja pačius `duomenis` duomenų praskyrimo erdvei rasti. Daug žada, ne?

Gražioji pusė

Pavyzdį galima paimti iš wiki.

Grafike X_1 ir X_2 suformuoja dvi dimensijas, kur SVM ieško linijinio jų tarpusavio prasiskyrimo. Ryškiau apibrėžti tuščiaviduriai taškai ir pilkai apvesti juodi taškai yra ne kas kitas kaip palaikymo vektoriai. Tai jie pagrindinė priežastis kodėl įmanomas toks duomenų prasiskyrimas. Labai nesigilinant į SVM matematiką (ribinės klaidos radimas ir kt.), tai mes turime dvi linijines lygtis. Viskas ko mums reikia, tai rasti dvi linijinės funkcijas. Mums šiuo klausimu dar padeda ir ta sąlyga, kad nagrinėjamos lygtis turi būti viena kitai lygiagrečios. Nėra jokio Gauso (NaiveBayes), nėra jokios gausios ir gan sunkios matematikos PMM (HMM) atveju. Juk nuostabu, ne? Iš teigiamų savybių galima paminėti ir išgirtą jo naudojimą izoliuotų raidžių atpažinime. Yra pateikiamas net visas projektas su kodu (.NET) (dėl .NET jo net nežiūrėjau).

Negražioji pusė

Tačiau SVM turi ir blogų savybių. Kas nutiks, jeigu po apmokymo, testavimo fazėje savybių erdvėje koks nors taškas pateks tarp dviejų linijų? SVM neturi jokio Gauso (bent jau originalas), todėl atsakymo paprasčiausiai nebus. Kokia loginė funkcija tai gali paaiškinti? Kur `uncertainty` principas? Sekantis SVM trūkumas – tai jo įvairumas. Jeigu prisiminti mokyklinę matematiką, tai visos matematinės plokštumos ir figūros kaip tik ir prasidėdavo tašku ir tiese. Taip pat ir SVM atveju – galime prigalvoti begalės jo variantu ir ieškoti tinkamo iki kol pati saulė sudegs. Žinoma, yra keli populiarūs, oficialiai naudojami sprendimai. Kita neigiama savybė – SVM sugebėjimas vienu laiko momentu klasifikuoti tik du duomenų debesis savybių danguje. Yra, tiesa, neblogas popierius šia tema. Siūlau pasiskaityti, kada nors. Iš praktikos dar galima paminėti, kad SVM apmokymas yra labai lėtas ir nervų reikalaujantis procesas. Stebuklus su juo galima daryti ir neturint baigtinį dimensijų skaičių, tačiau `gyvai` treniruoti klasifikatoriaus tiesiog neįmanoma.

Išvados

Taip ir nesupratau kodėl SVM tapo toks populiarus. Yra geresnių ir greitesnių klasifikavimo metodų (kad ir stebuklingas PMM (HMM), nors ir reikia turėti baigtinį dimensijų skaičių). Reiks gal kada parašyti įžangą į SVM lietuvių kalba. Tiek, trumpai.