Рефераты. Застосування експертних систем у медицині

Експертні системи розпізнавання образів є багаторівневими системами. Верхній рівень повинен приймати кінцеве рішення на основі оброблення логічних висновків нижніх рівнів системи. У цьому випадку системи як нижнього, так і верхнього рівнів, на відміну від традиційних ЕС, роблять висновки не шляхом порівняння з апріорною інформацією, а методами дедукції та індукції.

Один із фундаментальних методів, що використовується в системах розпізнавання образів, ґрунтується на теорії нечітких множин. У цьому випадку класи об'єктів відповідають нечітким множинам, а належність об'єктів до цих класів визначається за допомогою функції належності. Таким чином ЕС отримують необхідні знання з бази знань, генерують висновки про належність об'єктів до певних класів на основі методів дедукції, індукції та аналогії.

Практична частина


Назва програми: Експертна система діагностики хвороб


Мета: Створення системи яка б діагностувала задану хворобу.

Хід роботи

Як працює ЕС ?


Схема роботи експертної системи

 












Для створення експертної системи я використав оболонку ESWIN2, з якою дуже легко працювати. Як видно на схемі вона працює на співставленні варіантів хворого і правила з ідентичними відповідями і результатом про хворобу.


Інструкція користувачу


Запускаємо програмну оболонку-інтерпретатор ESWin2.В головному меню вибрати Файл/Открыть базу знань..., або натиснути кнопку Открыть БЗ на панелі інструментів. У вікні Открытие файла вибрати файл ES.klb. В головному меню вибрати Решение/Поиск рішення, або на панелі інструментів натиснути Решение. З’явиться вікно з першим запитанням. Відповідати на питання треба так: виділити правильну відповідь і натиснути кнопку ОК, або двічі клацнути мишею на обраному варіанті відповіді. Після того, як будуть дані всі відповіді, у нижній частині екрану з’явиться висновок-повідомлення про результат тестування, а також номер правила, за яким цей висновок було отримано.


Вигляд оболонки ESWIN2.

 


                  

 



 





Як будувалася база даних ?


ЕСскладається:

2 фрейми.

Фрейм -це структура для опису стереотипної ситуації (події, об’єкту, поняття), що містить характеристики цієї ситуації (події, об’єкту, поняття) таїх значення.


Frame=цель

parent:

тест:

endf

Frame=Фактори

Parent:


Кашель [Який у вас кашель ?]: (Дуже сильний кашель;Кашель через 2 доби;Кашель понад 2 тижні;ні кашлю немає)

Шкіра[Зміна кольору та стану шкіри]:(Виражена блідність шкіри;Пожовтіння шкіри;Довгий Озноб(гусяча шкіра);Озноб в перші дні;Блідність обличчя;Свербіж шкіри;Сухість шкіри;Нормальний колір шкіри)

Температура[Яка у вас температура ?]:(Висока температура;Мале підвищення температури; Від 38 до 39; Задуха при невисокій температурі;НІ немає температури)

Головний біль[Чи присутній головний біль ?]:(присутній; Сильний пульсуючий біль і запаморочення; Ні немає головного болю)

Біль[Що вас болить?]: (У мязах; Біль в животі; З права; У нирках; У грудях;У суглобах; Без болю)

Ротова порожнина і Горло[Ротова порожнина і Горло]:(Біль при ковтанні; Постійна сухість горла; Без змін)

Слабкість[Відчуваєте слабкість]: (Так присутня, Не спостерігається)

Апетит[Який у вас апетит ?]: (Втрата апетиту;Нормальний)

Нудота[Відчуваєте нудоту ?]: (Так присутня;При головній болі;Ні)

Водовиділення[Водовиділення]: (Темніше від нормального;Мутне;Часте нічне; Нормальне)

Вага[Зміни в вазі ?]: (Втрата ваги; Збільшення маси ваги;Без змін)

EndF

Із правил.

Правила-продукції дозволяють подати знання у вигляді: ЯКЩО (умова) ТО (висновок), де умова — це зразок, за яким здійснюється пошук у базі знань, а висновок — дії або процедури, що виконуються при успішному завершенні пошуку (можуть бути проміжними, тобто такими, що виступають далі як умови, або цільовими, тобто такими, що завершують роботу системи та є результатом розв’язання задачі).


У ESWin правило виглядає як:

RULE Номер_правила

Умова 1

.....

Умова n

DO

Висновок 1

......

Висновок m

ENDR


Для розрахунку всіх можливих комбінацій я використав мову С++,

за допомогою якої я розрахував 21780 правил.

Текст програми для розрахунку комбінацій варіантів відповідей:



#include "stdafx.h"

#include "conio.h"

#include "stdlib.h"

#include "math.h"

long int ** chusla;

int pravulo (int chuslo)

{

         int sum;

         int t;

         sum=0;

         for (int i=1; i<=chuslo;i++)

         {

                   sum=sum+i;

         }

         t=sum;

         return t;

}

void pochatok (int nomer_pravula)

{

         FILE *t;

         t=fopen("spusok.txt","a");

         int kilkist=0;

         for (int j=1; j<=1; j++)

         {

                   fprintf(t,"Rule %d \n", nomer_pravula);

                   for (int i=1; i<=11; i++)

                   {

                            chusla[j][i]=i;

                            fprintf(t,"%d s \n",chusla[j][i]);

                            kilkist=kilkist+1;

                   }

                   fprintf(t," Do \n");

                   fprintf(t," EQ(Тест; У вас ГЕПАТИТ з ймовірністю %d відсотків.) \n",kilkist*100/11);

                   fprintf(t,"EndR \n");

                   fprintf(t,"\n");

         }

         fclose(t);

}

void odna_cufra(int nomer_pravula)

{

         FILE *t;

         t=fopen("spusok.txt","a");

         int kilkist;

         for (int i=1; i<=11; i++)

         {

                   fprintf(t,"Rule %d \n",nomer_pravula+i);

                   kilkist=1;

                   for(int j=1; j<=11;j++)

                   {

                            if (i == chusla[1][j]) {continue;}

                            chusla[i+1][kilkist]=j;

                            fprintf(t,"%d s \n",chusla[i+1][kilkist]);

                            kilkist=kilkist+1;

                   }

                   fprintf(t," Do \n");

                   fprintf(t," EQ(Тест; У вас ГЕПАТИТ з ймовірністю %d відсотків.) \n",(kilkist-1)*100/11);

                   fprintf(t,"EndR \n");

                   fprintf(t,"\n");

         }

         fclose(t);

}

void vuvid(long int nomer_rjadka,long int nomer_pravula,int prp)

{

         FILE *t;

         int l,pr,z=1;

         int n,m=1;

         int k=1;

         int kilkist;

         int propusk[16],propusk1[16],propusk2[16];

         pr=0;

         for (int i=1;i<=11;i++)

         {

                   l=0;

                   for (int j=1;j<=11;j++)

                   {

                            if (i == chusla[nomer_rjadka][j]) {l=l+1;}

                   }

                   if (l == 0) {propusk[k]=i; k=k+1;}

                   if (k == 8) {exit(1);}

         }

         for (int i=1;i<=11;i++)

         {

                   l=0;

                   for (int j=1;j<=11;j++)

                   {

                            if (i == chusla[nomer_rjadka+1][j]) {l=l+1;}

                   }

                   if (l == 0) {propusk1[z]=i; z=z+1;}

         }

         for (int i=1;i<=11;i++)

         {

                   l=0;

                   for (int j=1;j<=11;j++)

                   {

                            if (i == chusla[nomer_rjadka-1][j]) {l=l+1;}

                   }

                   if (l == 0) {propusk2[m]=i; m=m+1;}

         }

         if (propusk[1]<(11-(k-2)))

         {

         n=2;

         if (propusk[1]== propusk2[1]) {propusk[1]=propusk[prp];}

         for (int j=propusk[1]+1;j<=11;j++)

         {

                   if (j== propusk[n]) {n=n+1; continue;}

                   kilkist=1;

                   t=fopen("spusok.txt","a");

                   fprintf(t, "Rule %d\n",nomer_pravula+pr);

                   pr=pr+1;

                   for (int i=1; i<=11-prp; i++)

                   {

                            if (j==chusla[nomer_rjadka][i]) {continue;}

                           

                            chusla[nomer_pravula+(pr-1)][kilkist]=chusla[nomer_rjadka][i];

                            fprintf(t,"%d s \n",chusla[nomer_rjadka][i]);

                            kilkist=kilkist+1;

                   }

                   fprintf(t," Do \n");

                   fprintf(t," EQ(Тест; У вас ГЕПАТИТ з ймовірністю %d відсотків.) \n",(kilkist-1)*100/11);

                   fprintf(t,"EndR \n");

                   fprintf(t,"\n");

                   fclose(t);

         }

         }

         else

         {

                   if (z>k) {prp=prp+1;}

                   vuvid(nomer_rjadka+1,nomer_pravula+pr,prp);

         }

         if (z>k) {prp=prp+1;}

         vuvid(nomer_rjadka+1,nomer_pravula+pr,prp);

}

int _tmain(int argc, _TCHAR* argv[])

{

         FILE *t;

         int nomer_pravula=7261;

         t=fopen("spusok.txt","wt");

         chusla= new long int*[100000];

         for (int i=1; i<=100000; i++)

         {

                   chusla[i]=new long int[16];

         }

        

         pochatok(nomer_pravula);

         odna_cufra(nomer_pravula);

         vuvid(2,nomer_pravula+11,1);

         return 0;

}

Список хворіб які діагностує ЕС:

Пневмонія

Грип та гостра респіраторна інфекція (ГРІ)

Гепатит

Дифтерія

Пієлонефрит

Ангіна

Анемія

Артрит

Мігрень

Діабет

Туберкульозу

Захворювань щитовидної залози

Правила за якими ЕС діагностувала хворобу на 100 %

Захворювання щитовидної залози

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; Сухість шкіри)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; без болю)

EQ(Фактори.Ротова порожнина і Горло; без змін)

EQ(Фактори.Слабкість; так присутня)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; збільшення маси ваги)

Do

EQ(Тест;У вас ЗАХВОРЮВАННЯ ЩИТОВИДНОЇ ЗАЛОЗИз ймовірністю 100%.)

EndR

Мігрень

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; Блідність обличчя)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; сильний пульсуючий біль і запаморочення)

EQ(Фактори.Біль; без болю)

EQ(Фактори.Ротова порожнина і Горло; без змін)

EQ(Фактори.Слабкість; не спостерігається)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; при головній болі)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас МІГРЕНЬ з ймовірністю 100%.)

EndR

Пневмонія

Rule 1

EQ(Фактори.Кашель; дуже сильний кашель;)

EQ(Фактори.Шкіра; виражена блідність шкіри)

EQ(Фактори.Температура; задуха при невисокій температурі)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; у грудях)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість;не спостерігається)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас ПНЕВМОНІЯ з ймовірністю 100%.)

EndR

Ангіна

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; Озноб в перші дні)

EQ(Фактори.Температура; від38 до 39)

EQ(Фактори.Головний біль; присутній)

EQ(Фактори.Біль; без болю)

EQ(Фактори. Ротова порожнина і Горло; біль при ковтанні)

EQ(ФакториСлабкість; так присутня)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас АНГІНА з ймовірністю 100%.)

EndR

Діабет

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; Свербіж шкіри)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; без болю)

EQ(Фактори.Ротова порожнина і Горло; постійна сухість горла)

EQ(Фактори.Слабкість; не спостерігається)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; часте нічне)

EQ(Фактори.Вага; втрата ваги)

Do

EQ(Тест;У вас ДІАБЕТ з ймовірністю 100%.)

EndR

Анемія

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; нормальний колір шкіри)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; без болю)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість; так присутня)

EQ(Фактори.Апетит; Втрата апетиту)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас АНЕМІЯ з ймовірністю 100%.)

EndR

Артрит

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; нормальний колір шкіри)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; у суглобах)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість; так присутня)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; втрата ваги)

Do

EQ(Тест;У вас АРТРИТ з ймовірністю 100%.)

EndR

Гепатит

Rule 1

EQ(Фактори.Кашель; ні кашлю немає;)

EQ(Фактори.Шкіра; пожовтіння шкіри)

EQ(Фактори.Температура; НІ немає температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; з права)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість; так присутня)

EQ(Фактори.Апетит; Втрата апетиту)

EQ(Фактори.Нудота; так присутня)

EQ(Фактори.Водовиділення; темніше фід нормального)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас ГЕПАТИТ з ймовірністю 100%.)

EndR

Гостра рефлекторна інфекція

Rule 1

EQ(Фактори.Кашель; кашель через 2 доби)

EQ(Фактори.Шкіра; Довгий Озноб(гусяча шкіра))

EQ(Фактори.Температура; Висока температура)

EQ(Фактори.Головний біль; присутній)

EQ(Фактори.Біль; У мязах)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість; так присутня)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас ГОСТРА РЕФЛЕКТОРНА ІНФЕКЦІЯ з ймовірністю 100%.)

EndR

Дифтерія

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; нормальний колір шкіри)

EQ(Фактори.Температура; Мале підвищення температури)

EQ(Фактори.Головний біль; присутній)

EQ(Фактори.Біль; біль в животі)

EQ(Фактори.Ротова порожнина і Горло; біль при ковтанні)

EQ(Фактори.Слабкість; так присутня)

EQ(Фактори.Апетит; Втрата апетиту)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; без змін)

Do

EQ(Тест;У вас ДИФТЕРІЯ з ймовірністю 100%.)

EndR

Туберкульоз

Rule 1

EQ(Фактори.Кашель; Кашель понад 2 тижні)

EQ(Фактори.Шкіра; нормальний колір шкіри)

EQ(Фактори.Температура; Мале підвищення температури)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль;у грудях)

EQ(Фактори.Ротова порожнина і Горло; без змін)

EQ(Фактори.Слабкість; так присутня)

EQ(Фактори.Апетит; Втрата апетиту)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; нормальне)

EQ(Фактори.Вага; втрата ваги)

Do

EQ(Тест;У вас ТУБЕРКУЛЬОЗ з ймовірністю 100%.)

EndR

Пієлонефрит

Rule 1

EQ(Фактори.Кашель; ні кашлю немає)

EQ(Фактори.Шкіра; нормальний колір шкіри)

EQ(Фактори.Температура; Висока температура)

EQ(Фактори.Головний біль; ні немає головного болю)

EQ(Фактори.Біль; у нирках)

EQ(Фактори. Ротова порожнина і Горло; без змін)

EQ(ФакториСлабкість; не спостерігається)

EQ(Фактори.Апетит; нормальний)

EQ(Фактори.Нудота; ні)

EQ(Фактори.Водовиділення; мутне)

EQ(Фактори.Вага; без змін)

EQ(Тест;У вас ПІЄЛОНЕФРИТ з ймовірністю 100%.)

EndR



Висновок


В рамках курсової роботи було описано використання ЕС в медицині, проведено діагностику даних хвороб, були ретельно вибрані питання які увійшли до переліку діагностикиі розроблена структура системи, що дозволяє діагностувати хворобу пацієнта.

Результатом виконання даної курсової роботи є експертна система для визначення хвороб(пневмонія,грип та гостра респіраторна інфекція(грі),гепатит,дифтерія,пієлонефрит,ангіна,анемія,артрит, мігрень,діабет,туберкульозу,захворювань щитовидної залози). За допомогою цієї ЕС можна легко визначити захворювання на яке скаржиться пацієнт.

В даній курсовій роботі описано будову і принцип роботи нашої експертної системи.

Представлено програму за допомогою якої розраховувалися всі варіанти правил, а також правила які відповідають 100 %-ій ймовірності діагностування певної хвороби.

Для створення експертної системи я використав оболонку ESWIN2, з якою дуже легко працювати. Як видно на схемі вона працює на співставленні варіантів хворого і правила з ідентичними відповідями і результатом про хворобу.


Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.