ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 120
Abonament PDF

Machine Learning în diagnosticarea medicală

Alexandru Parvu
Machine Learning Engineer @ Accesa



Adrian Militaru
Data Engineer @ Accesa



PROGRAMARE


Medicina, unul dintre cele mai relevante domenii de studiu, este cunoscută drept destul de conservatoare în ceea ce privește adaptarea de noi tehnologii. Ceea ce este ușor justificabil, întrucât aceasta are ca scop primar prezervarea vieții umane, iar comiterea celei mai mici dintre greșeli, poate avea efecte devastatoare și de lungă durată. Astfel, integrarea de Machine Learning în practica sa este privită cu reticență de către specialiștii în domeniu, chiar dacă diverse aplicații sunt disponibile de zeci de ani.

Definirea problemei

Prima și poate cea mai simplă utilizare a Machine Learningului în medicină este aceea de a da sens unor date a căror caracteristică principală e complexitatea. Multe afecțiuni grave tind să fie diagnosticate cu ajutorul a diverși factori, respectiv simptome. Cu toate acestea, acest proces de diagnosticare nu este tocmai simplu. În fapt, anticiparea și prevenirea uneia dintre cele mai mari cauze de mortalitate pot fi extrem de dificile sau chiar imposibile. Această problemă este accentuată de faptul că, în încercarea de prevenire a bolii, sunt luați în considerare multipli factori; aceștia au ca atribut primar complexitatea, motiv pentru care este dificil de determinat care dintre aceștia are influența cea mai mare.

Pentru această primă demonstrație, am folosit librăria sklearn în python combinată cu setul de date Cardiovasculare de la Kaggle. În Fig. 1 putem vedea un mic eșantion din acest set de date:

(ap_hi: Systolic blood pressure, ap_lo: Diastolic blood Pressure) Fig. 1. Dataset sample

Scopul inițial al acestui set de date a fost acela de a urmări informațiile despre pacienți și de a vedea ce informații medicale pot fi indici clari ai unei boli de inimă. Ar trebui să se observe instant varietatea de factori care sunt luați în considerare atunci când se diagnostichează prezența unei astfel de boli, reprezentată printr-o valoare binară în coloana "cardio" a setului de date. Și, din păcate, nu pare să existe o distincție clară între persoanele cu boli de inimă și cele fără. Luând în considerare cele 11 variabile independente din tabel, am putea obține un total de 112 diagrame, care ne-ar putea ajuta să înțelegem care sunt factorii determinanți care favorizează apariția bolilor de inimă.

Desigur, acest lucru nu este ușor, deoarece parcurgerea a 121 de diagrame diferite ar necesita prea mult timp sau efort și, în final, s-ar putea să nu existe o distincție clară între cei care suferă și cei care nu suferă de boli de inimă.

Acesta este, de fapt, cazul acestor date. În ciuda faptului că avem peste 121 de diagrame din care să alegem - cu o mare diversitate de reprezentări - nu este posibil să diferențiem pacienții.

Fig. 2. Plots

Cauza acestei dificultăți? Afecțiunile medicale nu sunt rezultatul unui singur factor, ci, mai degrabă, rezultatul interacțiunii mai multor factori. Ca rezultat, astfel de diagrame, care sunt simple în esență nu ar putea să transpună cu exactitate întreaga poveste care, în fapt, poate fi extrem de complexă. Din fericire, există modalități de a elimina acest risc cu ajutorul unuia dintre cele mai utilizate modele de Machine Learning, și anume Random Forest sau o variantă a Random Forest numită Gradient Boosting Machines.

În ciuda simplității modelului și a implementării sale, acesta ne oferă o explicație a factorilor influențatori, care altfel ar fi putut fi omisă.

Codul acesta nu pare semnificativ, dar dacă analizăm explicația de mai jos, vom observa că, de fapt, este.

from sklearn.ensemble 
import GradientBoostingClassifier
from sklearn.model_selection import GridSearchCV
param_grid={
   'loss': ['deviance', 'exponential']
   , 'learning_rate': np.arange(0.01,0.2, step =0.04)
   , 'n_estimators': np.arange(50,200, step =40)
   , 'max_features' : ['auto', 'sqrt', 'log2']
}
estimator = GradientBoostingClassifier()
grid = GridSearchCV(estimator=estimator
   , param_grid=param_grid
   , scoring='accuracy'
   , cv=4
   , verbose=2)
grid.fit(X_train, y_train)

Fig. 3. Feature Importance

Graficul de mai sus ne arată, în ordinea descrescătoare a relevanței, factorii determinanți care cauzează boli de inimă. "rand_var" este o variabilă aleatorie care este utilizată pentru a stabili dacă un factor este, de fapt, determinant sau nu. Astfel, putem observa că, în mod surprinzător, nivelul de activitate fizică, obiceiul de a fuma, consumul de alcool și sexul nu sunt printre factorii determinați.

În ordine descrescătoare, factorii determinanți sunt următorii: tensiunea arterială, vârsta, nivelul de colesterol, greutatea, nivelul de glucoză și, în mod surprinzător, înălțimea - da, persoanele înalte sunt mai predispuse la boli de inimă.

Economisirea timpului

Fig. 4. Radiografie pulmonară - Pneumonie - PAUL MOONEY, 2018 (Chest X-Ray Images (Pneumonia) | Kaggle )

Fig. 5. Radiografie pulmonară - Pneumonie - PAUL MOONEY, 2018 (Chest X-Ray Images (Pneumonia) | Kaggle )

Când ne gândim la medici, îi asociem instant cu acele persoane care ne tratează afecțiunile, dar, de fapt, cea mai mare parte din timpul unui medic este petrecut pentru a stabili diagnosticul corect, în timp ce partea de tratament se limitează adesea la a prescrie tratamentul corect pentru acel diagnostic. Aceasta este o problemă exacerbată în special în țările în care rata de medici pe cap de locuitor este scăzută, ceea ce duce la crearea unui ciclu în care medicii ajung la epuizare din cauza numărului mare de diagnostice necesare. Astfel, se creează un exod al medicilor, accentuând și mai mult problema.

Acesta este locul unde Machine Learning poate fi de ajutor, prin automatizarea procedurii de diagnosticare, care necesită mult timp. În acest exemplu, am folosit librăria TensorFlow împreună cu un model pe TensorHub și setul de date de radiografii toracice de la Kaggle (Fig. 4 este a unui pacient sănătos, iar Fig. 5 este a unui pacient cu pneumonie). Pentru ochiul neexperimentat și chiar pentru cel al unui medic experimentat, acestea ar părea poate greu de distins, ceea ce este de înțeles. Să ne amintim că un medic dedică cea mai mare parte a timpului diagnosticării pacientului și dacă încercăm să distingem cele două scanări putem înțelege de ce.

Aici Machine Learning poate avea un rol esențial - acest proces consumator de timp ar putea fi redus cu ușurință cu doar câteva linii de cod. Dar, înainte de a face acest lucru, trebuie să stabilim care este sistemul metric de interes. Este vorba de acuratețe? Intuitiv, am spune că da, până când ne gândim că majoritatea persoanelor care intră în cabinetul unui medic nu are pneumonie, astfel încât, dacă am afirma că nimeni are pneumonie, am obține o precizie de peste 99%, care, deși impresionantă, nu este foarte utilă din punct de vedere medical.

Ar fi poate mai ușor dacă am începe analiza din perspectiva obiectivului final. Obiectivul unui medic este de a depista cât mai multe persoane dintre cele ce suferă de pneumonie. Astfel, dorim o rată ridicată de detectare a persoanelor care au pneumonie. Pentru acest tip de detecție, în cazul în care suntem interesați să găsim pacienții cu adevărat pozitivi care suferă de pneumonie, există o astfel de măsurătoare numită "recall".

Codul de mai jos reprezintă elementele necesare pentru a crea un model eficient:

resnet = 
'https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/5'

model_4 = create_model(model_url=resnet, 
num_classes=2)

model_4.compile(loss=BinaryCrossentropy()
                , optimizer=Adam()
                , metrics=['accuracy'])

history = model_4.fit(aug_train_data
                , validation_data=val_data
                , epochs=10
                , workers = 16
                , use_multiprocessing=True
                , steps_per_epoch=len(aug_train_data)
                , validation_steps = len(val_data))

Cu o perioadă de "învăţare" de mai puțin de 10 minute, putem observa rezultatele de mai jos care, așa cum am menționat mai devreme, par să fie o realizare a obiectivului nostru declarat de a avea un model cu un "recall" ridicat în ceea ce privește pneumonia.

Fig. 6.

Valoarea de recall pentru clasa 1 (Pneumonie) este de 0,99 (99%), ceea ce înseamnă că peste 99% dintre radiografiile care au prezentat pneumonie au fost detectate corect ca având pneumonie.

Se poate observa că acuratețea (89%), este mai mică decât recallul pentru pneumonie. Pentru a înțelege mai bine acest lucru, putem analiza în continuare rezultatele noastre sub forma unei matrici de confuzie. O matrice de confuzie este utilizată pentru a arăta comparațiile dintre performanța clasificatorului în ceea ce privește predicția de pozitivi și negativi reali față de negativi și pozitivi falși.

Consecințele unei rate de recall ridicate și ale unei precizii ușor mai scăzute pot fi observate mai jos:

Fig. 7. True vs. predicted values

Putem observa că, în timp ce majoritatea persoanelor cu pneumonie a fost identificată corect, aproximativ 10% dintre pacienții care nu aveau pneumonie au fost, de asemenea, clasificați ca având pneumonie.

Acest lucru ne duce la ultimul punct care trebuie subliniat atunci când discutăm despre modelele de Machine Learning în ceea ce privește aplicarea lor în domeniul medical - aceste instrumente nu îi pot înlocui pe medici, deoarece este nevoie de expertiza medicală a acestora pentru a fi create.

Concluzie: nu e vorba de înlocuirea specialiștilor, ci de eficientizarea proceselor

Suntem adesea tentați să credem că Machine Learning va face ca anumite profesii să devină irelevante, dar, de multe ori, acest lucru nu se aplică. Cu siguranță nu este cazul în medicină. Motivul fiind, pentru ca aceste modele să fie create, ele au nevoie de istoricul de diagnostice al medicilor pentru stabilirea tiparului - cu cât medicul este mai bun, cu atât mai bună este acuratețea diagnosticului său și cu atât mai bun este modelul atunci când este creat.

Astfel, utilizarea acestor modele nu are ca scop înlocuirea medicilor, ci mai degrabă îmbunătățirea abilităților acestora - abilități de diagnosticare, prin creșterea acurateței diagnosticării și a tratării bolilor. De asemenea, Machine Learning poate crește viteza medicilor în diagnosticare și le oferă șansa de a trata cât mai mulți pacienți.

Imaginați-vă posibilitățile de reformare ale domeniului medical, dacă fiecare medic ar putea aplica cunoștințele tuturor experților în medicină la o simplă apăsare de buton - acesta este, de fapt, potențialul Machine Learning.

Codul sursă poate fi descărcat și vizualizat aici.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects

Alexandru Parvu a mai scris