Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

Statistische Analyse

1. Inleiding
1.1. Waarom Statistiek?

Business intelligence, data mining, data analyse


Trends, verbanden zoeken in databanken, rapporten,
Gebruikt statistische methoden
Zeer belangrijk voor managers
Voorbeelden data-analyse
Verkoop daalt plots sterk in bepaalde regio. Hoe komt dit? Wat kunnen we eraan
doen?
Welke strategie moeten we volgen om bepaald product meer te laten opbrengen?

Om op deze vragen antwoord te bieden zijn statistische technieken nodig
Kengetallen van data vinden
Data visualiseren
Toetsing van hypothesen
Regressie-analyse
Correlaties zoeken
Interpolatie en extrapolatie
Optimalisatie
Beslissingsbomen

Waarom statistiek voor informatici?
Data analyst is meestal geen informaticus
Maar data zit in databanken
Beheerd door informatici
Informatici worden dus dikwijls ingeschakeld voor
Schrijven van de juiste queries
Uitvoeren van berekeningen op de data

1.2. Onderzoeksfasen
Bij een statistisch onderzoek kunnen we verschillende fasen onderscheiden. In een voorbeeld: zijn
linux servers beter bestand tegen aanvallen dan windows servers?

1. Formuleren van vraagstelling, probleem, theorie


Omzetten van probleemstelling in hypothese Linux servers zijn beter bestand tegen
aanvallen dan windows servers
Variabelen
Onafhankelijke = oorzaak (het OS dat op de computer draait)
Afhankelijke = gevolg (het bestand zijn tegen aanvallen)
2. meetbaar maken, operationaliseren
Wat is een linux server? Welke versie, distributie, hardware, ?
Wat is een windows server? Welke versie, firewall, virusscanner, ?

Welke soort aanvallen? Virussen, DOS attacks, fishing, XSS, ?


3. steekproefopzet
Probleem: we kunnen niet alle servers (=populatie) uittesten
We doen dus metingen op testgroep (=steekproef)
Vraag: Kunnen we resultaten steekproef veralgemenen
Meestal doe je aselecte steekproef
Hoe groter de steekproef, hoe betrouwbaarder de resultaten
4. verrichten van metingen, verzamelen van gegevens
Ruwe gegevens verzamelen door
Interviews
Vragenlijsten
Test/Toets
Observatie
Experiment
Archiefonderzoek
5. beschrijven en analyseren van gegevens
Beschrijvende statistiek:
Gemiddelde, mediaan,
Frequentietabel
Diagram
Tabel
Regressie
Correlatie

6. formuleren van statische conclusies


Toetsende statistiek
In hoeverre is de hypothese waar?
In hoeverre zijn de resultaten te veralgemenen naar de volledige populatie
Heeft te maken met het aantal en de spreiding van de gemeten resultaten
7. verband tussen resultaten en theorie
Resultaten worden genterpreteerd en gevalideerd
Hier kan ook beslist worden dat bijkomend onderzoek nodig is
Soms ook foute interpretaties (bv. Verband ooievaarpopulatie en geboortecijfer)

1.3. Operationaliseren
Het meetbaar maken van gegevens
1.3.1. Variabelen en constanten
In een hypothese zitten variabelen en constanten
Het zijn parameters die in het onderzoek gebruikt worden
Variabel: kan verschillende waarden aannemen
Constanten: Heeft steeds dezelfde waarde binnen dit onderzoek
Variabelen en constante moeten geoperationaliseerd worden.
Welk type, welk bereik
Discrete variabelen: kunnen bepaalde waarden aannemen
Continue variabelen: kunnen alle waardes tussen min en max (bv 0 en 1) aannemen

1.3.2. Meetniveaus
Er bestaan verschillende soorten data
Soort bepaalt wat je ermee kan doen, welke grafiek je gebruikt,
= meetniveaus
Kwalitatieve
Nominaal
Iedere waarde is string
Vb: geslacht, afstudeerrichting, computermerk
Ordinaal
Iedere waarde is string
Er bestaat een natuurlijke ordening
Vb: Rangen in het leger, tevredenheidsscores (want 8 is niet dubbel zo
tevreden als 4)
Kwantitatieve data
Interval
Iedere waarde is een getal
Er is geen natuurlijk nulpunt
Vb. temperatuur in celcius (want 20 is niet dubbel zo warm als 10)
Ratio
Iedere waarde is een getal
Er is wel een natuurlijk nulpunt
Vb. temperatuur in Kelvin, aantal liter geproduceerde wijn,
1.3.3. Betrouwbaarheid
Metingen zijn niet noodzakelijk betrouwbaar
Punten op examen kunnen verschillen bij studenten met zelfde kennis
Lengtemetingen kunnen afwijken omdat persoon niet op zelfde manier gemeten
wordt
Meetinstrument is betrouwbaar als invloed van toevallige factoren geen (groot) verschil
geeft in resultaat
1.3.4. Validiteit
Metingen zijn niet noodzakelijk valide
Hoe meet je wiskundeaanleg
Hoe meet je assertiviteit
Een meetinstrument is valide als
Het meet wat het moet meten
Een andere meetwijze hetzelfde resultaat zou opleveren
Een niet-valide meetinstrument maakt systematische fouten
Weegschaal die verkeerd is
Test die in bepaalde omstandigheden w afgenomen

2. Frequentieverdelingen

Frequentie: voorkomen van datapunt in dataset


Moet minstens nominaal zijn

Frequentietabellen, kruistabellen
R: table()

2.1. Soorten frequenties

Absolute frequentie: het aantal


Relatieve frequentie: absoluut ten opzichte van het totaal aantal
Absolute cumulatieve frequentie (frequentie + vorige). Minstens orginaal
Relatieve Cumulatieve frequentie: absoluut cumulatief tov aantal

2.2. Klassen

Wanneer variabele minstens interval is en veel waarden bevat of continu is


Datapoints bij elkaar nemen
Elke klasse heeft een
Klassebreedte
Klassemidden
R: cut()
Hoeveel klassen?
Te weinig: weinig informatie
Te veel: onoverzichtelijk
Geen duidelijke regel
tussen 5 en 20
Root n

2.3. Grafieken
2.3.1. Taartdiagram
Bij
Nominaal meetniveau
Niet te veel verschillende waarden
Visueel > kwaliteit
R: pie()
2.3.2. Staafdiagram
Bij
Nominaal of ordinaal
Beter interpreteerbaar dan taart
R: barplot()
2.3.3. Histogram
Bij
Interval of ratio niveau
Continue variabelen
Lijkt op staafdiagram maar staven tegen elkaar aan
R: hist()
2.3.4. Frequentiepolygoon
Gebruik: zoals histogram
Lijnen tekenen tussen de toppen van klassen

Voeg waarden 0 voor en achteraan toe


R:
"freqpoly" <- function (x,...) { tmp=hist(x);lines(c(min(tmp$breaks),tmp$mids,
max(tmp$breaks)),c(0,tmp$counts,0),type="l") }
Freqpoly()

2.4. Percentielen
Relatieve plaats van datapunt in de dataset. Bijvoorbeeld het 95% percentiel: 95% van de data ligt
eronder, 5% erboven

3. Centrummaten
3.1. Modus

Waarde met de hoogste frequentie


Voordeel
Minstens nominaal meetniveau
Gemakkelijk te bepalen
Nadeel
Niet alle waarden worden gebruikt
Indeling in andere klassen kan ander resultaat geven
R: modus = function(x) { names(sort(table(x), T))[1] }

3.2. Mediaan

Minstens ordinaal niveau


Orden alle waarden, neem middelste waarde
R: median(x)
Voordelen
Vanaf ordinaal niveau
Niet gevoelig voor uitschieters
Nadelen
Niet alle waarden worden gebruikt
Moeilijk te gebruiken in berekeningen (geen duidelijke formule)

3.3. Gemiddelde

Vanaf intervalniveau
Som van alle waarden / aantal
R: mean(x)
Voordelen
Formule
Alle waarden worden gebruikt

3.3.1. Gewogen gemiddelde


Geef gewicht aan de verschillende datapunten
Weighted.mean(x)
3.3.2. Meetkundig gemiddelde
R: exp(mean(log(x)))

3.3.3. Voortschrijdend gemiddelde


Neem rij getallen en bereken telkens het gemiddelde van de laatste n getallen
3.3.4. Harmonisch gemiddelde
1/mean(1/x)

3.4. Uitschieters

Waarden die veel hoger of veel lager zijn dan de rest


Veel invloed op gemiddelde
Detecteren?
Groot verschil tussen mediaan en gemiddelde
Groot verschil met getrimd gemiddelde
Laat n hoogste en laagste waarden weg.
Groot verschil?
Mean(x, trim=0.05)

3.5. Verdelingen

Frequentieverdelingen kunnen verschillende vormen aannemen


Symetrisch: Modus = Mediaan = Gemiddelde
Links scheef: (lnr) Mediaan, gemiddelde, modus
Rechts scheef: (lnr) Modus, gemiddelde, mediaan

4. Spreidingsmaten
4.1. Bereik

Verschil tussen min en max waarde


Geeft spreiding aan, maar geeft niet zon goed beeld wanneer waarden niet uniform
verdeeld zijn

4.2. Kwantielen

Werkwijze
Rangschik getallen van klein naar groot
Verdeel in n gelijke stukken
Waarde op iedere grens is n-kwantiel
R: quantile(x, fractie)
N=4: Kwartielen
N=100: Percentielen
N=10: Decielen
Kwartielen worden vaak gebruikt om bereik te berekenen
R: summary(x)

4.3. Boxplot

Visualisatie van het bereik adhv kwartielen


R: boxplot(x)

4.4. Gemiddelde absolute afwijking

Methode om spreiding te meten

Bereken gemiddelde
Bereken het verschil tussen iedere waarde en het gemiddelde
Neem hiervan het gemiddelde
R: mean(x-mean(x)) uitkomst nul want heft elkaar op
R: mean(abs(x-mean(x)))
Nadeel: gevoelig voor uitschieters
Gebruik median
Median(abs(x-median(x)))
Nadeel: moeilijk rekenen met absolute waarde7

4.5. Variantie

Voordeel: continu afleidbaar


Nadeel: kwadraat

4.6. Stand111aardafwijking

Meest gebruikte spreidingsmaat

4.7. Variantie en standaardafwijking in een steekproef

Probleem: schatten de variantie en standaardafwijking van een populatie adhv een


steekproef
Eigenschap: variantie steekproef kleiner dan die van populatie
R: sd(x)

5. Kansen
5.1. Wat is een kans?

Experiment dat verschillende uitkomsten produceert ondanks zelfde beginsituatie


Bv. Gooi een dobbelsteen
Toch zijn er regelmatigheden in de resultaten als je veel metingen doet
Bepaalde waarden komen meer voor dan andere
Alle waarden komen ongeveer evenveel voor
Het gemiddelde van de waarden situeert zich rond een bepaalde waarde
In R 100 keer kop of munt gooien
throws = sample(0:1, 100, replace=TRUE)
g=0
for(i in 1:length(throws)) g[i] = mean(throws[1:i])
plot(g, type="l")
Verschillende interpretaties mogelijk
Resultaat uit afgelijnd experiment (trek een balletje uit een zak met 20 rode en 30
blauwe balletjes. Wat is een kans dat het een rood balletje is)
Veralgemening van het experiment naar populatie (van de 20 willekeurig geteste
iPads waren er 2 stuk. Hoeveel teruggebrachte iPads mogen we in de winkel
verwachten)
Kans van een individuele meting (een patint wil een operatie laten ondergaan. Wat
is de kans dat deze operatie zal slagen)

5.2. Verzamelingenleer en kansen


Todo, want ik snap er niks van

5.3. Kruistabellen en kansen

5.4. Rekenen met kansen


Todo, eerst 5.2 doen

6. Kansverdelingen
--todo
DEEL WEEK 4 TODO

7. Veel voorkomende kansverdelingen (w5)


7.1. De binomiaalverdeling
Is een model voor een experiment waarbij
Verschillende actereenvolgende waarden worden gemeten
Er zijn maar 2 uitkomsten mogelijk
Iedere uitkomst heeft een bepaalde waarschijnlijkheid
De vraag is hoeveel kans is er dat bij n metingen er x gelijk zijn aan y
WEEK 5 TODO

WEEK 6 OOK Todo

StatAn p4
7. Samenhang
7.1. Correlatie

Statistiek w interessant als we verbanden kunnen aantonen tussen variabelen.


Echter: niet noodzakelijk causaal (bv. Zakkenrollers en ijsjesverkopers)
Visueel verband bepalen kan met scatterplot: plot(datax, datay)
Echter: hoe sterk is dit verband
=> Correlatiecofficient (Pearson)
2 variabelen vergelijken (X en Y)
Zet ze beiden om naar Z-scores (gemiddelde 0, standaardafwijking 1)
Vergelijk Z-scores

Correlatie kan enkel berekend worden vanaf interval meetniveau


Voorbeelden:

Hoe interpreteren (afhankelijk van wetenschapsdomein). Zelfde waarden gelden


negatief
0: geen lineair verband
0 tot 0,2: nauwelijks verband
0,2 tot 0,4: zwak verband
0,4 tot 0,6 redelijk verband
0,6 tot 0,8 sterk verband
0,8 tot 1: zeer sterk verband
Lage correlatie:
Misschien is er een niet-lineair verband.
Misschien is de correlatie groter als je het bereik groter maakt
Hoge correlatie
Zijn de 2 variabelen geen andere naam voor hetzelfde?
Is de ene variabele berekend adhv de andere
Misschien is de correlatie lager als je het bereik van X groter maakt
Berekening: R: cor(datax, datay)

7.2. Lineaire regressie

Als er een lineair verband is tussen 2 variabelen, is de ene dan te voorspellen adhv de
andere?
Proberen een lijn te tekenen die het best door de scatterplot gaat
Fout: gemiddelde afstand (verticaal gemeten) tussen punten en de lijn
Vergelijk: standaardafwijking: gemiddelde afstand tussen punten en gemiddelde
Getallen kwadrateren om positieve getallen te verkrijgen
Regressielijn is benadering van de werkelijkheid

Gem. afstand is dus gegeven door:


Nu a en b zoeken zodat A minimaal is (techniek van de kleinste kwadraten)

B = slope, richtingscofficient:

A = intercept:
Zijn afhankelijk van gemiddelde en standaardafwijking
Regressielijn is maar een benadering voor de werkelijkheid
Hoe goed is deze benadering?
Antwoord: betrouwbaarheidsinterval op de fout (fout = werkelijke waarde voorspelde
waarde). Fout heeft een standaardafwijking

Se = standaardschattingsfout
Als je dus een waarde voor xi berekent, dan weet je 95,5% zeker dat de echte waarde
tussen volgende grenzen zit:

Variantie op de fout:
Correlatie = 0
Variantie op de fout is dezelfde als die op Y
De regressie kan dus niks voorspellen
Correlatie = 1
Variantie op fout is 0
De regressie voorspelt perfect de waarde
Kwadraat van correlatie is dus het percentage van Y dat wordt verklaard door het model
Dit wordt meestal aangeduid met R
R
Eerst plotten (datax, datay)
Reg = lm(y~x)
Y tilde X !!!
Abline(reg)
a=reg$coefficients[1]
b=reg$coefficients[2]
summary(reg) met se (residual standard error), R (multiple R squared)

se=sqrt(deviance(reg)/df.residual(reg))

8a. Tijdsgebonden gegevens

Vb: evolutie van bevolking, evolutie van aandelenkoers


Interesse: evolutie of trend van de data
Vb: aandelenkoers Apple
R: aapl=read.csv(AAPL.csv)
Plot(rev(aapl$Close)) rev omdat ge de gegevens moet omdraaien.

8b. Intermezzo: Grafieken

Nulpunt veranderen (bv. Enkel laatste maand)


Plot(data, ylim=c(, ))
X-as moet tijd weergeven
Plot(as.Date(aapl$Date), aapl$Close)
Grafiek moet zichzelf uitleggen
Titel
Assen benoemen
Plot(x, y, main=, xlab=, ylab=)
Lijnen vs punten
Tot nu toe : punten
Lijnen ? data tussen punten niet gekend
=> lijnen en punten tekenen
Plot() type parameter (b || l)
Legende
Eerste dataset toevoegen
Tweede dataset toevoegen met points() of lines()
Legende toevoegen met legend()
Logaritmische schalen
Let op: afstand tussen 1 en 10 is nu even groot als tussen 10 en 100
Plot() optie log=y
Bijkomende informatie
Lijnen met segments(x0, y0, x1, y1)
Pijlen met arrows(x0, y0, x1, y1)
Tekst met tekst(x, y, tekst)

8c. Filters
8c.1. Laagdoorlaatfilters

Vb: opbrengst zonnepanelen


Data bestaat uit signaal (hoeveelheid zon) en ruis (bewolking)
Ruis = willekeurig met normaalverdeling
Gemiddelde = 0
Standaardafwijking = grootte van de ruis

Signaal = lage frequentie / ruis = hoge frequentie


Signaal met enkel ruis: gemiddelde 0
=> voortschrijdend gemiddelde
Gemiddelde van waarneming 1 tot n
2 tot n+1
3 tot n+2

Praktisch: r: zon.filtered=filter(zon, rep(0.1, 10))

8c.2. Hoogdoorlaatfilters

Ruis behouden, signaal wegfilteren?


=> Neem waarde en trek er volgende waarde van af
R: ruis=filter(zon, c(1, -1))
Mean(ruis)
Sd(ruis)

8c.3. Fourier transformaties

Signalen bestaan uit golven. Een golf heeft 3 eigenschappen:


Frequentie: aantal golven per seconde
Amplitude: hoogte van de golf
Fase: offset van de golf
Overzicht van de golven die voorkomen in een signaal = spectrum
X-as bevat frequenties
Y-as bevat amplitudes

Berekenen:
Fast Fourier Transform (FTT)
Signaal bestaat uit samples
Aantal samples = n
Samples zijn aan een bepaalde frequentie gemeten (f)
Samples zijn gedurende een bepaalde tijd gemeten (T = n/f)
R: spectrum=(Mod(fft(samples))/(n/2))[1:(n/2)]
Barplot(spectrum)
FFT kan n/2 golven detecteren
Hoe spectrum plotten?
Barplot: als er niet te veel frequenties zijn
Lijnen als er veel frequenties zijn
X-as zou frequentie moeten bevatten

Frequenties= c(0 n/2-1))/T


Plot(frequenties, spectrum)
Toepassing: meten kwaliteit telefoonlijn: signaal versturen met alle frequenties tussen 4000
Hz en 1024 KHz met stappen van 4000 Hz en kijken wat er aankomt.

9a. Interpolatie

Stel: weinig, maar accurate metingen => kan ik curve maken die door punten gaat, kan ik
waarden voorspellen die tussen gemeten waarden liggen
Voorbeeld:

9a.1. Lineaire interpolatie

Wat is de juiste temperatuur op 100mm in de muur


Zoek juiste segment (hier: 2)
Sel vgl op van de lijn (y=-0,016*x+17,66)
Evalueer: y=16,06
Algemeen:
Geg: n punten (xi, yi)
Gevr: waarde op positie x

R: f=approxfun(x,y) f(100)

9a.2. Lagrange interpolatie

Lineaire regressie benadert met rechte lijnen. Soms zoeken we kromme die door punten
gaat. Polynomen zijn krommen. Door n punten gaat juist 1 polynoom van graad n-1 (=door 2
punte gaat juist 1 rechte (=polynoom graad 1))

dus, met 3 punten:

In R

Geen ingebouwde functie: lagrangefun=function(x,y) {


function(xx) { result=0;for(i in c(1:length(x))) {p=y[i];
for(j in c(1:length(x))) {if (j!=i) p=p*(xx-x[j])/(x[i]x[j]);};result=result+p;};result}}
Gebruik: f=lagrangefun(x,y) f(100)
Echter: wordt niet zo vaak gebruikt

9a.3. Spline interpolatie

Mengeling tussen lineaire en lagrange interpolatie


Zoek polynoom van graad 3 tussen elke 2 punten
Laat polynomen mooi aansluiten (raaklijnen moeten gelijk zijn)
=> wat gebruikt wordt in vector-tekeningen
R: f=splinefun(x,y) f(100)
Voorbeeld : server-room waar elk uur temperatuur wordt gemeten. Thermometer valt plots
uit, pas na 6 uur gerepareerd. Wat was de temperatuur hiertussen?

9b. Extrapolatie

Waarden zoeken die buiten de originele waarden liggen (bv. Om te voorspellen)


Vereist voorkennis over het model
Hoe verder je extrapoleert, hoe groter de fout die je maakt

9b.1. Spline extrapolatie

Bereken spline door punten, laat verder lopen

9b.2. Lineaire extrapolatie

Gebruik lijn door laatste 2 punten


Of regressie (op alle punten || op laatste n punten)

9b.3. Extrapolatie met gegeven model

Gegeven: model waaraan de data verondersteld wordt te voldoen


Model = formule met parameters
2 manieren
Zoek parameters zodat functie door punten gaat
Zoek parameters zodat functie zo goed mogelijk door punten gaat (regressie)

10. Beslissingsbomen

Informatie voorspellen
Tot nu toe adhv bekende variabelen (regressie, interpolatie, extrapolatie)
Maar: wat als je de variabelen niet kent?
Wat als je wil weten van welke variabelen iets afhankelijk is
Voorbeeld: adeater
Webpaginas bevatten images
Sommige images zijn reclame, andere niet
Kan ik automatisch detecteren wat reclame is?
Mogelijk oplossing
Bepaal verschillende parameters (input voor algoritme)
Maak tabel die parameters mapt op een boolean
Algoritme doorloopt tabel en beslist
Problemen
Weten niet welke parameters we nodig hebben
=> we nemen er dus heel veel (hier: 1558)
Tabel wordt gigantisch groot
We kunnen niet alle gevallen opsommen
Oplossing: creer regels. Hoe regels vinden? Handmatig is te moeilijk
Simpeler voorbeeld: simpsons
Bekend: haarlengte, gewicht, leeftijd. Wanted: geslacht
=> In klasses zetten

Regels opstellen

AI

Hoe maak je dit?


Kies kolom
Maak node voor deze kolom
Maak pijlen naar kind-nodes voor iedere mogelijke waarde van deze kolom
Maak per pijl tabel waarin enkel die rijen voorkomen met de gekozen waarde
Doe het algoritme recursief voor alle kinderen
Als alle rijen van de tabel eenzelfde uitkomst hebben, stop dan
De keuze van de kolom is belangrijk
Als je andere kolommen kiest kan de boom ingewikkelder worden
We willen zo eenvoudig mogelijke boom

10.1. Het ID3 algoritme

Welke kolom selecteren?


Kolom die je het meeste onderscheid zal geven. Dit noemt men de information gain

n= aantal rijen in de tabel


p = aantel rijen in de kindtabel
E(tabel) = entropie

Hierbij nemen we iedere mogelijke waarde van de te voorspellen waarde (de


laatste kolom)
p = aantal rijen met een bepaalde te voorspellen waarde
n = totaal aantal rijen in de tabel

R: niet ingebouwd. Functie-file ID3.r op BB


ID3(data)
calculateEntropy(data)
calculateGain(data, kolomNummer)
WEKA
Tab preprocess
Open csv
Tab classify
Kies ID3
Start
Aandachtspunten met ID3
Alle waarden moeten nominaal zijn
Continue waarden moeten gesplitst worden in categorien
In de praktijk zijn waarden soms niet gekend (samenvoegen databanken): ID3 kan
hier niet mee overweg
Vaak veel tijd nodig om data in juist formaat te zetten
Alternatief: C4.5

11. Clusteranalyse

Een cluster is een aantal rijen van een tabel die bij elkaar horen of gelijkaardig zijn
Rij = punt in een n-dimensionaal vlak
2 rijen zijn gelijkaardig als de punten dicht bij elkaar liggen. Afstand moet klein zijn.
Hoe meet je de afstand tussen 2 punten?
Euclidisch: stelling van pythagoras

afstand f tussen punten a(va, wa, xa, ya, za) en b(vb, wb, xb, yb, zb)
f= va-vb2- wa-wb2.

algemene vorm met punten a(c1a, c2b, ) en b(c1b, c2b, ) elks met n cordinaten
f= i=1n(cia-cib)2
Probleem: de variabelen hebben misschien een andere verdeling
Oplossing: deel afstanden voor variantie (=gestandaardiseerde Euclidische afstand)
f= i=1n(cia-cib)2i2

Opgelet: variantie van ALLE waarden, niet enkel van punten a en b


Manhattan (taxi) afstand: meten hoe ver je moet rijden
f= i=1ncia-cib
Wat als de variabele geen getal is?
Vervang mogelijke waarden door een getal
Nominaal: vermijden (je kan geen afstand tussen nominale variabelen
definiren)
Ordinaal: maak er een interval meetniveau van
Ofwel decimale waarden, ofwel bitpatronen
Interval: gebruik manhattan afstand

11.1. Clusters zoeken


11.1.1. K-means
Gaat op zoek naar n (gegeven) clusters
Is gebaseerd op Kohonen netwerk
Neurale netwerken
Genspireerd door werking van onze hersenen
Gebruikt meestal euclidische afstand
Algoritme
Selecteer n willekeurige punten (centroids)
Herhaal
Associeer ieder punt van de dataset met de centroid die het dichtste bij ligt
(zo maak je n clusters)
Bereken per cluster het midden en vervang de centroid door deze nieuwe
waarde
Totdat de centroids niet meer veranderen
R
k = kmeans(d, 4) n is 4
plot (d, col=k$cluster)
points(k$centers, pch=10, cex=3, col=6, lwd=2)
WEKA
kies SimpleKMeans
kies aantal clusters
kies start
rechtsklik op resultaat en kies Visualize cluster assignments
Opmerkingen
Je moet op voorhand weten hoeveel clusters je zoekt

Plaats van de centroids in begin kan heel bepalend zijn

11.1.2. Hirarchisch
Als je op voorhand niet weet hoeveel clusters je zoekt
Maak een boomstructuur die waarden groepeert (dendrogram)

Begin onderaan. Ieder punt is een cluster met 1 element erin


Herhaal
Zoek de 2 clusters die het dichtst bij elkaar liggen
Voeg deze clusters bij elkaar in een hoger niveau
Tot er maar 1 cluster overblijft
Je moet dus de afstand tussen 2 clusters kunnen berekenen
Afstand tussen middelpunten
Min afstand tussen punten
Max afstand tussen punten
R
hc= hclust(dist(d))
plot(hc)
c=cutree(hc, h=3)
plot(d, col=c)

11.2. Combinatie clusteranalyse en beslissingsbomen

Clustering geeft eigenlijk een label aan iedere rij van een table
Voeg kolom toe met dit label
Zoek nu een beslissingsboom om te weten te komen welke rij in welke categorie valt
Voorbeeld (R en WEKA): 4 clusters, bewaar als 3e kolom. C4.5 voor beslissingsboom
k = kmeans(d, 4)
c= k$cluster
c=paste(C, c, sep=) plaatst C voor elke waarde in c
f=data.frame(d, c) maakt een nieuwe dataframe van d en c
write.csv(f, voorWeka.csv, row.names=F) geen first column met ids

You might also like