Нейросетевая экспертная система медицинской диагностики

Исследование общих сведений о медицинских экспертных системах, способных заменить специалиста-эксперта в разрешении проблемной ситуации. Обучение искусственных нейронных сетей в программе Statistica 7. Обзор программной реализации модуля кластеризации.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.06.2012
Размер файла 5,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

СПИСОК ЛИТЕРАТУРЫ

Осовский С. Нейронные сети для обработки информации/С.Осовский/ пер. с польского И.Д.Рудинского: М : Финансы и статистика, 2002- 344 с.

Ф. Уоссермен нейрокомпьютерная техника: теория и практика/Ф.Уоссермен/ пер. с английского Ю.А. Зуев, В.А.Толенов ЖМир, 1992- 88с.

Каширина И.Л. Нейросетевые технологии. Учебное пособие/И.Л.Каширина //Воронеж:Издательско-полиграфический центр ВГУ,2008г.-72

Статьи:

О.Г.Жариков, А.А.Литвин, В.А. Ковалёв Экспертные системы в медицине/О.Г.Жариков//Медицинские Новости.-2008.-№10

В.В.Киликовский, С.П.Олимпиева, Вл.В.Киликовский КОМПЬЮТЕРНЫЕ МЕДИЦИНСКИЕ КОНСУЛЬТАТИВНЫЕ СИСТЕМЫ, ОСНОВАННЫЕ НА ПРЕДСТАВЛЕНИИ ЗНАНИЙ ЭКСПЕРТА В ВИДЕ СЕМАНТИЧЕСКОЙ СЕТИ/В.В.Киликовский//Медицинский научный и учебно - методический журнал-2001г.-№2

Приложение

Приложение 1

Информация о больном.

В таблице задана информация о больных по следующим параметрам:

1. ФИО

2. Пол

3. Возраст

4. ИМТ

5. Ожирение

6. Степень АГ

7. Максимальное САД

8. Максимальное ДАД

9. Длительность АГ

10. Частота гипетонических кризов без-0, редко-1, часто-2

11. Наличие Q-\не Q-1 инфаркта миокарда

12. Стенокардия напряжения

13. Кардиология на фоне гипертонии нет-0 да-1

14. Наличие застойных явлений

15. ФК ХСН

16. Наличие и вид мерцательной аритмии

17. ОНМК в анамнезе

18. Наличие ЧМТ

19. Наличие аллергических реакций

20. Сахарный диабет

21. Осложнения сахарного диабета

22. Наличие операций под общим наркозом

23. Наследственная отягощенность по АГ

24. Менопауза

25. Тип телосложения

26. ЧСС

27. ЭОС

28. PQ

29. QRS

30. QT

31. НЖЭС на ЭКГ

32. ЖЭС на ЭКГ

33. НЖТ

34. АВ-блокада

35. СА-блокада

36. ПБПНПГ

37. ПБЛНПГ

38. НБПНПГ

39. НБЛНПГ

40. анемия

41. лейкоцитопения

42. тромбоцитопения

43. СОЭ

44. Удельный вес мочи

45. Глюкоза

46. Холестерин

47. Креатинин

48. КДР

49. ФВ

50. ЛП

51. ПП

52. ПЖ

53. Аорта

54. Дла

55. ТМЖП

56. ТМЖП\ТЗСЛЖ

57. Лечение до поступления И-АПФ\АРА

58. Лечение до поступления БКК

59. Лечение до поступления диуретиками

60. Лечение до поступления препаратами центрального действия

61. Лечение до поступления БАБ

62. САД при поступлении

63. ДАД при поступлении

64. Приём в стационаре И-АПФ\АРА

65. Приём в стационаре БАБ

66. Приём в стационаре БКК

67. Приём в стационаре диуретиков

68. Приём в стационаре препаратов центрального действия

69. САД на 3-й день

70. степень снижения САД на 3-й день %

71. Уровень снижения САД на 3-й день >29-1 <29-0

72. ДАД при выписке

73. Степень снижения ДАД при выписке %

74. Уровень снижения ДАД при выписке >20-1 <20-0

75. Непереносимость препарата

Приложение 2

Листинг программы

Unit1.h

#ifndef Unit1H

#define Unit1H

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <DB.hpp>

#include <DBCtrls.hpp>

#include <DBGrids.hpp>

#include <DBTables.hpp>

#include <ExtCtrls.hpp>

#include <Grids.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published:// IDE-managed Components

TDataSource *DataSource1;

TDBGrid *DBGrid1;

TTable *Table1;

TDBNavigator *DBNavigator1;

TStringField *Table1FIO;

TSmallintField *Table1Sex0f1m;

TSmallintField *Table1Age;

TFloatField *Table1IMT;

TSmallintField *Table1Ogirenie;

TSmallintField *Table1ADdegree;

TSmallintField *Table1MaxSad;

TSmallintField *Table1MaxDad;

TSmallintField *Table1AGDuration;

TSmallintField *Table1Hypertensiccrisisfreq;

TSmallintField *Table1PresenceQnotQinfmiok;

TSmallintField *Table1Stenokardianapryageniya;

TSmallintField *Table1Kardnafonehyrp;

TSmallintField *Table1Zastoynyeyavlenya;

TSmallintField *Table1FKHSN;

TSmallintField *Table1Mertcarpresandtype;

TSmallintField *Table1ONMKinanamn;

TSmallintField *Table1CHMTpresence;

TSmallintField *Table1Allergicreactions;

TSmallintField *Table1Sahdiab;

TSmallintField *Table1Oslognsahdiab;

TSmallintField *Table1Operationswithobnarkoz;

TSmallintField *Table1NaslotpoAG;

TSmallintField *Table1Menopausa;

TSmallintField *Table1Body;

TSmallintField *Table1CHSS;

TSmallintField *Table1EOS;

TSmallintField *Table1PQ;

TSmallintField *Table1QRS;

TSmallintField *Table1QT;

TSmallintField *Table1NGESinEKG;

TSmallintField *Table1GESinEKG;

TSmallintField *Table1NGT;

TSmallintField *Table1ABblock;

TSmallintField *Table1SAblock;

TSmallintField *Table1PBPNPG;

TSmallintField *Table1PBLNPG;

TSmallintField *Table1NBPNPG;

TSmallintField *Table1NBLNPG;

TSmallintField *Table1Anemia;

TFloatField *Table1Leycotcitipeniya;

TSmallintField *Table1Trombotcitopeniya;

TSmallintField *Table1SOE;

TFloatField *Table1Udvesmochi;

TFloatField *Table1Glucoza;

TFloatField *Table1Kholesterin;

TFloatField *Table1Kreatinin;

TFloatField *Table1KDR;

TSmallintField *Table1FV;

TFloatField *Table1LP;

TFloatField *Table1PP;

TFloatField *Table1PG;

TFloatField *Table1Aorta;

TSmallintField *Table1DLA;

TFloatField *Table1TMGP;

TFloatField *Table1TMGPTZSLG;

TFloatField *Table1IAPFARAdo;

TFloatField *Table1BKKdo;

TFloatField *Table1Diureticdo;

TFloatField *Table1Preptcentrdeystvdo;

TFloatField *Table1BABdo;

TSmallintField *Table1SADpripostupl;

TSmallintField *Table1DADpripostupl;

TFloatField *Table1PriyomIAPFARA;

TFloatField *Table1PriyomBAB;

TFloatField *Table1PriyomBKK;

TFloatField *Table1PriyomDiuret;

TFloatField *Table1Priyompreperattcentrde;

TButton *Button1;

TButton *Button2;

TMemo *Memo1;

TMemo *Memo2;

TMemo *Memo3;

void __fastcall FormCreate(TObject *Sender);

void __fastcall FormDestroy(TObject *Sender);

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall DBNavigator1Click(TObject *Sender, TNavigateBtn Button);

private:// User declarations

public:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

Unit1.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int NumElem; //текущее количество элементов

int NumElemSt=100; //количество элементов, которые нужно распределить по кластерам

int NumClust=3; //количество кластеров

int const k=67; //размерность вектора

bool ToStep1=false; //перейти к первому шагу алгоритма?

bool Finish=false; //закончить кластеризацию?

struct element

{ double Pt[k]; //данные

int IsKernel; //является ли центром кластера, если да, то какого

int InCluster; //к какому кластеру принадлежит

int NumIntElements; //для массива кластеров порядковый номер элемента-соотвествующего центра кластра

};

element *Elem=new element [100];//массив элементов таблицы. Максимум 100

element *Cl=new element [NumClust]; //массив кластеров

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Form1->Table1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormDestroy(TObject *Sender)

{

Form1->Table1->Close();

}

//---------------------------------------------------------------------------

// расстояние от одного из элементов с номером m до центра кластера под номером n

double DistElCl(element *A, element *B, int m, int n)

{

double ro=0;

for (int i = 0; i < k; i++) {

ro+= (A[m].Pt[i]-B[n].Pt[i])*(A[m].Pt[i]-B[n].Pt[i]);

}

return ro;

}

//расстояние между элементами под номерами m и n

double DistEl(element *A, int m, int n)

{

double ro=0;

for (int i = 0; i < k; i++) {

ro+= (A[m].Pt[i]-A[n].Pt[i])*(A[m].Pt[i]-A[n].Pt[i]);

}

return ro;

}

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int m= DBGrid1->DataSource->DataSet->RecordCount;

String s=FloatToStr(m);

ShowMessage("Количество элементов "+s);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

NumElem=DBGrid1->DataSource->DataSet->RecordCount;

if (NumElem==NumElemSt) {

int i=0;

Table1->First();

while (!Table1->Eof) {

for (int j = 0; j < k; j++) {

Elem[i].Pt[j]=Table1->Fields->Fields[j+1]->AsFloat;

}

i++;

Table1->Next();

}

Table1->First();

// все элементы изначально не принадлежат ни одному кластеру

for (int i = 0; i < NumElem; i++) {

Elem[i].IsKernel=0;

Elem[i].InCluster=0;

}

//задание первоначальных центров кластеров

for (int i = 0; i < NumClust; i++) {

Elem[i].IsKernel=i+1;

Elem[i].InCluster=i+1;

Cl[i]=Elem[i];

}

while (!Finish)

{

// шаг 1

for (int i = 0; i < NumClust; i++) {

for (int j = 0; j < NumElem; j++) {

if (Elem[j].IsKernel==i+1) {

Cl[i]=Elem[j];

Cl[i].NumIntElements=j;

break;

}

}

}

//рапределение элементов по кластерам

for (int i = 0; i < NumElem; i++) {

double min=9999999;

double distance=0;

if (Elem[i].IsKernel==0) {

for (int j = 0; j < NumClust; j++) {

distance= DistElCl(Elem,Cl,i,j);

if (distance<min) {

min=distance;

Elem[i].InCluster=j+1;

}

}

}

}

//шаг 2

ToStep1=false;

//проверка, действительно ли данная точка является центром кластера

for (int i = 0; i < NumClust; i++) {

double distance=0;

double min;

int oldnum;

int newnum;

oldnum=Cl[i].NumIntElements;

for (int l = 0; l < NumElem; l++) {

if ((Elem[l].IsKernel==0)&&(Elem[l].InCluster==i+1)) {

distance+=DistEl(Elem, oldnum,l);

}

}

min=distance;

for (int j = 0; j < NumElem; j++) {

if ((Elem[j].IsKernel==0)&&(Elem[j].InCluster==i+1)) {

distance=0;

for (int l = 0; l < NumElem; l++) {

if (Elem[l].InCluster==i+1) {

distance+=DistEl(Elem, j,l);

}

}

if (distance<min) {

min=distance;

newnum=j;

Elem[oldnum].IsKernel=0;

Elem[newnum].IsKernel=i+1;

oldnum=j;

ToStep1=true;

break;

}

}

}

}

if (!ToStep1) {

Finish=true;

}

}

Form1->Memo1->Lines->Add("Центр кластера 1 ");

Form1->Memo1->Text=Form1->Memo1->Text+FloatToStr(Cl[0].NumIntElements);

Form1->Memo2->Lines->Add("Центр кластера 2");

Form1->Memo2->Text=Form1->Memo2->Text+FloatToStr(Cl[1].NumIntElements);

Form1->Memo3->Lines->Add("Центр кластера 3");

Form1->Memo3->Text=Form1->Memo3->Text+FloatToStr(Cl[2].NumIntElements);

Form1->Memo1->Lines->Add("Кластер 1 ");

Form1->Memo2->Lines->Add("Кластер 2 ");

Form1->Memo3->Lines->Add("Кластер 3 ");

for (int i = 0; i < NumElem; i++) {

if (Elem[i].InCluster==1) {

Form1->Memo1->Text=Form1->Memo1->Text+(FloatToStr(i))+";";

}

if (Elem[i].InCluster==2) {

Form1->Memo2->Text=Form1->Memo2->Text+(FloatToStr(i))+";";

}

if (Elem[i].InCluster==3) {

Form1->Memo3->Text=Form1->Memo3->Text+(FloatToStr(i))+";";

}

}

}

else {

ShowMessage("Кластеризация уже проведена");

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DBNavigator1Click(TObject *Sender, TNavigateBtn Button)

{ //присвоение новому элементу номера кластера при нажатии Post

if (Button ==nbPost) {

NumElem++;

Elem[NumElem-1].IsKernel=0;

for (int i = 0; i < k; i++) {

Elem[NumElem-1].Pt[i]=Table1->Fields->Fields[i+1]->Value;

}

double min=9999999;

for (int i = 0; i < NumClust; i++) {

double distance=0;

for (int j = 0; j < k; j++) {

distance+=(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j])*(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j]);

}

if (distance<min)

{

min=distance;

Elem[NumElem-1].InCluster=i+1;

}

}

if (Elem[NumElem-1].InCluster==1) {

Form1->Memo1->Text=Form1->Memo1->Text+(FloatToStr(NumElem-1))+";";

}

if (Elem[NumElem-1].InCluster==2) {

Form1->Memo2->Text=Form1->Memo2->Text+(FloatToStr(NumElem-1))+";";

}

if (Elem[NumElem-1].InCluster==3) {

Form1->Memo3->Text=Form1->Memo3->Text+(FloatToStr(NumElem-1))+";";

}

String c = FloatToStr(Elem[NumElem-1].InCluster);

ShowMessage("Кластер номер "+c);

}}

Размещено на Allbest.ru


Подобные документы

  • Экспертная система - компьютерная программа, способная частично заменить специалиста-эксперта в разрешении проблемной ситуации. Структура, режимы функционирования, классификация экспертных систем, этапы разработки. Базы знаний интеллектуальных систем.

    реферат [32,2 K], добавлен 04.10.2009

  • Понятие и свойства искусственных нейронных сетей, их функциональное сходство с человеческим мозгом, принцип их работы, области использования. Экспертная система и надежность нейронных сетей. Модель искусственного нейрона с активационной функцией.

    реферат [158,2 K], добавлен 16.03.2011

  • Рост активности в области теории и технической реализации искусственных нейронных сетей. Основные архитектуры нейронных сетей, их общие и функциональные свойства и наиболее распространенные алгоритмы обучения. Решение проблемы мертвых нейронов.

    реферат [347,6 K], добавлен 17.12.2011

  • Сущность и понятие кластеризации, ее цель, задачи, алгоритмы; использование искусственных нейронных сетей для кластеризации данных. Сеть Кохонена, самоорганизующиеся нейронные сети: структура, архитектура; моделирование кластеризации данных в MATLAB NNT.

    дипломная работа [3,1 M], добавлен 21.03.2011

  • Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.

    дипломная работа [1,8 M], добавлен 08.02.2017

  • Этапы решения задачи классификации цифр арабского алфавита на основе нейронных сетей: выбор класса, структуры и пакета нейронной сети, ее обучение, требования к информационной и программной совместимости, составу и параметрам технических средств.

    реферат [111,6 K], добавлен 19.10.2010

  • Особенности нейронных сетей как параллельных вычислительных структур, ассоциируемых с работой человеческого мозга. История искусственных нейронных сетей как универсального инструмента для решения широкого класса задач. Программное обеспечение их работы.

    презентация [582,1 K], добавлен 25.06.2013

  • Обзор и анализ распространенных искусственных нейронных сетей. Функциональное назначение слоев сети, алгоритмы обучения. Описание функциональных возможностей разработанной программной системы. Анализ исследовательской эксплуатации и возможных применений.

    дипломная работа [1,3 M], добавлен 19.05.2011

  • Понятие искусственного нейрона и искусственных нейронных сетей. Сущность процесса обучения нейронной сети и аппроксимации функции. Смысл алгоритма обучения с учителем. Построение и обучение нейронной сети для аппроксимации функции в среде Matlab.

    лабораторная работа [1,1 M], добавлен 05.10.2010

  • Принципы организации и функционирования биологических нейронных сетей. Система соединенных и взаимодействующих между собой простых процессоров. Нейронные сети Маккалока и Питтса. Оценка качества кластеризации. Обучение многослойного персептрона.

    курсовая работа [1,1 M], добавлен 06.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.