apprentissage d’arythmies cardiaques par icl et aleph · plan z contexte de l’étude et...

33
Apprentissage d’arythmies cardiaques par ICL et Aleph René Quiniou - Marie-Odile Cordier (IRISA) Céline Fildier (DEA U. Lyon) Guy Carrault - Feng Wang (LTSI) Philippe Mabo (CHU Rennes)

Upload: doanhanh

Post on 25-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Apprentissage d’arythmiescardiaques par ICL et Aleph

René Quiniou - Marie-Odile Cordier (IRISA)Céline Fildier (DEA U. Lyon)Guy Carrault - Feng Wang (LTSI)Philippe Mabo (CHU Rennes)

Plan

z Contexte de l’étude et éléments de cardiologiez Programmation logique inductive pour

l’apprentissage d’arythmiesz ICLz ALEPHz Bilan

Motivations

z Objectif : amélioration des systèmes desurveillance de patients

x réduire le nombre de fausses alarmesx produire de meilleurs diagnosticsx améliorer les explications

z Contexte : monitoring cardiaquex unités de soins intensifsx enregistreurs ambulatoires (Holter)x prothèses : stimulateurs, défibrillateurs

*Caractérisations des situations pathologiques

Méthode

z Utiliser l’ECG (reflète l’activité cardiaque) Èz Codage symbolique de l’ECG en événements

datésy traitement de signal

z Analyse continue du flot d’événementsy reconnaissance de chroniques

z Acquisition d’ensembles de chroniques Èreprésentant des arythmiesy apprentissage automatique

Conduction cardiaque

z

Ê

Activité électrique

Ê

Arythmie : bloc de branche

Ê

Vue du système

z

0 1000 2000 3000 4000

Transformation

d’ECG numérique

en ECG symbolique

Reconnaissancede chroniques

t

P(normal) P(normal)

t0 t1 t2 t3 t4

QRS(normal) QRS(normal)

Arythmie

Base dechroniques

Apprentissagepar PLI

Base deDonnées

Codagesymbolique

du signal

Plusieurs réalisations de la même arythmie

QRS(anormal)

Modèlecardiaque

Hors ligneEn ligne

Apprentissage d’arythmiesà partir d’ECG

z Caractérisation d’une arythmie : Èy ensemble d’événements + contraintes*chronique

z Pourquoi apprendre?y produire des caractérisations discriminantes,

robustes, explicatives, …y prendre en compte les nouveaux capteursy caractériser les poly-arythmies

z Quelle base d’apprentissage?

Apprentissage inductif

z Conjecture de Muggleton :y in domains that are naturally structural, ILP will

significantly outperform simpler feature-based methodsthat can only use preselected attributes

*Avantages de l’apprentissage parprogrammation logique inductive (PLI)y relations du premier ordrey règles plus naturelles et plus intelligibles

Apprentissage multiclassex B une théorie du domainex E l’ensemble de tous les exemplesx Cp les exemples positifs associés à la classe Cx Cn = E - Cp les exemples négatifs de la classe Cx LH le langage spécifiant les clauses acceptables

y pour chaque classe C trouver une théorie clausale(hypothèse) HC ⊂ LH telle que :

x pour tout exemple p de Cp, M(B U p) est une interprétationsatisfaisant la théorie cible HC (B ∧ HC= Cp )

x pour tout exemple n de Cn, M(B U n) est une interprétation nesatisfaisant pas la théorie cible HC (B ∧ HC ∧ Cn≠ �)

Apprentissage multiclasse:données

z Définir :y le langage de représentation des exemples

*base d’exemples

y le langage de représentation des concepts*biais

y la théorie du domaine*lien entre langage des exemples et langage des concepts*connaissance supplémentaire facilitant l’apprentissage

Codage de l’ECG

z Ondes P et QRS (R) Èy morphologie (normale, anormale : déformée, inversée)y datey durée (longue, normale, courte)

z Intervalles PR, PP1, RR1, PP2, RR2 :y durée (longue, normale, courte)

z Suite d’intervalles Èy durée constante, croissante , décroissante,

irrégulière

ICL : représentation d’unexemple d’ECGz Fragment de 5s à 15s : 10 à 40 événements

begin(model(mobitz2_231_1)).mobitz2. p_wave(p1, 124, normal, noPreWave). qrs_complex(r1, 295 , normal, p1). p_wave(p2, 968, normal, r1). p_wave(p3, 1812, normal, p2). qrs_complex(r2, 1967 , normal, p3). p_wave(p4, 2687, normal, r2). p_wave(p5, 3523, normal, p4). qrs_complex(r3, 3669 , normal, p5). …end(model(mobitz2_231_1)).

ICL : langage des concepts

z Arythmie : séquence d’ondes + contraintes Èy class(lbbb) :-

p_wav(P0, normal, _), qrs(R0, abnormal, P0),pr1(P0, R0, normal).p_wav(P1, normal, R0), qrs(R1, abnormal, P1),pr1(P1, R1, normal).

z Biais (DLAB)y fournit la syntaxe du langage des conceptsy induit l’espace de recherche des concepts

Langage des concepts

z Basé sur la notion de cycle cardiaque Èy en adéquation avec la représentation des expertsy permet d’imposer le nombre de cycles È

x lisibilité : validationx chroniques compactes : détection précocex redondance : résistance au bruit

*Souplesse de la spécification

z Réduit l’espace de recherche : efficacitéz Trop spécifique?

Langage des hypothèses

z Spécification d’un cycle cardiaque en DLABz 1-1:[

len-len:[p_wav(P1, 1-1:[normal, abnormal], R0), qrs(R1, 1-1:[normal, abnormal], P1), 0-len:[rr1(R0, R1, 1-1:[short, normal, long]), pr1(P1, R1, 1-1:[short, normal, long])]],

len-len:[p_wav(P1, 1-1:[normal, abnormal], R0), pp1(P0, P1, 1-1:[short, normal, long])],

len-len:[qrs(R1, 1-1:[normal, abnormal], R0), 0-1:[rr1(R0, R1, 1-1:[short, normal, long])]] ],

Langage des hypothèsesz dlab_template( ’

false <-- len-len:[ 1-1:[len-len:[1-1:[ len-len:[p_wav(P0, w_feature, _), qrs(R0, w_feature, P0), 0-1:[pr1(P0,R0, r_feature)]], len-len:[p_wav(P0, w_feature, _), equal(P0,R0)], len-len:[qrs(R0, w_feature, _), 0-0:[rr1(_, R0, r_feature)]] ], 0-1:[len-len:[1-1:[ len-len:[p_wav(P1, w_feature, R0), qrs(R1, w_feature, P1), 0-len:[rr1(R0, R1, r_feature), pr1(P1, R1, r_feature)]], len-len:[p_wav(P1, w_feature, R0), pp1(P0, P1, r_feature), equal(P1, R1)], len-len:[qrs(R1, w_feature, R0), 0-1:[rr1(R0, R1, r_feature)]] ], 0-1:[len-len:[1-1:[ len-len:[p_wav(P2, w_feature, R1), qrs(R2, w_feature, P2),…]]).dlab_variable(r_feature, 1-1, [short, normal, long]).dlab_variable(w_feature, 1-1, [normal, abnormal]).

Ê

Théorie du domaine

z Connaissances facilitant l’apprentissage Èy connaissance générale (utilitaire)y connaissance particulière au domaine*évite de tout apprendre

z Lien entre langage des concepts etreprésentation des données Èy assure l’indépendance entre représentation des

données et des concepts

Expérimentation

z Base d’apprentissagey 4 (5) rythmes : bigéminy, bloc de branche gauche

(lbbb), mobitz 2, normal(, pvc)y 20 ECG réels par classe tirés de la base MIT-BIHy durée d’un ECG : 10 s - 10 à 15 cycles (8 à 30

événements)

y génération d’exemples par simulateur

Expérimentation

z 2 cycles obligatoires Èclass(bigeminy, [20, 0, 0, 0], [0, 20, 20, 20]) :- qrs(R0, abnormal, _), p_wav(P1, normal, R0), qrs(R1, normal, P1).class(lbbb, [0, 20, 0, 0], [20, 0, 20, 20]) :- qrs(R0, abnormal, _), p_wav(P1, normal, R0), qrs(R1, abnormal, P1).class(mobitz2, [0, 0, 17, 0], [20, 20, 3, 20]) :- p_wav(P0, normal, _), equal(P0, R0), p_wav(P1, normal, R0), qrs(R1, normal, P1).class(mobitz2, [0, 0, 3, 0], [20, 20, 17, 20]) :- p_wav(P0, normal, _), equal(P0, R0), p_wav(P1, normal, R0), qrs(R1, abnormal, P1).class(normal, [0, 0, 0, 20], [20, 20, 20, 0]) :- qrs(R0, normal, _), p_wav(P1, normal, R0), qrs(R1, normal, P1).

È

Expérimentation

z 3 cycles obligatoires Èclass(bigeminy, [15, 0, 0, 0], [5, 20, 20, 20]) :- p_wav(P0, normal, _), qrs(R0, normal, P0), qrs(R1, abnormal, R0), p_wav(P2, normal, R1), qrs(R2, normal, P2).class(bigeminy, [5, 0, 0, 0], [15, 20, 20, 20]) :- p_wav(P0, normal, _), qrs(R0, normal, P0), p_wav(P1, normal, R0), qrs(R1, abnormal, P1), p_wav(P2, normal, R1), qrs(R2, normal, P2).

class(mobitz2, [0, 0, 17, 0], [20, 20, 3, 20]) :- p_wav(P0, normal, _), qrs(R0, normal, P0), p_wav(P1, normal, R0), pp1(P0, P1, normal), equal(P1, R1), p_wav(P2, normal, R1), qrs(R2, normal, P2).class(mobitz2, [0, 0, 3, 0], [20, 20, 17, 20]) :- p_wav(P0, normal, _), qrs(R0, abnormal, P0), p_wav(P1, normal, R0), pp1(P0, P1, normal), equal(P1, R1), p_wav(P2, normal, R1), qrs(R2, abnormal, P2).

Expérimentation

z Apprentissage sans onde P 1-1:[ len-len:[

0-1:[len-len:[p_wav(P0, w_feature, _),0-1:[pr1(P0,R, r_feature)]]],qrs(R0, w_feature, 1-1:[P0,_], _),0-0:[rr1(_, R0, r_feature)],0-0:[rr2(_, R0, r_feature)],

0-1:[ len-len:[

0-1:[len-len:[p_wav(P1, w_feature, _),0-1:[pr1(P1,R1, r_feature)]]],qrs(R1, w_feature, 1-1:[P1,R0], R0),rr1(R0, R1, r_feature),0-0:[rr2(_, R1, r_feature)],

0-1:[ len-len:[

0-1:[len-len:[p_wav(P2, w_feature, _),0-1:[pr1(P2,R2, r_feature)]]],qrs(R2, w_feature, 1-1:[P2,R1], R1),rr1(R1, R2, r_feature),0-1:[rr2(R0, R2, r_feature)],...

Expérimentation

z Apprentissage sans onde Pclass(bigeminy, [13, 0, 0, 0], [0, 15, 12, 13]) :- qrs(R0, normal, P0, _), qrs(R1, abnormal, P1, R0), rr1(R0, R1, short).class(lbbb, [0, 15, 0, 0], [13, 0, 12, 13]) :- qrs(R0, abnormal, _, _), qrs(R1, abnormal, P1, R0), rr1(R0, R1, normal), qrs(R2, abnormal, P2, R1), rr1(R1, R2, normal), rr2(R0, R2, normal).class(mobitz2, [0, 0, 10, 0], [13, 15, 2, 13]) :- qrs(R0, normal, P0, _), qrs(R1, normal, P1, R0), rr1(R0, R1, long).class(mobitz2, [0, 0, 2, 0], [13, 15, 10, 13]) :- qrs(R0, abnormal, P0, _), qrs(R1, abnormal, P1, R0), rr1(R0, R1, long).class(normal, [0, 0, 0, 13], [13, 15, 12, 0]) :- qrs(R0, normal, _, _), qrs(R1, normal, P1, R0), rr1(R0, R1, normal), qrs(R2, normal, P2, R1), rr1(R1, R2, normal), rr2(R0, R2, normal).

Validation

z Validation croisée : 1/10 en test Set | Acc TTot FTot | TrAcc | Correct*Incorrect/class #----------------------------------------------------------------- 1 | 1.000 8 0 | 1.000 | [2,1,3,2] * [0,0,0,0] # 2 | 1.000 8 0 | 1.000 | [2,1,3,2] * [0,0,0,0] # 3 | 1.000 8 0 | 1.000 | [1,2,1,4] * [0,0,0,0] # 4 | 1.000 8 0 | 1.000 | [3,2,2,1] * [0,0,0,0] # 5 | 1.000 8 0 | 1.000 | [2,2,3,1] * [0,0,0,0] # 6 | 1.000 8 0 | 1.000 | [2,1,2,3] * [0,0,0,0] # 7 | 1.000 8 0 | 1.000 | [3,3,2,0] * [0,0,0,0] # 8 | 1.000 8 0 | 1.000 | [2,3,1,2] * [0,0,0,0] # 9 | 1.000 8 0 | 1.000 | [1,3,1,3] * [0,0,0,0] # 10 | 1.000 8 0 | 1.000 | [2,2,2,2] * [0,0,0,0] #------------------------------------- Tot: 10.000 80 0

Accuracy: 1.000 (+/-0.000) (Training set Accuracy: 1.000 (+/-0.000))Correlation: 1.000

Aleph : langage desexemples

z Objets + attributs « binarisés »ecg(bigeminy_106_1).

has_wave(bigeminy_106_1,p1_bigeminy_106_1). has_wave(bigeminy_106_1,p2_bigeminy_106_1). has_wave(bigeminy_106_1,p3_bigeminy_106_1). has_wave(bigeminy_106_1,r1_bigeminy_106_1). has_wave(bigeminy_106_1,r2_bigeminy_106_1). has_wave(bigeminy_106_1,r3_bigeminy_106_1). has_wave(bigeminy_106_1,r4_bigeminy_106_1).

p_wave(p1_bigeminy_106_1). p_wave(p2_bigeminy_106_1). p_wave(p3_bigeminy_106_1).

qrs(r1_bigeminy_106_1). qrs(r2_bigeminy_106_1). qrs(r3_bigeminy_106_1). qrs(r4_bigeminy_106_1).

Attributs d’une onde

shape(p1_bigeminy_106_1,normal).

time(p1_bigeminy_106_1,872).

pre_wave(p3_bigeminy_106_1,r4_bigeminy_106_1).

pp1(p2_bigeminy_106_1,p3_bigeminy_106_1,long).

pp2(p1_bigeminy_106_1,p3_bigeminy_106_1,long).

pr1(p1_bigeminy_106_1,r1_bigeminy_106_1,normal).

rr1(r1_bigeminy_106_1,r2_bigeminy_106_1,short).

rr2(r1_bigeminy_106_1,r3_bigeminy_106_1,normal).

Théorie du domaine :connaissances a priori

has_wave(E,qrs,N,S,Prec) :- has_wave(E,N), (p_wave(N) ; qrs(N)), shape(N,S), pre_wave(N,Prec).

has_wave(E,N1,T1,S1,N2,T2,S2) :- has_wave(E,N1), (qrs(N1); p_wave(N1)),

time(N1,T1), shape(N1,S1), suc(N1,N2), has_wave(E,N2), (qrs(N2); p_wave(N2)),

time(N2,T2), shape(N2,S2).

Expérimentation6 classes - has_wave/2

bigeminy(A) :- %7.09 has_wave(A,B), shape(B,abnormal), has_wave(A,C), rr1(C,B,short).lbbb(A) :- %24.83 has_wave(A,B), shape(B,abnormal), has_wave(A,C), rr1(C,B,normal).mobitz2(A) :- %1.29 has_wave(A,B), has_wave(A,C), rr2(C,B,long).normal(A) :- %17.42 has_wave(A,B), has_wave(A,C), shape(C,normal), rr1(C,B,normal).pvc105(A) :- %6268.27 has_wave(A,B), has_wave(A,C), rr1(C,B,short), has_wave(A,D), pr2(D,B,normal).pvc108(A) :- %4782.19 has_wave(A,B), has_wave(A,C), rr2(C,B,long), has_wave(A,D), rr2(D,C,normal).

Expérimentation6 classes - has_wave/7

bigeminy(A) :- %1.12 has_wave(A,B,p_wave,normal,C,qrs,normal), has_wave(A,D,qrs,abnormal,E,p_wave,normal), rr1(C,D,short), has_wave(A,F,qrs,abnormal,B,p_wave,normal).lbbb(A) :- %0.35 has_wave(A,B,p_wave,normal,C,qrs,abnormal), has_wave(A,D,qrs,abnormal,B,p_wave,normal).mobitz2(A) :- %0.39 has_wave(A,B,p_wave,normal,C,p_wave,normal), has_wave(A,D,p_wave,normal,E,p_wave,normal), pp1(E,B,normal).pvc105(A) :- %2.74 has_wave(A,B,qrs,normal,C,p_wave,normal), has_wave(A,D,qrs,normal,E,qrs,normal), rr1(E,B,normal).pvc108(A) :- %12.34 has_wave(A,B,p_wave,normal,C,qrs,normal), has_wave(A,D,qrs,normal,E,p_wave,normal), pp2(B,E,long).

Influence de l’apport destructurebigeminy(A) :- has_wave(A,B), shape(B,abnormal), has_wave(A,C), shape(C,normal), qrs(C).bigeminy(A) :- has_wave(A,qrs,B,abnormal,C), has_wave(A,qrs,D,normal,E).bigeminy(A) :- has_wave(A,B,p_wave,normal,C,qrs,normal), has_wave(A,D,qrs,abnormal,B,p_wave,normal).

bigeminy(A) :- has_wave(A,B), shape(B,abnormal), has_wave(A,C), rr1(C,B,short).bigeminy(A) :- has_wave(A,p_wave,B,normal,C), has_wave(A,p_wave,D,normal,E), has_wave(A,qrs,F,normal,D), rr1(F,C,short), has_wave(A,qrs,E,abnormal,G).bigeminy(A) :- has_wave(A,B,p_wave,normal,C,qrs,normal), has_wave(A,D,qrs,abnormal,E,p_wave,normal), rr1(C,D,short), has_wave(A,F,qrs,abnormal,B,p_wave,normal).

Influence de l’apport destructure

lbbb(A) :- has_wave(A,B), shape(B,abnormal), has_wave(A,C), rr1(C,B,normal).lbbb(A) :- has_wave(A,p_wave,B,normal,C), has_wave(A,qrs,D,abnormal,B), rr1(C,D,normal).lbbb(A) :- has_wave(A,B,p_wave,normal,C,qrs,abnormal), has_wave(A,D,qrs,abnormal,B,p_wave,normal).

Bilanz ICL

y + facilité d’expression des contraintes syntaxiquesy + lisibilité des règles apprisesy - apprentissage « biaisé »y - vitesse

z Alephy + vitessey + boîte à outilsy - règles « obscures »y - expression du biais