• No se han encontrado resultados

Automatització d'algorismes de clustering i aplicació a dades mèdiques

N/A
N/A
Protected

Academic year: 2021

Share "Automatització d'algorismes de clustering i aplicació a dades mèdiques"

Copied!
81
0
0

Texto completo

(1)

Automatització d’algorismes de clustering

i aplicació a dades mèdiques

TREBALL DE FINAL DE GRAU

Grau en enginyeria informàtica

Pau Castro Sampol

Directors: Ricard Gavaldà i Jaume Baixeries

Septembre 2017  

(2)

ÍNDEX

1.   CONTEXT  ...  4  

1.1 Introducció ... 4

1.2   Objectius del projecte  ...  5  

1.3   Actors implicats  ...  6  

1.3.1   Desenvolupador  ...  6  

1.3.2   Tutors del projecte  ...  6  

1.3.3   Usuaris  ...  6  

2.   Estat de l’art  ...  7  

2.1      Tècniques de clustering  ...  7  

2.2      Algoritmes  de  clustering  ...  8  

3.   Definició  de  l’abast  ...  10  

3.1  Abast  ...  10  

3.2 Possibles obstacles  ...  11  

3.2.1 Errors en l’entrada de dades ... 11

3.2.2 Errors en les dades ... 11

3.2.3 Temps d’execució ... 11

3.2.4 Errors en el codi ... 12

3.4 Eines per al desenvolupament  ...  12  

4.   Planificació temporal  ...  13  

4.1. Programa ... 13

4.2. Pla de projecte ... 13

4.2.1. Planificació del projecte – Fita inicial ... 13

4.2.2. Anàlisi i disseny del projecte ... 14

4.2.3. Descripció de les tasques ... 14

4.3. Duració aproximada ... 16  

4.4. Recursos ... 17  

4.4.1. Hardware ... 17

4.4.2. Software ... 17

5.   Gestió econòmica i sostenibilitat  ...  18  

5.1. Gestió econòmica ... 18

5.1.1. Consideracions i comentaris ... 18  

5.1.2. Pressupost de recursos humans ... 18

5.1.3. Pressupost de hardware ... 19   5.1.4. Pressupost de software ... 19 5.1.5. Despeses indirectes ... 19 5.1.6. Pressupost total ... 20 5.1.7. Control de desviacions ... 20 5.2. Àrea social ... 20 5.3. Àrea ambiental ... 21  

6.   Introducció a la Mineria de dades  ...  22  

6.1. Estructura de l’anàlisi de dades ... 22

6.1.1. Selecció i anàlisi del conjunt de dades ... 22

6.1.2. Preparació del conjunt de dades ... 22

6.1.3. Aplicació de les tècniques de mineria de dades ... 23

7.   Anàlisis de clustering  ...  25  

7.1. Utilitats del anàlisi de clustering ... 25  

(3)

9.   Estudi dels algorismes d’agrupació  ...  29  

9.1. Algorisme de K-means ... 29

9.2. Algorisme Hierarchy ... 30  

10.   Estudi del nombre de grups a dividir les dades  ...  33  

10.1. Elbow method ... 33  

10.1.1. Implementació ... 35

10.2. Silhouette ... 37

10.2.1. Implementació ... 39

11.   Estudi de com valorar els resultat obtinguts pels algorismes  ...  41  

11.1. Silhouette ... 41

11.2. Dunn Index ... 42  

11.3. Davies-Bouldin ... 42

11.4. Tria del millor clustering ... 43

12.   Desenvolupament del software  ...  44  

12.1. Diagrama UML ... 44

12.2. Explicació de les classes ... 44

12.2.1. ControladorHierarchy ... 44 12.2.2. ControladorKmeans ... 45 12.2.3. AvaluadorHierarchyElbow ... 46 12.2.4. AvaluadorKmeansElbow ... 46 12.2.5. Silhouette ... 47 12.2.6. Davies-Bouldin ... 48 12.2.7. Dunn ... 49 12.2.8. Avaluadors de bondat ... 49 12.2.9. Controlador general ... 49 12.2.10. Avaluador general ... 50 12.3. Pseudocodi elbowmethod ... 50 12.4. Pseudocodi silhouette ... 51  

13.   Problemes amb el software  ...  52  

14.   Jocs de prova  ...  54  

14.1. Joc de prova 1 ... 54

14.1.1. Anàlisi de les dades ... 54

14.1.2. Mètodes de selecció del nombre de clústers 1 ... 55

14.1.3. Mètodes de selecció del nombre de clústers 2 ... 57

14.1.4. Mètodes de selecció del nombre de clústers 3 ... 59

14.1.5. Conclusions ... 62

14.2. Joc de prova 2 ... 62

14.2.1. Anàlisi de les dades ... 62

14.2.2. Mètodes de selecció del nombre de clústers ... 64

14.2.3. Conclusions ... 66

14.3. Joc de prova 3 ... 67

14.3.1. Anàlisi de les dades ... 67

14.3.2. Mètodes de selecció del nombre de clústers 1 ... 68

14.3.3. Mètodes de selecció del nombre de clústers 2 ... 71

14.3.4. Conclusions ... 75

15.   Conclusions  ...  76  

16.   Bibliografia  ...  78  

(4)

1. CONTEXT

 

1.1

Introducció

La finalitat del present treball és el desenvolupament d’una eina d’anàlisi per identificar patrons de comportament en conjunt de dades mitjançant tècniques de mineria de dades, de l’anglès data mining. Es treballarem amb dades mèdiques, i així posar a disposició de metges una eina per el anàlisis de les dades dels seus pacients.

El data mining és el procés de computació per trobar patrons en un conjunt gran de dades mitjançant algoritmes d’anàlisi i altres eines. A partir de l’anàlisi de les dades es poden treure un gran nombre de patrons que faciliten la presa de decisions i la millora del rendiment dels processos.

L’èmfasi en aquest treball són els algoritmes de clustering, una part del data mining. El clustering segmenta les dades en subgrups, on els integrants de cada grup són similars entre si i diferents de les dades dels altres grups.

En l’àmbit de la medicina, podem disposar d’un gran volum d’informació sobre els pacients, a la que aplicant tècniques de data mining és possible trobar patrons de comportament que faciliten arribar a conclusions en salut. Atès que les dades de salut dels pacients són altament confidencials, no poden ser transferides fora de l’entorn mèdic, i com que, en general, els metges no tenen els coneixements tècnics suficients per utilitzar les tècniques de data mining, aquests estudis no es realitzen.

(5)

L’objectiu del treball és realitzar una aplicació que automatitzi el procés de clustering, amb la finalitat que els metges tinguin més facilitats alhora de poder poder aplicar tècniques de data mining amb les dades dels seus pacients.

Aquest projecte és una part d’un projecte més gran que el duu a terme el grup d’anàlisis del registres sanitaris LARCA [7], que col·labora amb diferents institucions de salut de Catalunya. El projecte consisteix, entre altres coses, en la construcció de clústers dels pacients; el usuari finals són normalment doctors amb poc coneixements de data mining. Les eines que proporcionem als usuaris han de poder-les utilitzar sense coneixements tècnics dels algorismes de clustering.

1.2 Objectius del projecte

 

L’objectiu principal del projecte és el desenvolupament d’una eina orientada a automatitzar les anàlisis de clustering i que els metges puguin realitzar estudis de diferent malalties a partir de les dades mèdiques de pacient i identificar patrons de comportament amb facilitat. Per aconseguir aquest resultat, hem desenvolupat diverses funcionalitats que faciliten l’anàlisi de les dades.

Les principals funcionalitats són:

1. Desenvolupar un mòdul que llegeixi les dades i les transformi al format que més adient per aplicar els algoritmes necessaris, per a cada grup de dades. 2. Desenvolupar un mòdul de tractament de les dades per a detectar i corregir valors que siguin incorrectes. Com per exemple: manca de valors en alguns casos, valors que siguin constants, errades en la entrada de dades.

3. Aplicar diversos algoritmes de clustering amb diferents paràmetres.

4. Analitzar els resultats amb algoritmes que calculen la bondat dels clústers, amb l’objectiu de trobar quins són els algoritmes de clustering que donen els resultats millors.

(6)

5. Desenvolupar una interfície gràfica senzilla i intuïtiva per als metges. L’aprenentatge de la interfície ha de ser ràpid per facilitar la feina.

6. Validar els resultats de la solució amb diversos jocs de proves i treure’n conclusions.

1.3 Actors implicats

 

El desenvolupament d’aquets projecte requereix la participació de diferents perfils:

1.3.1 Desenvolupador  

Totes les tasques de desenvolupament de l’eina programa han estat realitzades per Pau Castro Sampol, que ha comptat amb l’ajut dels tutors del treball per a la resolució de dubtes i problemes.

1.3.2 Tutors del projecte  

Els tutors d’aquest projecte han estat en Ricard Gavaldà Mestre i en Jaume Baixeries Juvillà que supervisaven l’acompliment del calendari estipulat i l’assoliment dels objectius marcats en el projecte. També han resolt els dubtes i problemes que han sorgit en el decurs del desenvolupament del treball de final de grau i han guiat l’estudiant a l’hora de desenvolupar el codi.

1.3.3 Usuaris  

Els usuaris són els metges o personal dels centres de salut a qui va dirigit el programa i que han plantejat els requisits en base a les seves necessitats d’anàlisi i provaran la solució en el conjunt de dades de pacients amb què treballen habitualment. En principi, es treballarà amb uns usuaris pilot amb qui ja s’ha arribat a un acord.

(7)

2. Estat de l’art

 

2.1      

Tècniques de clustering

 

Les anàlisis de clustering, són una part de la mineria de dades (Data mining), que formen part dels camps de l’estadística i de la computació i en els que s’analitzen grans volums de dades per a trobar patrons amb l’objectiu d’extreure conclusions.

La mineria de dades es fa servir en diferents àmbits, moltes empreses utilitzen les tècniques de la mineria de dades per millorar el rendiment dels processos. Posem com a exemple el cas dels supermercats que utilitzen aquets patrons per a saber quins productes estan relacionats a l’hora de comprar. Un exemple de productes relacionats en el moment de la compra en els supermercats són les cerveses i les patates fregides: els estudis realitzat pels supermercats han arribat a la conclusió que molta gent que compra cervesa, també compra patates fregides.

El principal problema del data mining és que es necessiten coneixements avançats en estadística i computació la qual cosa el fa inaccessible per a molta gent.

En el nostre treball, volem que a partir d’una interfície d’usuari senzilla, intuïtiva i molt visual, els metges puguin trobar patrons de comportament per certes malalties utilitzant els algoritmes de clustering, sense necessitat de tenir uns coneixements avançats de data mining.

(8)

Actualment existeixen molta varietat de algorismes de clustering, però tots ells necessiten d’un anàlisi per a poder extreure conclusions. El nostre treball vol automatitzar tot aquest anàlisi per a reduir els costos de temps i personal, i mostrar els resultats de les anàlisis per que els usuaris puguin extreure conclusions sense necessitat de grans coneixements d’estadística i informàtica.

2.2      Algoritmes  de  clustering  

Els algoritmes de clustering o agrupament, creen conjunts de dades d’acord amb uns criteris. Aquests criteris són, en general, la similitud o la distància. Aquesta similitud és donada, normalment, a partir de unes funcions de distància. Els grups que es formen un cop aplicat l’algorisme, generalment, comparteixen unes certes propietats que permeten extreure conclusions.

L’algorisme de clustering més conegut és el k-means. L’objectiu principal de l’algorisme és dividir les dades en k grups. L’algorisme crea una taula en dues dimensions, on cada mostra és un punt en la taula i l’algorisme troba k punts, que es diuen centres. Cada una de les mostres pertany al grup del centre més proper.

(9)

 

En el nostre programa s’utilitzaran diversos algoritmes amb diversos factors (en el cas del k-means, diferents k) per a poder trobar quin de tots els resultats obtinguts agrupa millor les dades.

Cada algorisme necessita uns paràmetres alhora de realitzar els agrupaments. En general aquests són: La funció de distància (nosaltres sempre utilitzarem la distància Euclidiana) i el nombre de clústers en què volem dividir les dades.

Un cop executat cadascun dels algoritmes d’agrupació, s’avaluaran tots els grups resultants amb diferents mètodes. Un cop els algoritmes de clustering

hagin donat diversos resultats, s’haurà de calcular la bondat dels grups. Aquesta bondat serà calculada amb uns algorismes de validesa per a saber quin agrupament és el més óptim. Finalment caldrà triar quin algorisme agrupa millor les dades per a mostrar els seus resultats.

L’aplicació haurà d’aplicar els següents processos en aquest ordre: prepocés, provar algorismes, avaluar resultats i mostra de resultats.

(10)

3.

Definició  de  l’abast  

 

3.1  Abast  

Per a trobar la millor solució possible cal fixar uns passos abans de començar l’elaboració del codi.

Primer s’han d’estudiar les dades que els metges introduiran en el programa, i com aquestes poden ser tractades per a elaborar un bon algorisme de

clustering.

Un cop analitzades les dades, s’han de transformar i modificar de tal manera que siguin molt més útils per treballar. A més, s’han d’eliminar les dades errònies o que puguin portar algun tipus de problema als algoritmes.

Un cop les dades ja han estat tractades, hem de trobar quins són els paràmetres que millor s’adapten a cada algorisme per a reduir el nombre d’execucions d’aquests. Un cop tenim totes les solucions, hem d’utilitzar els algoritmes de validació per a trobar quina solució és la més bona.

Un cop trobada la millor solució s’han de mostrar uns gràfics, molt fàcils d’entendre, amb els resultats aportats pel clustering.

Per últim, caldrà construir una interfície gràfica amb la qual els metges podran treballar de forma fàcil i ràpida.

(11)

3.2 Possibles obstacles

Ara analitzarem els possibles obstacles que puguin sorgir en l’elaboració del projecte, i també quines són les solucions que podríem utilitzar.

3.2.1 Errors en l’entrada de dades

Donat que l’entrada de dades la farà gent que probablement no tingui uns grans coneixements informàtics, cal prevenir la possibilitat que tinguin problemes a l’hora d’introduir les dades. Per a solucionar això, marcarem unes pautes a seguir en el moment d’entrar les dades, també es faran preguntes al usuari a través del programa per assegurar que tot va correctament.

3.2.2 Errors en les dades

Per a tractar aquestes situacions, en la majoria de casos eliminarem les dades incorrectes per a tractar-les com a nul·les. També eliminarem les dades que són o molt superiors a la majoria, o molt inferiors.

3.2.3 Temps d’execució

Com el nostre programa ha de fer servir diversos algoritmes que tenen gran cost de temps, és molt possible que el temps d’execució del programa final sigui elevat. Per sort, la nostra prioritat no és que el programa sigui molt ràpid, busquem que el programa sigui entenedor i visual més que ràpid.

(12)

3.2.4 Errors en el codi

És possible que durant el desenvolupament del projecte es produeixin molts errors en la implementació del codi. Aquets errors s’hauran d’anar controlant mitjançant proves durant el desenvolupament i test per a veure on poden estar aquets errors.

Per verificar el funcionament del programa i dels algorismes que implementarem, farem proves amb data sets.

3.4 Eines per al desenvolupament

 

Per a desenvolupar el programari que se’ns demana, hem utilitzat el llenguatge de programació Python 2.7, un llenguatge de codi obert molt fàcil d’aconseguir. L’entorn de treball serà un Mac personal de sobretaula. Utilitzaré un programari que es diu Anaconda que serveix per a programar amb Python, que ens permet editar, compilar i executar el codi de python de forma sencilla. Hem decidit programar en aquest llenguatge ja què la majoria de projectes en l’àmbit de les dades sanitàries al grup LARCA[7] està implementat principalment en python, i d’aquesta forma es podrà reutilitzar el codi d’aquest treball.

També hem utilitzat diverses llibreries en les quals molts algoritmes ja venen implementats. Aquestes llibreries són en general aquestes dues: sklearn i

scipy.

Per a poder salvar el codi en línia he utilitzat el servei que ofereix Dropbox, que permet l’emmagatzemament del codi per internet. L’aplicació és privada, per tant ningú podrà veure el codi si no ho permeto jo.

(13)

4. Planificació temporal

 

4.1. Programa

 

La duració inicial del projecte era de 4 mesos aproximadament, però per problemes de temps el projecte va començar el 13 de Febrer de 2017 i acaba el 23 d’ Octubre d’aquest mateix any.

Els problemes amb els temps han sigut donats per una mala organització de temps de part meva i també, la dimensió del treball que esperava inicialment no era tant gran com la real.

4.2. Pla de proj

ecte

En aquest apartat, explicarem les diferents etapes del projecte.

4.2.1. Planificació del projecte – Fita inicial

Aquesta part del projecte és la que es va realitzar en l’assignatura de GEP i han estat actualitzades per fer la redacció d’aquesta memòria. Està dividida en les següents parts:

1. Definició de l’abast 2. Planificació temporal

3. Gestió econòmica i sostenibilitat 4. Contextualització i bibliografia

(14)

4.2.2. Anàlisi i disseny del projecte

En aquesta part del projecte, hem analitzat detalladament i especificat quin és el millor disseny final.

Durant el anàlisi hem fixat quins són els objectius que volíem assolir amb aquest projecte, hem estudiat quins són els requisits i les funcionalitats que volíem del projecte. També hem estudiat els diferents algorismes que volíem utilitzar, el seu funcionament, i les diferents forma d’avaluar la seva bondat. Pel que fa al disseny, hem creat una petita arquitectura del software, que conté les diferents connexions que té el nostre programa final.

4.2.3. Descripció de les tasques

Per a la realització del projecte hem definit els objectius a fer durant períodes curts de temps, on hem tingut en compte les possibles desviacions o problemes que puguem tenir. També hem definit unes tasques més globals que tenen una durada més llarga, i que hem assolit mitjançant les tasques setmanals.

Ara definirem les tasques a seguir en ordre. Aquestes tasques estan dividides en tres fases, una primera fase d’anàlisi, una segona de disseny del software i l’última fase d’implementació i proves. Per la dependència entre algunes tasques, el ordre és important en el procés del projecte. Tot seguit definirem les tasques genèriques:

1. Realitzar la fita inicial.

2. Configuració de l’entorn de treball (PC, software de desenvolupador, instal·lació d’editors).

(15)

4. Aplicar integrar els algorismes de les llibreries i adaptar-los per al nostre programa.

5. Construir una eina que valori i esculli el millor resultat dels algoritmes anteriors.

6. Creació d’una interfície gràfica per al programa.

7. Executar el programa amb diversos data sets, extreure resultats i conclusions.

(16)

4.3. Duració aproximada

Tasca Duració aproximada (h)

Fita inicial 90

Anàlisi i disseny 30

Configuració de l’entorn 10

Creació de l’eina de llegir dades 50 Aplicar algoritmes de clustering 130 Construcció d’eina d’avaluació i selecció 100 Construcció de la interfície 80 Experimentació 20 Redacció de la memòria 40 Total 550

(17)

4.4. Recursos

Per a poder realitzar el projecte són necessaris diferents eines de software i de hardware. Aquí detallaré quines eines utilitzo.

4.4.1. Hardware

Les eines hardware que utilitzarem són:

• Mac Mini 2012. • Dell XPS L502X 4.4.2. Software

Les eines software que utilitzarem són:

• Microsoft Office 2016 • Anaconda

• Python

• Dropbox versió gratuïta • Github

(18)

5. Gestió econòmica i sostenibilitat

5.1. Gestió econòmica

5.1.1. Consideracions i comentaris

 

Per a poder desenvolupar aquest projecte, utilitzarem tots els elements que hem anomenat en els lliuraments anteriors, que tenen un cost. Per a poder saber el cost total del projecte, farem una estimació del cost del projecte tenint en compte recursos humans, hardware, software i costos indirectes.

Aquestes dades són les estimacions que vàrem realitzar en l’assignatura de gep.

El pressupost el calcularem a traves de les tasques representades en el diagrama de Gantt.

5.1.2. Pressupost de recursos humans

 

Aquest projecte serà portat a terme per una sola persona que haurà de complir amb els 4 rols presents al projecte: cap de projecte, dissenyador, enginyer de software i tester. En la següent taula mostrarem el nombre d’hores que caldran dur a terme en cada tasca i el seu valor econòmic:

Rol Hores Preu per hora Preu total

Cap de projecte 100 50 5000€

Dissenyador 60 35 2.100€

Programador 290 35 10.150€

Tester 60 30 1.800€

(19)

5.1.3. Pressupost de hardware

 

Per a poder dur a terme aquets projecte, necessitem uns certs elements de hardware per a realitzar les tasques. Augmentarem aquest pressupost amb 500€ per a possibles reparacions dels dispositius. Calcularem que el temps que ho utilitzarem seran aproximadament 6 mesos.

Producte Preu Unitats Vida útil Amortització

Mac Mini 500€ 1 5 anys 50€

Dell 650€ 1 5 anys 65€

Total 1.150€ 115€

5.1.4. Pressupost de software

 

Les eines de software que seran utilitzades durant les tasques del projecte són les següents:

Producte Preu Unitats Vida útil Amortització

Microsoft office Mac 270€ 1 3 anys 45€

Anaconda 0€ 1 -- Python 0€ 1 -- Dropbox 0€ 1 -- Github 0€ 1 -- Total 270€ 45€ 5.1.5. Despeses indirectes  

En tot projecte d’informàtica apareixen també algunes despeses indirectes, que en aquest cas seran el ús de l’electricitat i paper.

Producte Preu Unitats Cost aproximat

(20)

Paper 5€/pack 1 pack 5€

Total 280€

5.1.6. Pressupost total

 

Finalment, sumarem totes les parts del pressupost i tindrem un cost estimat del projecte.

Concepte Cost aproximat

Recursos humans 19.050€ Hardware 115€ Software 45€€ Costos indirectes 280€ Total 19.490€ 5.1.7. Control de desviacions  

La principal causa de desviació que pot sorgir és la desviació temporal en alguna de les tasques del projecte. Per tal d’intentar compensar aquestes desviacions, ajustarem les tasques del diagrama de Gantt per així acabar el projecte en el temps pactat, i que les desviacions de pressupost en recursos humans siguin els mínims.

En el cas que es necessiti més pressupost perquè algun del material es trenqués, el pressupost no variaria en grans quantitats. Fent una estimació del 5% són uns 1000 €.

5.2. Àrea social

 

Aquest projecte té el objectiu de contribuir molt en el àmbit social, ja que vol ajudar a la medicina a millorar en el tractament i en els seus costos.

(21)

Aquest projecte pot ser de gran ajuda per a molts científics i metges que volen trobar patrons en les malalties. Per tant aquest treball vol incidir en un dels sector més importants, que és el de salut, per a facilitar la feina a metges i científics. Esperem que amb aquest projecte es pugui avançar en la construcció de guies clíniques més ajustades a la realitat de les malalties mèdiques, i que en un futur tingui una gran importància.

5.3. Àrea ambiental

 

En l’àmbit ambiental, aquest projecte no té un gran impacte ja que és un projecte només de software. Per tant les úniques despeses que afecten en el medi ambient són les indirectes, és a dir la llum i el paper, que per aconseguir-les, perjudiquen el medi ambient.

Per altre banda, estan la construcció dels ordinadors, que alguns dels seus elements poden tenir alguns conflictes ètics en alguns països. Alguns materials tant d’ordinadors com de mòbils han de ser portats de països estrangers i pot haver-hi certs conflictes en aquests països.

(22)

6. Introducció a la Mineria de dades

 

La mineria de dades (data mining en angles) és un camp de les ciències de computació i de l’estadística que vol analitzar gran conjunt de dades per a trobar-hi patrons en elles. La mineria de dades troba informació en conjunt de dades (en general aquest volum de dades és extens) i extreu uns resultats que serveixen per analitzar les dades que es tenen. Aquestes tècniques s’apliquen amb l’objectiu de trobar informació útil, que d’altre manera no podria ser trobada.

6.1. Estructura de l’anàlisi de dades

Un estudi de mineria de dades normalment consta dels següents passos.  

6.1.1. Selecció  i  anàlisi  del  conjunt  de  dades  

Primer hem de seleccionar amb quin conjunt de dades volem treballar i fer un estudi de les variables que conté. És important en aquest pas que les dades triades siguin dins d’una població definida de la qual es vol treure conclusions

6.1.2. Preparació  del  conjunt  de  dades  

Aquest pas és conegut com a preprocés. En ell haurem de tractar les dades segons els estudis fets en el pas anterior. Hem de tenir present que aquest pas vol transformar les dades per a que els estudis que fem posteriorment siguin els més exitosos possibles. Si no fem un bon preprocés de les dades és més difícil que l’estudi obtingui resultats útils.

(23)

En aquest apartat hem de fer un extens estudi de les variables, és important trobar tots aquells valors atípics. En aquest pas és important fer ús de histogrames i diagrames per a la cerca dels valors atípics, ja que els algorismes de clustering es confonen molt amb aquests valors. També s’ha de de fer un estudi dels valors nuls o mancants. Els valors nuls o atípics normalment són descartats o transformats al valor mig de la variable.

6.1.3. Aplicació  de  les  tècniques  de  mineria  de  dades  

Un cop definit el conjunt de dades i hem fet el preprocés d’elles, hem de triar quina tècnica de mineria de dades volem aplicar. Hi ha dues grans famílies de tècniques en mineria de dades: supervisada i no supervisada.

1- Tècniques supervisades: En aquestes tècniques hi ha una variable

anomenada sortida que ens diu quina hauria de ser la resposta correcta del model. Els dos tipus principals són la classificació, en què la sortida és una variable nominal, i la regressió, quan la sortida és una variable numèrica. Alguns dels models per a fer aprenentatge supervisats, la regressió lineal i logística, i els arbres de decisió. 2-­‐ Tècniques no supervisades: Aquestes tècniques no disposen d’una

indicació de quina és la sortida correcta, en canvi tracten de trobar estructura en les dades. Les dues tècniques principals són el clustering, que agrupa els punts de les dades en grups homogenis i la cerca de patrons freqüents, que troba associacions complexes entre els atributs d’aquests exemples.  

En aquest projecte, com hem dit, ens concentrarem en la tècnica no supervisada clustering.

(24)

             

Figura 2, esquema  amb  els  diferents  tipus  d’estudi  de  data  mining.       Tècniques  de   clustering   No  supervisades   Clustering   Associació   Supervisades   Predicció   Classificació  

(25)

7. Anàlisis de clustering

 

 

Les anàlisis d’agrupació, o clustering en angles, són un tipus d’anàlisi dins de la mineria de dades que agrupa vectors d’un mateix conjunt de dades d’acord a uns criteris, que en general aquests criteris són de distància. Per al càlcul dels grups s’apliquen uns algorismes que són anomenats de clustering. Per agrupar les dades, aquests algorismes utilitzen funcions de distància i similaritat. La forma més comuna de calcular les distàncies entre els vectors més utilitzat és la funció de distància euclidiana1.

Aquest algorismes agrupen les dades en grups. El seu objectiu és que les dades d’un mateix grups siguin molt semblants, i les dades de dos grups diferents siguin el més diferents possibles.

Aquest procés no és un procés automàtic, és un procés elaborat perquè cal examinar diferents configuracions de manera exhaustiva. Una de les decisions importants que cal prendre és el nombre de grups a formar; d’entrada no sabem quants grups “hi ha” en les dades. Alguns algorismes determinen aquest número autònomament a partir de les dades. En altres casos exigeixen que el proporcioni l’usuari, com en el cas de l’algorisme més conegut, l’algorisme k-means. En el nostre treball buscarem la forma de com automatitzar aquest procés de la millor forma possible.

7.1. Utilitats del anàlisi de clustering

Ara posarem uns exemples d’ús de les anàlisis de clustering, evidentment hi ha moltes més utilitats.

                                                                                                               

1  Distància  euclidiana  és  la  distància  entre  dos  punts  de  𝑅!  en  el  espai  Euclidià    𝑅!.  

Siguin  P  i  Q  dos  punts  de  dimensió  n,  la  distància  entre  els  dos  punts  és:  d(P,Q)  =  

(26)

Anàlisis de les xarxes socials: En aquest àmbit s’utilitza els clustering per reconèixer grups de persones dins de grups més grans. Aquest estudis són utilitzats per moltes campanyes de màrqueting per a definir perfils de clients i dissenyar campanyes adequades a cada perfil.

Sistemes de recomanació: Segons els gustos que es pugui detectar del

usuari se’l pot associar amb un grup de gent i recomanar elements nous segons grups d’usuaris. Un exemple molt clar és la plataforma www.youtube.com . Clustering és un dels diversos mètodes que es pot fer servir per a la recomanació.

En educació: Serveix per a determinar quins són els grups d’estudiants, per

saber quins són els que més probablement que requereixin d’una atenció especial, o per a dissenyar un conjunt de currículums adequat a cada grup.  

En els supermercats: Un exemple clar d’ús de les tècniques de clustering és

els supermercats. Les utilitzen per a identificar grup de clients i crear diferents tipologies de clients. Aplicant aquestes tècniques es varen adonar que les tardes de dies en els quals hi havia partits de futbol amb gran audiència, la compra de cerveses i de patates fregides. En general els compradors eren homes adults. Per aquest motiu varen decidir posar la cervesa i les patates fregides una al costat de l’altre, aconseguint així un augment de les vendes dels dos productes.

També en els supermercats es van adonar, gràcies a un estudi de mineria de dades, que els divendres per la tarda hi havia un percentatge de venda de bolquers i de cerveses respecte la resta de dies. La raó és que pares joves tenien pensat quedar-se el cap de setmana amb els nadons a casa. Amb aquest estudi varen decidir juntar aquests dos productes els divendres per a incrementar els guanys.

En els negocis: Un nombre gran de botigues d’aliments varen fer un estudi de tots els seus clients més habituals. Amb la realització d’aquest estudi varen

(27)

veure que hi havia 5 grans grups de compradors, un exemple de comprador era aquell que preferia la compra de productes frescos. Amb aquest estudi varen plantejar estratègiques de màrqueting per a cadascun dels grups.

Dades mèdiques: Un exemple d’agrupament de dades és el que va dur a

terme en Ricard Gavaldà i en Matteo Ruffini[8]. En el treball varen treballar en unes dades binaries d’alta dimensió. Amb l’anàlisi de clústers, varen dividir el data set amb el que treballaven en 5 grups. Amb aquests grups es van poder construir tractaments guiats en els pacients.

En el treball farem experiments amb dades molt similars als dels estudis [8] i

(28)

8. Problema a solucionar

 

Com tots sabem, la tecnologia és la ciència que resol problemes concrets, doncs aquest treball vol solucionar el problema que hem explicat abans: Clusteritzar un conjunt de dades de forma automàtica.

Per tant el que volem aconseguir és automatitzar un procés que precisa de un estudi extens i personal amb coneixements. Per aconseguir automatitzar el procés de clustering utilitzarem tècniques apreses durant aquests anys. Això comporta diversos passos:

1- Estudi dels algorismes d’agrupació.

2- Estudi del nombre de grups a dividir les dades.

3- Estudiar com valorar els resultats obtinguts per aquests algorismes. 4- Estudiar quina de les maneres d’agrupar les dades és la millor.

 

Amb aquestes quatre estudis esperem trobar una forma d’aconseguir el nostre principal objectiu.

(29)

9. Estudi dels algorismes d’agrupació

 

Per a poder fer una cerca de clustering adequat, hauríem d’utilitzar el màxim nombre d’algorismes possibles. Per problemes de temps en aquest treball hem decidit reduir el nombre d’algorismes, és per aquest motiu que solament hem utilitzat dos algorismes intentant que aquest dos siguin el més diversos possibles.

Hi han molt algorismes de clustering, entre altres estan els següents: basats en particions, jeràrquic aglomeratiu, jeràrquic divisiu, basats en densitat, basats en descomposició espectral... Per aquest treball hem triat els dos algorismes més usats i ben descrits que són: l’algorisme k-means que està basat en particions, i un mètode jeràrquic aglomeratiu.

Ara descriurem els dos algorismes amb els quals treballem en aquest treball.

9.1. Algorisme de K-means

Aquest algorisme va ser introduït per Stuart Lloyd l’any 1957. L’algorisme intenta optimitzar una funció que té complexitat NP-difícil. No obstant, és una heurística fàcil d’implementar, que funciona ràpid gairebé sempre i els seus resultats són acceptables gairebé sempre. Per aquests motius és l’algorisme de clustering més utilitzat actualment, tot i que n’hi ha que poden donar solucions de molta més qualitat.

El objectiu principal de l’algorisme és trobar k centres i dividir les dades d’entrada (direm que el nombre de les dades d’entrada és n) en k grups. Cada observació s’assignarà a aquell centre més similar a ella. Aquest nombre k és definit prèviament a l’execució de l’algorisme.

Per a triar a quin dels centres cada observació s’assembla més, la tècnica que nosaltres utilitzarem i una de les més utilitzades és la distància euclidiana. Per

(30)

tant, un cop establerts els centres cada observació pertanyerà a aquell centre més proper en quant a distància euclidiana.

El funcionament de l’algoritme és el següent:

- Inici: Es defineixen k centres que es poden definir de diferents maneres. La forma més típica és triar k observacions de forma aleatòria i seleccionar-les com a centres. L’altre es fixar k centres el més allunyat possible entre ells.

- El segon pas és assignar cada observació al centre més proper. Un cop format els k grups, és calculen els baricentres d’ells. Aquests baricentres passen a ser els nous centres.

L’algorisme repeteix el segon pas fins a que els centres no variïn.  

La funció que intenta optimitzar l’algorisme és la següent:

Si tenim els punts en el espai 𝑥!…𝑥!, i els centroides d’aquests són 𝑐!…𝑐! la funció que optimitza és:

𝑑𝑖𝑠𝑡(𝑥!,𝑐 𝑥! ) ! !!!     on    𝑐 𝑥! =  𝑎𝑟𝑔𝑚𝑖𝑛(𝑑𝑖𝑠𝑡 𝑥!,𝑐! :𝑗= 1..𝑘)    

El cost de l’algorisme és: Ο(𝑛𝑘𝑑𝑖), on n és el nombre d’observacions total, k el nombre de centres, d és el nombre de variables que tenim de cada dada i i és el nombre d’iteracions que fa l’algorisme.

9.2.

Algorisme Hierarchy

(31)

Els algorismes de clustering aglomeratius (hierarchical clustering) agrupen les dades seguin un arbre de jerarquia de grups. Hi han dos tipus d’algorismes, els algorismes aglomeratius i els algorismes divisius:

- Aglomeratiu: Inicialment divideix totes les dades en clústers, de tal

forma que cada observació forma un clúster. Un cop creat tots els clústers va ajuntant-los per semblança, fins a tenir un sol clúster.

- Divisiu:  Aquest mètode fa el contrari al anterior, inicialment totes les

dades pertanyen al mateix clúster i va dividint el grup segons semblança.  

 

Cada algorisme té una complexitat diferent, l’algorisme aglomeratiu, implementat adequadament, té una complexitat (considerant que el càlcul de les distancies és constant) de Ο(𝑛!log 𝑛 ) i el divisiu té una complexitat de Ο(2!). En el nostre treball esperem una entrada de dades molt gran, com podem veure en les dues formules de cost, el temps d’execució de l’algorisme serà elevat en els dos casos però l’algorisme aglomeratiu és més ràpid en entrades grans. Per aquest motiu nosaltres utilitzarem l’algorisme aglomeratiu. En aquest tipus d’algorismes, sempre és útil l’ús dels dendrogrames. Un exemple de dendrograma el tenim en la figura 2, on podem veure un gràfic en forma d’arbre. Cada una de les arrels del arbre és una dada, per tant si tallem el gràfic per el eix horitzontal amb alçada 0, es formarien tants clústers com dades. Segons anem tallant el gràfic amb més alçada, les arrels originals es van unint formant clústers fins arribar a la part superior del arbre, on totes les dades són agrupades en un sol clúster. És molt important l’alçada de cada branca, perquè representen la distància que hi ha entre clústers.

(32)

Figura 3, exemple  de clustering  presentat  en  forma  de  dendrograma  [5].    

Per a calcular la similitud entre les dades aquests algorismes poden utilitzar qualsevol formula de distància. Nosaltres utilitzarem la distància euclidiana ja que en l’algorisme k-means és la que emprem. Amb coneixements específics dels dominis es podrien construir funcions de distància que generarien clústers més útils a la pràctica.

(33)

10. Estudi del nombre de grups a dividir les dades

 

 

Saber en quants clústers s’han de dividir un conjunt de dades, és un problema molt comú en les anàlisis de clustering. Molts algorismes la definició de en quants clústers es vol dividir les dades (k) és necessari, en canvi en altres algorismes com en el aglomeratiu, no és necessari.

Determinar aquesta k no sempre és senzill. Per una part volem que es creïn grups que les dades dins del grup siguin molt semblants i dades de dos grups diferents molt diferents, però tampoc volem que el nombre de clústers sigui molt gran. Per tant, si no volem que el nombre de clústers sigui gran s’ha de penalitzar que hi hagin més clústers.

Una forma de veure-ho seria dir: “busquem aquella k tal que si afegim un clúster, el guany que obtenim no és prou significatiu”.

Per a saber quin és el nombre òptim de clústers existeixen diversos mètodes. Nosaltres hem utilitzat dos dels mètodes més freqüentats que són l’elbow method [10] i el silhouette [11].

El que farem es aplicar cadascun dels mètodes amb els que obtindrem dos valors (el ideal seria que amb els dos mètodes obtinguéssim el mateix valor) que els direm k i s (k el obtingut amb l’elbow method i s el obtingut amb el

silhouette). Un cop obtinguts aquests dos valors buscarem el clustering òptim amb el nombre de clústers que estigui compres entre aquests dos.

Ara explicarem el funcionament dels dos mètodes:

10.1. Elbow method

(34)

Aquest mètode tria el millor nombre de clústers en funció de la variància dins dels clústers que hi ha respecte del nombre de clústers en què dividim les dades. Per a calcular aquesta variància s’han de sumar totes les distancies euclidianes dos a dos entre els vectors d’un mateix clúster.

Per l’explicació del mètode usarem un exemple molt clar[15]. En aquest

exemple utilitzen el diagrama de punts de la figura 3. Simplement veient la imatge veiem com es poden formar tres grups clarament. Ara anem a analitzar aquest conjunt de dades amb l’elbow method. Per al seu anàlisi és molt útil el ús d’un diagrama que mostri la variància dins dels clústers respecte del nombre de clústers. Aquest diagrama el trobem a la figura 4.

Figura 4, exemple  de  gràfic  de  dispersió  de  dades[3].

Com podem veure en la figura 4, si agrupem les dades en un sol clúster tenim una suma de les variàncies molt elevada comparada amb els altres nombres de clústers. També podem observar que a partir d’un cert nombre de clústers, en aquest exemple 3, per cada clúster que afegim la variància no es redueix tant. Si observem el dibuix de la gràfica en el punt que té coma nombre de

(35)

clústers 3, veiem com es forma un colze (elbow en angles). Utilitzant aquest mètode aquest seria el nombre de clústers a elegir.

En altres casos podríem trobar-nos que aquest colze no és tant fàcil de identificar, i segurament no tothom triaria el mateix punt ja que, pel que hem vist, no té una definició matemàtica generalment acceptada. Per tant, nosaltres n’haurem de triar una de les proposades, o proposar-ne una de nova.

Figura 5, exemple  de  gràfic  de  distància  dels  elements  del  mateix  clúster[4].

10.1.1. Implementació

La noció de colze no és del tot única i s’han fet diverses propostes. Les tres propostes que hem trobat més interesants són:

- El punt de la corba amb la 2a derivada més gran. És a dir, trobar el punt de curvatura més alt.

(36)

- El punt de la corba on la tangent és paral·lela a la línia que uneix el punt inicial i final de la corba.

- El punt més llunya a la línia que uneix el punt inicial i final de la corba. Finalment ens hem decantat utilitzar el tercer mètode, tot i que també utilitzarem idees de les altres dues. Buscarem el punt més llunya a la diagonal, que coincidirà amb aquell punt que té com a tangent una recta paral·lela a la diagonal.

Primer de tot hem decidit delimitar el nombre de clústers entre 2 i 𝑛 (el nombre de dades d’entrada és n), perquè com treballarem amb entrades molt grans, i el nombre de clústers amb els quals volem dividir les dades no ha de ser molt gran, hem trobat convenient reduir el nombre màxim de clústers.

Com tots els diagrames amb els que ens esperem trobar fan forma de L, per a trobar el colze hem decidit que buscaríem aquell punt que tingui la pendent igual que el de la diagonal que connecta el nombre màxim de clúster amb el nombre mínim.

Com la corba té pendent sempre és negatiu i creixent, i el punt que busquem és únic, eficient la cerca d’aquest punt farem servir una cerca dicotòmica.

Si tenim una funció decreixent i continua en forma de L, on el primer punt és el màxim de la funció i el últim punt és el mínim, la derivada discreta d’aquesta funció serà una funció creixent i continua sempre menor a 0, on per un punt j de la funció, 𝑓′ 𝑗 > 𝑓′(𝑗+1), sent 𝑓 𝑖 =𝑓 𝑖+1 −𝑓 𝑖 . Direm que la pendent que busquem és i (pendent entre 𝑓(2) i 𝑓( 𝑛)). Si comencem calculant el pendent en un punt x, punt situat a la meitat dels dos extrems, es poden donar dos casos:

- Si 𝑓! 𝑥 >𝑖 el punt que estem buscant estarà entre x i el extrem dret. - En canvi si 𝑓! 𝑥 <𝑖 el punt que estem buscant estarà entre l’extrem

(37)

Si ara x passa a ser el nou centre entre els dos extrems i repetim les condicions anteriors, i repetim això fins que els dos extrems siguin el mateix punt, aquest serà el punt que estàvem buscant.

Aquest mètode acaba tenint un cost de Ο(𝑘), sent k el nombre de clústers provats, que com a màxim serà 𝑛. Per tant podem dir que el mètode tindrà un cost total de Ο(𝑛).

Figura 6, exemple  de  gràfic  de  l’elbow  method.

10.2.

Silhouette

Aquest mètode si que té una definició matemàtica ben acceptada, que serveix per calcular la consistència dels clusters. Aquesta funció el que fa és comparar la similitud de cada observació amb les observacions dels altres clústers. El

0   20   40   60   80   100   120   1   2   3   4   5   6   7   8   9   10   11   12   13   14   15   D ist àn ci a  

(38)

resultat d’aquesta funció és un índex entre -1 i 1, quan més alt és aquest valor, millor és l’agrupament de les dades.

Per aquest mètode també podem ajudar-nos amb un diagrama com el de la figura 5. En aquest cas també hem de seleccionar aquell nombre de clústers tal que afegint un altre clúster no observem una gran millora.

Per calcular la similitud de les dades, hem utilitzat la distància euclidiana com hem vingut utilitzant anteriorment.

Formula de l’índex:

Primer de tot hem de dividir les dades en k clústers. Un cop dividides, anomenarem a una observació qualsevol i. Definirem com 𝑎(𝑖) la distància mitjana del punt i a totes les altres observacions del clúster al qual pertany. Definirem com a 𝑏(𝑖) a la distància mitjana a tots els punts del clúster més proper (entenem al més proper com aquell clúster amb el centre més proper), sense tenir en compte el propi clúster d’i.

Un cop calculat aquest dos valors, apliquem la formula:

𝑆 𝑖 =   𝑏 𝑖 −𝑎(𝑖) max  {𝑎 𝑖 ,𝑏 𝑖 }

(39)

Figura 7, exemple  de  gràfic  dels  valors  de  Silhouette  respecte  el  nombre  de   clústers  [6].  

Una de les conclusions que podem extreure al analitzar la formula és: si el valor 𝑎(𝑖) és molt inferior al de 𝑏(𝑖), obtindrem un valor proper a 1, que significaria una bona divisió per a aquesta observació. Si pel contrari 𝑏 𝑖 ≪

𝑎(𝑖), obtindrem un valor de l’índex proper a 0 o negatiu, que diria que l’observació no està molt ben agrupada.

Per a obtenir el valor general en el conjunt de dades, hem de calcular aquest valor per a cada observació i fer la mitjana de tots els valors obtinguts.

10.2.1. Implementació

Per al càlcul d’aquest l’índex d’un agrupament de dades hem utilitzat la llibreria per python sklearn. Per a no tenir que calcular tots els valors de silhouette, només hem calculat aquest valors amb valors de k que s’obtenen amb aquesta funció: 𝑓 𝑥 =2!!!.

(40)

Un cop calculat aquests valors, esperem trobar-nos sempre amb una funció semblant a la de la figura 5. Un cop analitzats tots els valors obtinguts, continuarem aplicant la cerca dicotòmica entre els dos punts següents: el primer punt serà aquell de la gràfica tal que els valor de silhouette calculats següents (les dues k superiors a aquest punt), no millorin més d’un 5% l’actual. L’extrem esquerre serà el valor de k adjunt en el punt anterior però més petit. Un cop tenim aquest dos nous extrems tornarem a fer la cerca dicotòmica entre aquests dos valors, i així successivament fins que els dos extrems siguin adjacents (k i k+1).

El cost d’aquest mètode és bastant més elevat que el de l’elbow, el seu cost és Ο(𝑛!).

(41)

11. Estudi de com valorar els resultat obtinguts pels

algorismes

 

Un cop aplicat hem aplicat els algorismes i hem delimitat el rang del nombre de clústers, tindrem quatre valors: 𝑘!"#$%& (obtinguda amb l’algorisme k-means i el mètode elbow), 𝑠!"#$%& (obtinguda amb l’algorisme k-means i el mètode silhouette), 𝑘!!"#$#%!! (obtinguda amb l’algorisme hierarchy i el mètode elbow) i

𝑠!!"#$#%!! (obtinguda amb l’algorisme hierarchy i el mètode silhouette). Tots els

clusterings obtinguts per l’algorisme k-means amb k entre  𝑘!"#$%& i 𝑠!"#$%& són en principi candidats a millor clustering, el mateix passa anàlogament amb els valors obtinguts amb silhouette.

Per tant tindrem fins a 𝑘!"#$%&−𝑠!"#$%& + 𝑘!!"#$#%!!−𝑠!!"#$#%!! +2 diferents clusterings que són candidats a ser la solució final. Un cop tenim tots els clusterings hem de triar quin d’aquests és el millor.

Hi han diverses tècniques que valoren la bondat dels agrupaments, però no podem dir que cap sigui millor ni pitjor que les altres. És per això que hem decidit utilitzar les tres tècniques més utilitzades que són: Silhouette [11], Dunn Index[9] i Davies-Bouldin[12].

11.1.

Silhouette

Aquest és el mateix índex que utilitzem per a la tria del nombre de clústers. És un índex útil per a valorar com de bo és un agrupament ja que té en compte quan de compacte són els clústers respecte els altres.

(42)

11.2.

Dunn Index

Igual que els altres índexs, aquest índex valora com de compacte són els clústers, havent-hi poca diferencia entre els elements d’un mateix clúster, i que els clústers estiguin ben separats.

En aquest índex, com més alt és el valor que obtinguem millor és l’agrupament. Ara mostrarem la formula que aplica aquest índex:

Primer calcularem per cada clúster el seu diàmetre, que definim com a la distància màxima entre dos dels integrants d’un mateix clúster (𝐶!).

∆!=  !max,!∈!"𝑑(𝑥,𝑦)

Desprès definirem la distància entre clústers, com a la distància euclidiana entre els seus centres. La denotarem com: ð(𝐶!,𝐶!).

Amb aquestes dues definicions, i tenint m clústers, la formula del Dunn Index és: 𝐷𝐼! = !!min!!!!!ð(𝐶!,𝐶!) max !!!!!∆!

11.3.

Davies-Bouldin

 

Aquest índex fa uns càlculs semblants al Dunn. En aquest cas es compara la distància mitjana dels punts d’un clúster al seu centre amb la distància entre centres.

(43)

A diferencia de l’anterior, com més petit sigui el valor que obtenim millor serà aquest agrupament de les dades.

Abans de mostrar la formula complerta, definirem dos valors. Sigui m el número de clústers i x un clúster, definirem com 𝜎! com la distància mitja de tots elements del clúster x, al seu centre. També, sent 𝐶! i 𝐶! dos centres de clústers, definirem com 𝑑(𝐶!,𝐶!) la distància entre els centres dels clústers i i j.

La formula del Davies-Bouldin és:

𝐷𝐵 =1 𝑛 max!!! 𝜎!+𝜎! 𝑑(𝐶!,𝐶!) ! !!!

11.4.

Tria del millor clustering

Un cop ja hem calculat tots els índexs per a totes les diferents agrupacions, construïm una matriu amb n (nombre de diferents agrupacions) files i 3 columnes. Els índexs estaran distribuïts per files en el ordre que els hem descrit abans (Silhouette, Dunn, Davies-Bouldin). Per a saber quin és el millor clustering fem servir aquesta formula:

𝐵𝐶= max !!!!! 𝑚𝑎𝑡!" max  (𝑐𝑜𝑙 𝑗 ) ! !!! +1−min  (𝑐𝑜𝑙 3 )  𝑚𝑎𝑡!!  

La fila que obtingui el valor més alt amb aquesta formula serà la que seleccionarem com a millor agrupament.

(44)

12. Desenvolupament del software

 

Ara explicarem com hem fet el desenvolupament d’aquest software.

12.1. Diagrama UML

 

   

Figura 8, diagrama  UML  amb  les  classes  que  conté  el  nostre  programa.  

Tant la classe Silhouette situada a l’esquerra del tot com la situada a la dreta del tot són la mateixa, la dupliquem només per no complicar la figura.

12.2. Explicació de les classes

 

12.2.1. ControladorHierarchy

(45)

Amb aquesta classe volem fer tots els càlculs necessaris de l’algorisme Hierarchy. L’algorisme el cridem de la llibreria scipy.cluster.

Les funcions que conté són:

- retCluster(k, div): Aquesta funció rep dos paràmetres: k que és el

clúster que volem tornar i div que és el nombre de clústers en què hem dividit el data set.

La funció retornarà una matriu amb tots els elements del clúster k havent dividit el data set en div clústers.

- retLabels(k): Aquesta funció rep un sol paràmetre k, que és el nombre

de clústers en què dividim el data set.

La funció retorna un vector que conté les etiquetes on s’indica a quin clúster pertany cada dada.

- distanciaKClusters(k): Aquesta funció rep un sol paràmetre k, que és el

nombre de clústers en què dividim el data set.

La funció retorna la suma de totes les distancies euclidianes dins dels clústers, dividint les dades en k clústers.

- retAllClusters(k): Aquesta funció rep un sol paràmetre k, que és el

nombre de clústers en què dividim el data set.

La funció retorna un vector amb k matrius, on cada matriu és un dels clústers en què ha dividit l’algorisme el data set.

12.2.2. ControladorKmeans

 

Amb aquesta classe volem fer tots els càlculs necessaris de l’algorisme Kmeans. L’algorisme el cridem des de la llibreria sklearn.cluster.

Les funcions que conté són:

- executaKmeans(k): Aquesta funció rep un sol paràmetre k, que és el

nombre de clústers en què dividim el data set.

(46)

- tornaCentres(kmeans): Aquesta funció rep un sol paràmetre kmeans, que és el resultat d’una execució de l’algorisme.

Retorna un vector de tots els centres de l’execució de l’algorisme.

- clusterPertany(kmeans, punt): Aquesta funció rep una execució de

kmeans i un punt del data set.

Retorna l’índex del clúster al qual pertany el punt.

- sumDistancies(kmeans): Aquesta funció rep un sol paràmetre kmeans,

que és el resultat d’una execució de l’algorisme.

Retorna la suma de les distancies dels punts al centre del seu clúster.

- returnLabels(kmeans): Aquesta funció rep un sol paràmetre kmeans,

que és el resultat d’una execució de l’algorisme.

Retorna un vector amb índexs que marca a quin grup pertany cada dada.

12.2.3. AvaluadorHierarchyElbow

 

Aquesta classe ens serveix per a triar el nombre ideal de clústers utilitzant l’elbow method. En aquesta classe només utilitzarem l’algorisme Hierarchy.

Les funcions que conté són:

- returnLabels(): Aquesta funció retorna un vector amb els índexs que

ens marca a quin grup pertany cada dada un cop ja hem triat el nombre ideal de clústers.

- trobaPendent(): Aquesta funció ens serveix per a calcular la pendent

que hi ha en la gràfica de suma de distancies per nombre de clústers.

- trobarNumClusters(): Aquesta funció retorna el nombre de clústers

òptims amb els quals dividir el data set segons l’elbow method.

12.2.4. AvaluadorKmeansElbow

Aquesta classe ens serveix per a triar el nombre ideal de clústers utilitzant l’elbow method. En aquesta classe només utilitzarem l’algorisme Kmeans.

(47)

Les funcions que conté són:

- returnLabels(): Aquesta funció retorna un vector amb els índexs que

ens marca a quin grup pertany cada dada un cop ja hem triat el nombre ideal de clústers.

- trobaPendent(): Aquesta funció ens serveix per a calcular la pendent

que hi ha en la gràfica en la gràfica de suma de distancies per nombre de clústers.

- trobarNumClusters(): Aquesta funció retorna el nombre de clústers

òptims amb els quals dividir el data set segons l’elbow method.

- returnWithLabels():Aquesta funció retorna el nombre de clústers òptims

amb els quals dividir el data set segons l’elbow method, i una matriu amb el data set original afegint-hi una columna amb l’índexs del clúster al qual pertany cada dada.

12.2.5. Silhouette

 

Aquesta classe ens serveix per a calcular el valor de silhouette d’un clustering i per a triar el nombre òptim de clústers dels algorismes. Per a el càlcul del valor silhouette hem emprat la llibreria sklearn.metrics.silhouette_score.

Les funcions que conté són:

- retCenter(clúster): Aquesta funció rep una matriu que conté les dades

d’un mateix clúster.

Amb aquesta funció calculem el centre del clúster i retornem el vector d’aquest punt.

- retListClusters(k,labels): Aquesta funció rep dos paràmetres, el valor

de k és el nombre de dades en què està dividit un clúster. Labels és un vector amb els índexs que ens marca a quin és el clúster que pertany cada dada.

(48)

Retorna un vector de parelles de longitud k. La primera part de la parella conté una matriu amb tots els elements del clúster, i la segona part conté el vector del centre del clúster.

- retClustering(k): Aquesta funció rep un sol paràmetre k, que és el

nombre de clústers en què dividim el data set.

Retorna l’execució de l’algorisme dividint les dades en k clústers.

- retLabels(k): Aquesta funció rep un sol paràmetre k, que és el nombre

de clústers en què dividim el data set.

Retorna un vector amb els índexs dels clústers al qual pertany cada dada.

- retPuntuacio(k): Aquesta funció rep un sol paràmetre k, que és el

nombre de clústers en què dividim el data set.

Retorna la puntuació de l’índex silhouette dividint les dades en k grups.

- buscaParcialClusters(): Amb aquesta funció volem saber quin és el

nombre de clústers ideal segons el valor del silhouette. Retorna el nombre de clústers ideal segons silhouette.

- analitza Final(): Aquesta funció és utilitzada per l’anterior per a trobar el

punt ideal segons els valors de silhouette. Retorna un valor booleà segons si s’ha trobat el punt o no.

12.2.6. Davies-Bouldin

Aquesta classe ens serveix per a calcular el valor de l’índex Davies-Bouldin

d’un clustering.

Aquesta classe només té una funció que és:

- daviesbouldin(list,centres): Aquesta funció rep dos paràmetres, el

paràmetre list és un vector de matrius, on cada posició és la matriu d’un clúster. El paràmetre centres és una llista amb la posició de tots els centres.

(49)

12.2.7. Dunn

 

Aquesta classe ens serveix per a calcular el valor del Dunn Index d’un clustering.

Aquesta classe només conté una funció que és:

- dunnindex(points,labels): Aquesta funció rep dos paràmetres, points

que és la matriu amb totes les dades del data set, i labels vector del clúster que pertany cada dada.

12.2.8. Avaluadors de bondat

Aquesta classe ens serveix de pont per a que l’avaluador general pugi obtenir els valors dels índexs i triar quin dels agrupaments és el millor.

12.2.9. Controlador general

Aquesta classe serveix com a pont entre l’avaluador general i les altres classes. Ens permet agilitzar els càlculs i evitar repetir càlculs. També ens permet que la classe avaluador general sigui més senzilla.

Les funcions que conté aquesta classe són:

- trobaNumClusters(): Aquesta funció executa tots els avaluadors del

nombre de clústers amb tots els algorismes, i guarda quins són aquest nombre de clústers.

- selectBestKmeans(): Aquesta funció calcula el valor dels tres

(50)

que tenen com a valor k un nombre entre el trobat per l’elbowmethod i l’índex silhouette.

Retorna una matriu on en cada fila contindrà els valors dels avaluadors de bondat de cada execució que està en el rang esmentat anteriorment.

- selectBestHierarchy(): Aquesta funció calcula el valor dels tres

avaluadors de bondat per a totes les execucions de l’algorisme

Hierarchy divideix les dades en un nombre entre el trobat per l’elbowmethod i l’índex silhouette.

Retorna una matriu on en cada fila contindrà els valors dels avaluadors de bondat de cada execució que està en el rang esmentat anteriorment.

- selectBestClustering(): Aquesta funció utilitza tots els agrupaments

que es calculen en les dues funcions anteriors, i els seus valors dels avaluadors de bondat, per a valorar quin de tots els agrupaments és el millor.

Retorna l’algorisme que millor agrupa i el nombre de clústers ideal.

12.2.10. Avaluador general

Aquesta classe llegeix el document amb les dades que es volen estudiar i, automàticament crida al controlador general per al càlcul del millor algorisme amb el millor nombre de clústers possible.

12.3. Pseudocodi elbowmethod

 

En aquest apartat volem explicar com hem implementat l’algorisme que implementa l’elbowmethod. Per a implementar-ho ens hem basat en aquest pseudocodi:

elbow (min, max, obj)

if (min == max) return min mid = (min + max)/2

(51)

pend = (f(mid)- f(mid+1)) if (pend > obj)

elbow(mid, max, obj) else

elbow(min, mid, obj)

El cost computacional d’aquest algorisme és: log𝑘. On k és el nombre màxim de clústers considerats, en el nostre cas 𝑛.

12.4. Pseudocodi silhouette

En aquest apartat volem explicar com hem implementat l’algorisme que implementa l’índex silhouette. Per a implementar-ho ens hem basat en aquest pseudocodi:

silhouette(min, max) i = min j = 1 values = [ ] clusters = [ ] while i <= max : values.append(silhouette(min + i)) clusters.append(i) i = i+j j = j*2 pos = key(max(values)) if (values[pos -1] >= values[pos+1]) : silhouette(clusters[pos-1],clusters[pos]) else : silhouette(clusters[pos],clusters[pos+1])

El cost computacional d’aquest algorisme és: log𝑘. On k és el nombre màxim de clústers considerats, en el nostre cas 𝑛.

(52)

13. Problemes amb el software

 

Alhora de desenvolupar el software, ens hem trobat amb diversos problemes. Volem destacar un problema que ha estat el més important, i explicarem com l’hem solucionat.

Durant el desenvolupament del programa ens vàrem donar compte que els temps d’execució eren molt elevats. Per veure on el programa trigava més vam fer un estudi de temps dels algorismes.

Per a trobar aquestes perdudes de temps hem utilitzat un data set que està en la llibreria de sklearn.datasets. Aquest data set té 1797 files i 64 columnes. Amb aquest data set vam veure que els temps de cada algorisme eren:

Kmeans: 7,34 sec Hierarchy: 235,7 sec

Com podem veure en els temps d’execució dels algorismes, el Hierarchy produeix que el temps d’execució del programa sigui molt elevat. Això és degut al cost computacional dels algorismes. El cost de l’algorisme Hierarchy és: Ο(𝑛!log𝑛), sent n el nombre de punts del data set d’entrada. Per altre banda el cost computacional del Kmeans és: Ο 𝑛𝑘𝑑𝑖 on n és el tamany de l’entrada de dades, k el nombre de grups en què dividir les dades, d el nombre de variables que tenen les dades i i el nombre d’iteracions que fa al algorisme.

Per evitar aquests costos de temps tan elevats hem decidit executar el programa solament amb l’algorisme Kmeans, i un cop hem tingut els resultats preguntar al usuari si vol que fem un estudi més extens de les dades.

(53)

D’aquesta manera el temps en què mostrem els primers resultats és redueixen significativament, i donem la possibilitat a que si l’usuari vol tenir un estudi més extens amb un cost temporal més elevat, el pugui fer.

(54)

14. Jocs de prova

 

 

Per a validar el programa hem provat aquest amb diversos data sets que porten dades mèdiques. Hem utilitzat tres data sets, dos dels quals ja han estat estudiats i un altre que no.

14.1. Joc de prova 1

 

En aquest joc de dades tenim informació de pacients que han sofert un ictus cerebral i han sobreviscut amb una edat superior o igual a 65 anys. El data set és d’una institució sanitària centrada en l’atenció a la gent gran, geriatria i envelliment, concretament el Parc Sanitari Pere Virgili.

Per aquest data set hi ha un treball d’anàlisis amb el que compararem els resultats que obtenim, del qual ens referirem constantment en el anàlisis dels resultats [8].

14.1.1. Anàlisi de les dades

 

Les dades contenen 384 pacients, dels quals tenim 9 atributs. Aquestes dades són:

- Charlson: Índex utilitzat en geriatria per a fer una valoració del estat del

pacient.

- Num Cuidador : variable booleana que ens diu si el pacient té un

cuidador a casa o no.

- Edat: variable que ens indica l’edat del pacient

- Esatocivilnum: variable booleana que ens indica si el pacient viu amb

Referencias

Documento similar

En el cas del gènere de suspens i de la trama de redempció, cal tenir molt en compte el missatge i les reaccions que volem transmetre al públic, un dels elements que s’ha de tenir

Aquesta Llei és aplicable a les dades de caràcter personal que siguin susceptibles de tractament i a qualsevol ús posterior d'aquestes dades. Tractament de dades personals:

Saber buscar, obtenir i interpretar la informació de les principals bases de dades biològiques que contenen dades genòmiques, transcriptòmiques, proteòmiques i metabolòmiques..

Aplicat a l’entorn industrial, el concepte big data fa referència a la gran quantitat de dades gene- rades per un conjunt de fonts molt diferents relacionades amb aquest

Per exemple, a les institucions hi havia una incertesa contínua sobre si la biblioteca era vista com un lloc “natural” on anar per als serveis de gestió de dades de

Disseny i implementació de la base de dades per a una aplicació de control de pràctiques en empreses dels

Al centre de l’àrea explorada les dades no mostren anomalies ben definides per al grup 12 (definit anteriorment com un conjunt de possibles sitges), tot i que

Per a realitzar aquesta valoració primerament s’ha dut a terme una revisió bibliogràfica en diferents bases de dades, per a definir també el tipus de