TDDC74 Programmering: Abstraktion och modellering
Projekt för Medicinsk teknik
Vt2 2011
I mappen ~TDDC74/material/beslutstod lägggs kod, som kan vara av intresse. Bland annat läggs Scheme kod för olika delar, som kan vara av intresse för projektet.
På denna sida finns beskrivning på ett projekt, som studenter från civ ing-programmet Medicinsk teknik skall kunna välja. I övrigt gäller de allmänna regler som beskrivs på den allmänna projetksidan.
Medicinskt beslutsstödssystem / expertsystem - Mycin
Inom medicin så använder man olika typer av datorbaserade beslutstöd, t ex från givna prover få förslag på en eller flera diagnoser. Inom datavetenskapen och området artificiell intelligens har man tidigare talat om expertsystem. Svårigheterna i ett beslutstödssystem eller expertsystem är att dels att få fram den kunskap, som en expert/läkare har, och representera dessa som regler och dels en regelmotor som givet indata kan följa dessa regler och komma fram till en eller flera slutsatser, t ex i form av diagnoser.Instutionen för medicinsk teknik (IMT) ger en kurs senare i er utbildning, TBMI01 Medicinskt beslutsstöd, 6 hp och där Håkan Örman är kursledare. Där diskuteras mer om olika typer och modeller av system, dessa användning, svagheter och styrkor samt etiska problem vid användning av sådana system. Där kommer troligen även MYCIN att lite djupare studeras.
Detta projetk skulle vara att själva implementera ett enklare beslutstödssystem, med att representera regler och skriva en enkel regelmotor. Vi tänker oss att vi har regler med medicinsk fakta tillgängliga och regelmotor skall t ex kunna ge förslag på en eller flera diagnoser eller se om en diagnos läkaren ger verkar vara möjlig. Denna typ av regler är ofta associerat med någon typ av sannolikhet, "Om patienten har A, B och C är det med 75% att patienten har diagnosen X".
Som modell för projetket tänkte vi använda MYCIN, ett tidigt expertsystem, som utvecklades vid Stanforduniversitet i mitten av 70-talet. Programmet skulle assistera läkare med diagnostisering och behandling av hjärnhinneinflammation och bakterieinfektioner. MYCIN var ett doktorsarbete för: E.H. Shortliffe , A Rule-Based Computer Program for Advising Physicians Regarding Antimicrobial Therapy Selection, oktober 1974.
Börja med att googla på ord som expertsystem, beslutstödssystem och Clinical decision support system samt MYCIN, för att få en första bild av området.
Några referenser som är lämpliga att titta på är följande:
- Buchanan, B.G.; Shortliffe, E.H. (1984). Rule Based Expert Systems: The MYCIN Experiments of the Stanford Heuristic Programming Project. Reading, MA: Addison-Wesley. ISBN 9780201101720. Länk till en e-bok.
Projektbeskrivning
Vi börjar med att skissa vilka komponenter vi behöver i projetket. Här görs en enkel beskrivning med mycket enkla data.Vi börjar med att vi har en databas med fakta och regler.
Fakta kan vara information om en patient, t ex "Karl har 39 graders feber" och "Karl har hög puls" ,
som vi t ex representerar som en lista
(patient Karl (temperatur 39) (puls hög)).
En regel är oftast på formen IF-THEN-villkor. En regel kan vara "OM temperaturen > 38 OCH .... OCH .... DÅ ....".
Vi kan representera regeln som en lista, kanske som (regel nr (om .... och ... och ... då ...)).
Nästa steg kan vara att införa osäkerhet i reglerna, t ex genom att införa en osäkerhetsfaktor i form av en %-sats.
Med 30% sannolikhet gäller regeln.
En regelmotor kan fungera på olika sätt:
- En med framåtslutsatsdragning fungerar på sådant sätt att vi kan ta fakta för en patient och sedan köra igenom alla reglerna. En regel är applicerbar om dess villkor/premisser är sanna. Då kan en slutsats dras. Man kan tänka sig att reglerna fungerar rekursivt i den bemärkelse att en slutsats kan nu i sin tur göra att nya regler är applicerbara och nya slutsatser kan dras..
- En med bakåtslutsatdragning fungerar så att man ställer en fråga, kanske en diagnos, och sedan ser vilka regler som ger svar på denna fråga och för varje sådan regel undersöker om villkoren/premisserna är sanna eller i sin tur går att med andra regler att härleda.
En stor del i ett beslutstödssystem är hur man hanterar osäkerheten. Det finns många teorier
Vi visar först hur man med mer datavetenskapliga metoder kan skapa olika typer av regelmotorer och hur vi kan dra slutsatser, för att senare förhoppningsvis kunna tillämpa ert implementerade system på medicinska data.
Steg att utföra projektet
- Databasen innehåller grundfakta med lämplig representation. Reglerna innehåller villkor/premisser, som direkt
kan härledas från grundfakta eller i sin tur har direkta regler.
Givet en fråga, kan den besvaras med JA eller NEJ. Ingen osäkerhet i reglerna.
Nu i början kan det vara enklare att ha en databas med andra data än medicindata, t ex släktskapsrelationer.
Vi tar ett litet exempel med släktskapsrelationer.
Grundfakta:(Far Karl Lisa) (Far Pelle Karl) (Mor Stina Lisa) (Mor Elsa Karl) (Son Per Karl)
Regler:
(OM (Far Karl Lisa) OCH (Mor Elsa Karl) DÅ (Farmor Elsa Lisa))(OM (Far Karl Per) OCH (Mor Elsa Karl) DÅ (Farmor Elsa Per))(OM (Son Per Karl) DÅ (Far Karl Per)))(OM (Far Karl Anna) OCH (Mor Elsa Karl) DÅ (Farmor Elsa Anna))
Fråga:(Mor Stina Lisa)blir ja, eftersom det är ren grundfakta.(Son Stina Karl)blir nej, efterson varken fakta eller regel finns,(Farmor Elsa Lisa)blir ja, eftersom det finns en regel och båda villkoren är sanna.(Farmor Elsa Per)blir ja, eftersom det finns en regel och(Far Karl Per)kan i sin tur härledas av denna regel.(Farmor Elsa Anna)blir nej. eftersom ingen regel finns.detta första steg är relativt rakt på sak, några funktioner löser problemet.
- I nästa steg kan vi införa variabler för att kunna beskriva mer generella regler. Vi vill säga
(OM (Far ?far ?barn) OCH (Mor ?mor ?far) DÅ (Farmor ?mor ?barn))
där symboler som börjar med ? är variabler, dvs den generella regeln att
"om ?far är FAR till ?barn OCH ?mor är MOR till ?far så är ?mor FARMOR till ?barn".Nu kan vi ställa frågan
(Farmor Elsa Lisa)och variablerna?morbinds tillElsaoch?barntillLisa. Sedan återstår att visa att både(Far ?far Lisa)och(Mor Elsa ?far)kan bli sanna, genom att undersöka bland fakta om det finns en fakta medFaroch medMordär variaben?farkan bindas till samma värde. I detta fall kan vi visa att?farkan bindas tillKarl.Nu har vi ett betydligt mer komplicerat problem. Vi kan ge följande tips.
- Mönstermatchare:
Vi generaliserar fakta så att de inte bara kan ta data på en fix form. Lämpligen kan data representers
som
("fakata-benämning/relation" "data1" "data2" ... "datan"), därdataikan ha något givet format, ett tal, en benämnt värde (hög, mittemellan, låg) eller i sin tur ett strukturerat värde i en lista.För att undersöka om ett fakta med variabler, som vi kallar mönster kan matcha ett grundfakta i databasen, kan det vara lämpligt att ha en mönstermatchare.
(mönsterermatch mönster fakta) = bindningslistaOm ett fakta, som mönster och innehållande variabler, matchar ett grundfakta, returnar funktionen en lista med bindningar av variablerna till de matchade värden.
(mönsterermatch '(Farmor ?mor ?barn) '(Farmor Elsa Lisa))returnerar en bindningslista, t ex en associationslista((?mor . Elsa) (?barn . Lisa))för att ange att det blev en match och bindningaran mellan variablerna och dess matchade värden.(mönsterermatch '(Farmor Stina ?barn) '(Farmor Elsa Lisa))matchar ej och returnerar ett värde för att ange detta, t ex symbolenmatchar-ej.(mönsterermatch '(Farmor Elsa Lisa) '(Farmor Elsa Lisa))utan variabel i mösntret matchar och returnerar en tom lista, som värde, för att markera att det matchade, men inga variabler fanns. - Instansierare:
En funktion, som tar ett mönster och en bindningslista och ersätter alla variabler i mönstret
med värdet av bidningen. Finns inte variabeln i bindningslistan står den kvar.
(instansiera mönster bindningslista) = "nytt grunbdfakta/mönster"(instansiera '(Far ?far Lisa) '((?far . Karl) ...)) = (Far Karl Lisa) - Regelmotorn:
Kan nu implementerasa för olika modeller. Med bakåtslutsatsdragning, som exemplen ovan visar,
så ger man en fråga och en datasbas med grundfakta och regler.
(fråga '(Far Karl Lisa) "databasen med grundfakta och regler") = ja, om vi tänker oss att detta fakta finns direkt i databasen.(fråga '(Far Karl ?barn) "databasen med grundfakta och regler" = ((?barn . Lisa) ... ev flera barn ..). Vi har ju nu fallet att det både kan finnas grundfakta, som ger oss svar, och regler som kan härleda oss nya svar.Det andra fallet framåtslutsatsdragning så har vi en regeldatabas, (ev vissa grundfakta) och vi ger en databas med grundfakta, t ex för en patient eller diverse släktskapsrelationer. Regelmotrn skall då gå igenom alla reglerna och se vilka slutsatser man kan dra.
(härled "databas med regler/(ev grundfakta)" "databas med grundfakta")ger en lista med alla nya fakta som kan härleddas.(härled '((OM (Far ?far ?barn) OCH (Mor ?mor ?far) DÅ (Farmor ?mor ?barn)) ...) '((Far Karl Lisa) (Far Pelle Karl) (Mor Stina Lisa) (Mor Elsa Karl) ...) = ((Farmor Elsa Lisa) ... ev flera slutsatser ...)
- Mönstermatchare:
Vi generaliserar fakta så att de inte bara kan ta data på en fix form. Lämpligen kan data representers
som
- Nu kan det vara lämpligt att hitta på något med medicinsk tillämpning, hitta fakta (vi kanske ger tips var sådan kan hittas), och representera detta enligt den modell som ni har implementerat med grundfakta och regler.
- I reglerna kan man ha kvantifierade i form av värden eller benämnda begrepp (hög, mitemmellan och låg) och då behöver man i reglerna föra in en möjlighet att räkna på värden och ha någon typ av kalkyl som hanterar benämnda värden.
- Sedan kan man utvidga detta till att även hantera osäkerhet. Då är inte släktskapsrelationer så bra att använda, då dessa relationer vanligen? är säkra. Det kräver att ni i själva eller i litteraturen finner en sannolikhetsmodell, som ni kan realisera.
- Ni kan utvidga ert system, så att man har möjlighet i vissa regler, att om inte grundfakta finns, så går man ut och frågar användaren.
- Ni kan utvidga ert system, så att ni sparar vilka regler som använts för att svara på en fråga eller härlett en slutsats, som sedan kan delges användaren.
- Nu är det fritt fram att själv experimentera med olika tillämpningar och modeller. Gå ut på nätet och se om ni hittar något intressant, som är implementerbart i ert system.
Sidansvarig: Anders Märak Leffler
Senast uppdaterad: 2011-04-08
