dinsdag 3 november 2015

Diagnostiek - deel 1

Goed, even de bussen geparkeerd en mij volop op een nieuw project gestort: Het automatisch analyseren van een groot aantal geanonimiseerde, medische meetgegevens. Zou anomaly detectie hier ook werken?

Eerst krijg ik weer te maken met een stevig stuk 'databewerking'. De gegevens zijn opgeslagen in afzonderlijke excel bestanden waarbij een deel kolomsgewijs staat aangegeven (met heel veel herhaling) en een deel per rij. Met name de meetwaarden staan per rij. Gelukkig ook met een unieke naam. Per onderzoek zijn er echter steeds verschillende type metingen gedaan. Voor een DL experiment moeten deze allemaal in verschillende kolommen worden opgenomen. Het lukt na veel experimenteren om een 2D numpy array (X) te bouwen vanuit de verschillende excel bestanden. Steeds als er een nieuw type meetwaarde wordt gevonden voeg ik een nieuwe kolom toe. In eerste instantie met nullen. Per 'geldige' excel wordt er ook een nieuwe rij toegevoegd. Met in de eerste rij een unieke identificatie voor het onderzoek. Het levert een array op van ongeveer 11.000 x 300 getallen. In een aparte lijst sla ik de kolomnamen op. Even probeer ik nog e.e.a. in Pandas te combineren maar ik loop tegen teveel fouten op. Vooral waarschijnlijk wegens een gebrek aan ervaring hiermee. Gauw weer terug naar numpy. Ik sla het array (X) op voor verder gebruik. In een 2e programma laat ik X los op het OneClassSVM van sklearn. Hiermee krijgen de 'outliers' een -1 als resultaat en de 'gewone' een 1. Door weer te spelen met de parameters (nu en gamma) krijg ik een set van ongeveer 450 outliers. Op een startset van 11.000 lijkt dat een mooi resultaat. Ik bouw een lijst (outliers) met de onderzoeksidentificatie van de outliers. Deze kan ik dan weer gebruiken in mijn 3e programma. In het 3e programma print ik, op basis van de oorspronkelijke excel bestanden op een redelijk overzichtelijke wijze de onderzoeksresultaten af. Ook worden er uitgeschreven conclusies uit de oorspronkelijke onderzoek toegevoegd. Het blijkt niet duidelijk waarom de betreffende onderzoeken als 'outliers' worden bestempeld. Het wordt duidelijk waar het huidige programma faalt. Zeker bij zoveel meetresultaten moet het machine learning programma aangeven welke metingen vooral als 'afwijkend' worden gezien. Uit de (wiskundige) beschrijving van de support vector machine van sklearn wordt het mij niet helemaal duidelijk hoe ik dat zou kunnen afleiden. Als kernel gebruik ik nu 'rbf', de 'radius basis function' maar wat die precies doet vind ik moeilijk te beoordelen.
In DL wordt echter heel vaak de afwijking van de gemiddelde waarde (al dan niet in het kwadraat) gebruikt. Voor een indicatie lijkt mij dat een aardig uitgangspunt. Hoewel ik mij afvraag of dat voldoende recht doet aan combinatiemogelijkheden zoals bijvoorbeeld in bovenstaande grafiek is weergegeven.

A gauw wordt duidelijk dat de grootste afwijkingen t.o.v. het gemiddelde bij de outliers zit in de 'user defined variabelen'. Deze worden naar eigen inzicht, aanvullend op de 'standaard set' aangemaakt en gebruikt. Ja dat lijkt wel logisch dat ze dan als 'outliers' worden bestempeld. Deze wijken 'per definitie' flink af van hun gemiddelde. Toch maar eens kijken of we ons daarvan kunnen ontdoen. Dan kunnen we tevens een betere 'data preparation' doen door de parameters gelijk te gaan 'schalen', zodat ze evenveel gewicht krijgen,  en lege waardes te middelen zodat hun invloed geminimaliseerd wordt.
 

Geen opmerkingen:

Een reactie posten