Nie som expert, takze "usual caveats apply"
Pristupy strojoveho ucenia ku klasifikacii sa v zasade rozdeluju na dva hlavne prudy:
- ucenie s ucitelom supervised learning - mas nejaku vzorku trenovacich dat, ktore rucne rozdelis do spravnych kategorii a tvoj algoritmus na nich trenujes a ladis. Kazde nastavenie algoritmu ktore si myslis ze dava dobre vysledky, otestujes na vzorke testovacich dat, ktore algoritmus pocas fazy ucenia/trenovania nevidel (tie mas tiez rucne rozdelene do spravnych kategorii, aby si vedel vyhodnotit uspesnost algoritmu). Vyberies take nastavenie algoritmu, ktore ti dava najlepsie vysledky na testovacich datach.
- ucenie bez ucitela unsupervised learning - data nemas rucne rozdelene a algoritmus sa teda neuci na zaklade "voditok" ktore mu sam pripravis, ale roztrieduje data sam do nim definovanych kategorii zvacsa na zaklade toho, ako "daleko" sa od seba nachadzaju (pricom "daleko" moze znamenat akukolvek metriku). Ziskane kategorie si potom pouzivatel sam pomenuje (stroj to spravit nevie - nevie co reprezentuju, ale vie ako do nich rozdelit data, ktore vykazuju podobne charakteristiky).
Myslim ze tvoja uloha by sa dala ponat oboma pristupmi.
Kolko trenovacich dat potrebujes, tot otazka. Ale technikami podobnymi cross validation [1] si vies znazornit vyvin chyby aj v zavislosti na velkosti trenovacej mnoziny, a budes vidiet. Univerzalne odporucanie neexistuje a je to zavisle napriklad aj na konkretnom algoritme strojoveho ucenia. Urcite vsak bude dobre pokial v nich budu v rovnakej miere zastupene rozne "kategorie" navstevnikov tvojho webu.
Z toho co pises mi napada niekolko pristupov:
- Mozes si spravit zoznam vzorcov spravania, ktore vies z access logov detekovat a mas pocit ze odhaluju ze dany navstevnik je bot. Potom pre kazdeho navstevnika zo vzorcov spravania ktore pouzil detekujes, aka je pravdepodobnost ze je botom. Na toto by mohol posluzit napriklad aj tebou zmieneny Naive Bayes a predstavuje to pristup ucenia s ucitelom. Da sa ale pouzit vpodstate cokolvek (neviem ci je Naive Bayes zrovna idealny pristup).
- Mozno by sa dalo pre kazdeho pouzivatela spravit nieco ako sumar veskerej jeho aktivity (napriklad graf reprezentujuci jeho akcie/navstivene stranky a pod.). Porovnanim mnozstva takychto "sumarov" vies odhalit tie, ktore sa od inych napadne lisia...
Co sa tyka scikit-learn a SVC, tak to je linearny Support Vector Machine (SVM), ktory je urceny na jednoduchsie ulohy (AFAIK linearne separovatelne) a nie som si isty ze by ti pre tvoje potreby stacil. V pripade SVM je dobre pouzit nejaky nelinearny kernel (ale obavam sa ze tu zachadzam asi uz do prilis velkych detailov) - na prvy pohlad vyzera zaujimavo skor trieda OneClassSVM - tvojou triedou by boli "normalni pouzivatelia" a vsetko co by "lezalo mimo" (outliers), by boli boti
To su len take prvoplanove napady, urcite som tu nevymyslel nic svetoborne
Co sa tyka tvojho zamerania, da sa to ponat aj ako "anomaly detection" - mozes prip. skusit pogooglit tento termin a urcite najdes odbornejsie i uzitocnejsie clanky ako je moj prispevok
Nejake algoritmy najdes spomenute i na wikipedii [2].
Uvedomujem si ze som to napisal dost ad-hoc, snad pomoze aspon trochu
[1]
http://www.astroml.org/sklearn_tutorial/practical.html#cross-validation-and-testing[2]
http://en.wikipedia.org/wiki/Anomaly_detection#Popular_techniques