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

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,41 Мб
  • Опубликовано:
    2012-06-13
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

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

МИНОБРНАУКИ РОССИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»

(ФГБОУ ВПО «ВГУ»)

Факультет Прикладной математики, информатики и механики

Кафедра математических методов исследования операций





Выпускная квалификационная работа бакалавра

НЕЙРОСЕТЕВАЯ ЭКСПЕРТНАЯ СИСТЕМА МЕДИЦИНСКОЙ ДИАГНОСТИКИ

Зав. Кафедрой Баскаков А.Г.

Исполнитель Анашкина Л.А.

Руководитель Каширина И.Л.



Воронеж 2012

ВВЕДЕНИЕ


Моя выпускная работа посвящена разработке нейросетевой экспертной системы медицинской диагностики. Работа такой экспертной системы основана на работе нейронных сетей, а так же их способности обучаться на основе данных.

Медицина- одна из наиболее важных областей применения нейронных сетей.

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

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

Прогнозирование лечения осложняется тем, что каждый пациент индивидуален, у некоторых пациентов могут быть абсолютно разные показатели, а зависимость между данными пациентов и их лечением, представленными в качестве данных для обучения сетей, может быть и не непрерывная, что не даёт возможности построить правильно работающую нейронную сеть. Поэтому было принято решение разделить полученные данные о пациентах на три кластера и построить нейронные сети для каждого из них.

В моей работе для построения нейронных сетей я использовала программу Statistica 7 и её модуль Neural Network. В будущем я планирую закончить собственное приложение для тренировки нейронных сетей, без использования программы Statistica. Так же, в качестве начального результата работы над таким приложением, в моей работе представлен модуль, который проводит кластеризацию информации методом к-средних.

Глава 1. Медицинские экспертные системы

 

.1 Общие сведения

Экспертная система (ЭС) - компьютерная программа, способная заменить специалиста-эксперта в разрешении проблемной ситуации. ЭС начали разрабатываться исследователями искусственного интеллекта в 1970-х годах, а в 1980-х получили коммерческое подкрепление.

В информатике экспертные системы рассматриваются совместно с базами знаний как модели поведения экспертов в определенной области знаний с использованием процедур логического вывода и принятия решений, а базы знаний - как совокупность фактов и правил логического вывода в выбранной предметной области деятельности.

В эпоху массового внедрения персональных компьютеров во все сферы современной жизни естественным является стремление использовать компьютерные системы для поддержки все более сложных видов человеческой деятельности. Одной из них является деятельность врача, ключевой пункт работы которого - принятие диагностических и лечебных решений.

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

В то же время значительный опыт и знания, накопленные врачами-специалистами высокого уровня - экспертами в своей области, позволяют им в большинстве случаев успешно принимать правильные диагностические и лечебные решения.

Поскольку принятие решений является результатом переработки определенной информации о пациенте и базируется на использовании накопленных знаний, можно ожидать, что компьютерные системы искусственного интеллекта и, в частности, экспертные системы (или системы, основанные на знаниях) способны помочь врачу в решении задач диагностики и выбора тактики лечения. Опираясь на знания экспертов, хранящиеся в памяти компьютера, медицинская экспертная система может помочь врачу "узнавать" клинические ситуации, характерные для тех или иных диагнозов или синдромов, оставляя за последним право принять или отвергнуть соответствующее диагностическое или лечебное решение, предложенное системой.

Область исследований, посвященная формализации способов представления знаний и построению экспертных систем (ЭС), называют «инженерией знаний». Этот термин введен Е. Фейгенбаумом и в его трактовке означает «привнесение принципов и средств из области искусственного интеллекта в решение трудных прикладных проблем, требующих знаний экспертов». Иными словами, экспертные системы применяются для решения неформализованных проблем, к которым относятся задачи, обладающие одной или несколькими характеристиками из следующего списка :

задачи не могут быть представлены в числовой форме;

исходные данные и знания о предметной области неоднозначны, неточны, противоречивы;

цели нельзя выразить с помощью четко определенной целевой функции;

не существует однозначного алгоритмического решения задачи.

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

Среди экспертных медицинских систем особое место занимают так называемые самообучающиеся интеллектуальные системы (СИС). Они основаны на методах автоматической классификации ситуаций из реальной практики или на методах обучения на примерах. Наиболее яркий пример СИС - искусственные нейронные сети.

Искусственные нейронные сети (ИНС; artificial neural networks) представляют собой нелинейную систему, позволяющую классифицировать данные гораздо лучше, чем обычно используемые линейные методы. В приложении к медицинской диагностике ИНС дают возможность значительно повысить специфичность метода, не снижая его чувствительность.

Наиболее важным отличием ИНС от остальных методов прогнозирования является возможность конструирования экспертных систем самим врачом-специалистом, который может передать нейронной сети свой индивидуальный опыт и опыт своих коллег или обучать сеть на реальных данных, полученных путем наблюдений. Нейронные сети способны принимать решения, основываясь на выявляемых ими скрытых закономерностях в многомерных данных. Положительное отличительное свойство ИНС состоит в том, что они не программируются, т.е. не используют никаких правил вывода для постановки диагноза, а обучаются делать это на примерах. В ряде случаев ИНС могут демонстрировать удивительные свойства, присущие мозгу человека, в том числе отыскивать закономерности в запутанных данных. Нейронные сети нашли применение во многих областях техники, где они используются для решения многочисленных прикладных задач: в космонавтике, автомобилестроении, банковском и военном деле, страховании, робототехнике, при передаче данных и др. Другое, не менее важное, свойство нейронной сети состоит в способности к обучению и обобщению полученных знаний. Сеть обладает чертами так называемого искусственного интеллекта. Натренированная на ограниченном множестве обучающих выборок, она обобщает накопленную информацию и вырабатывает ожидаемую реакцию применительно к данным, не обрабатывавшимся в процессе обучения . Схематично процесс применения обученной ИНС в медицине показан на рисунке 1.

Рисунок 1. Схема применения обученной искусственной нейронной сети в медицине

1.2 Примеры применения медицинских экспертных систем


Примеры использования экспертных систем в медицине нельзя назвать единичными, они применяются во многих областях здравоохранения. Примечательно, что подавляющее большинство таких работ выполнено зарубежными исследователями и в основном они касаются возможностей использования ИНС в различных клинических ситуациях. Так, например, в области хирургии P.L. Liew и др. на основе ИНС создали систему прогнозирования риска развития желчнокаменной болезни у людей с избыточной массой тела. Авторы ретроспективно изучили антропоморфометрические, анамнестические, клинические и лабораторные данные 117 пациентов с ожирением, прооперированных за период с февраля 1999 по октябрь 2005 г. Была построена ИНС, обученная алгоритмом обратного распространения. Использовались 30 входных переменных, включая клинические данные (пол, возраст, индекс массы тела, сопутствующие заболевания), лабораторные показатели и результаты гистологического исследования. Прогнозирующую ценность ИНС сравнивали с моделью логистической регрессии, обученной на той же базе данных. ИНС продемонстрировала лучшую прогнозирующую ценность и более низкую ошибку, чем модель логистической регрессии. Наиболее важные факторы риска желчнокаменной болезни, по данным обеих методик, - повышенное диастолическое артериальное давление, преморбидный фон, нарушение метаболизма глюкозы и повышение уровня холестерина крови.

В эндоскопии A. Das и др. использовали нейросетевые технологии для сортировки больных с неварикозными кровотечениями из верхних отделов желудочно-кишечного тракта. Была исследована эффективность ИНС, обученной по клиническим и лабораторным данным 387 пациентов с изучаемой патологией, верификация - по данным 200 пациентов с проведением ROC-анализа. На выходе сети имелись две результирующие переменные: наличие или отсутствие признаков продолжающегося кровотечения и потребность в лечебной эндоскопии. Чувствительность нейронной сети составила > 80 %, прогнозирующая ценность - 92-96 %.

В онкоурологии P. Bassi и др. спрогнозировали 5-летнюю выживаемость пациентов, перенесших радикальную цист-эктомию по поводу рака мочевого пузыря. Для этого были разработаны и сравнены ИНС и модель логистической регрессии (МЛР). Выявлено, что единственными статистически достоверными предсказателями 5-летней выживаемости оказались стадия опухоли и наличие или отсутствие прорастания в соседние органы. Чувствительность и специфичность МЛР составили 68,4% и 82,8%, ИНС - 62,7% и 86,1% соответственно. Положительная прогнозирующая ценность МЛР - 78,6%, ИНС - 76,2%, отрицательная прогнозирующая ценность - 73,9% и 76,5% соответственно. Индекс диагностической точности МЛР - 75,9%, ИНС - 76,4%. Таким образом, прогностическая ценность ИНС оказалась сопоставимой с МЛР, но нейросеть продемонстрировала определенные преимущества: ИНС базируется на удобном в работе, понятном программном обеспечении, позволяющем выявлять нелинейные связи между переменными, поэтому она более предпочтительна для использования в прогнозировании.

С. Stephan и др. применили ИНС для автоматизированного анализа биоптата предстательной железы. Методика основывалась на выявлении общего простат-специфического антигена (ПСА) и определении процента свободного ПСА. Чувствительность составила 95%, специфичность - 34%. При дополнении нейросети моделью логистической регрессии специфичность возросла до 95%.

F. K. Chun и др. использовали ИНС для выявления группы риска рака предстательной железы в сравнении с МЛР. ИНС также продемонстрировала более точные прогностические возможности.

В трансплантологии G. Santori и др. применили нейросетевые технологии в прогнозировании отсроченного снижения креатинина сыворотки крови у детей после трансплантации почки. Для выявления корреляции между входными переменными и искомым результатом у пациентов, подлежащих трансплантации почки, была создана искусственная нейронная сеть, обученная на 107 клинических примерах. Были отобраны наиболее важные переменные, коррелирующие с результатом: креатинин сыворотки крови в день пересадки, диурез за первые 24 часа, эффективность гемодиализа, пол реципиента, пол донора, масса тела в первый день после пересадки, возраст. Модель была откалибрована второй выборкой пациентов (n = 41). Точность нейронной сети в обучающей, калибровочной и проверочной выборках составила 89 %; 77% и 87% соответственно. Сравнительный логистический анализ показал общую точность 79%. Чувствительность и специфичность ИНС составили 87%, тогда как метод логистической регрессии продемонстрировал худшие результаты - 37% и 94% соответственно.

В медицинской радиологии F. Dоhler и др. использовали нейронную сеть для классификации изображений МРТ с целью автоматизированного обнаружения гиппокампального склероза. ИНС была обучена на 144 примерах изображений и позволяла классифицировать изменения в ткани головного мозга относительно наличия склеротических изменений. E.E. Gassman и др. создали ИНС для автоматизированной идентификации костных структур и оценили надежность этой методики по сравнению с традиционными. Чувствительность и специфичность методики составили 87% и 82%. Кроме того, сегментацию структур кости ИНС выполнила в 10 раз быстрее.В неврологии A.T. Tzallas и др. применили нейросеть для прогнозирования эпилептических приступов на основе анализа электроэнцефалограмм. Прогностическая точность метода составила 98 - 100 %.

Глава 2. Искусственные нейронные сети

 

.1 Искусственные нейронные сети и их применение


Нейронные сети - это одно из направлений исследований в области искусственного интеллекта, основанное на попытках воспроизвести нервную систему человека. А именно: способность нервной системы обучаться и исправлять ошибки, что должно позволить смоделировать, хотя и достаточно грубо, работу человеческого мозга.

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

2.2 Биологические основы функционирования нейрона


Нервная клетка, сокращенно называемая нейроном, является основным элементом нервной системы. Изучение механизмов функционирования отдельных нейронов и их взаимодействия принципиально важно для познания протекающих в нервной системе процессов поиска, передачи и обработки информации. С этой точки зрения представляется необходимым построить и изучить модель биологического нейрона. Биологический нейрон - это специальная клетка, которая структурно состоит из ядра, тела клетки и отростков. Одной из ключевых задач нейрона является передача электрохимического импульса по всей нейронной сети через доступные связи с другими нейронами. Притом, каждая связь характеризуется некоторой величиной, называемой силой синаптической связи. Эта величина определяет, что произойдет с электрохимическим импульсом при передаче его другому нейрону: либо он усилится, либо он ослабится, либо останется неизменным. Биологическая нейронная сеть обладает высокой степенью связности: на один нейрон может приходиться несколько тысяч связей с другими нейронами. Но, это приблизительное значение и в каждом конкретном случае оно разное. Передача импульсов от одного нейрона к другому порождает определенное возбуждение всей нейронной сети. Величина этого возбуждения определяет реакцию нейронной сети на какие-то входные сигналы.

На рисунке 2 показана структура пары типичных биологических нейронов. Дендриты идут от тела нервной клетки к другим нейронам, где они принимают сигналы в точках соединения, называемых синапсами. Принятые синапсом входные сигналы подводятся к телу нейрона. Здесь они суммируются, причем одни входы стремятся возбудить нейрон, другие - воспрепятствовать его возбуждению. Когда суммарное возбуждение в теле нейрона превышает некоторый порог, нейрон возбуждается, посылая по аксону сигнал другим нейронам. У этой основной функциональной схемы много усложнений и исключений, тем не менее большинство искусственных нейронных сетей моделируют лишь эти простые свойства.

Рисунок 2. Биологический нейрон

2.3 Искусственный нейрон


Искусственный нейрон имитирует в первом приближении свойства биологического нейрона. На вход искусственного нейрона поступает некоторое множество сигналов, каждый из которых является выходом другого нейрона. Каждый вход умножается на соответствующий вес, аналогичный синаптической силе, и все произведения суммируются, определяя уровень активации нейрона. На рис. 1.2 представлена модель, реализующая эту идею.

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

Рисунок 3. Искусственный нейрон

Хотя сетевые парадигмы весьма разнообразны, в основе почти всех их лежит эта конфигурация. Здесь множество входных сигналов, обозначенных x1, x2,…, xn, поступает на искусственный нейрон. Эти входные сигналы, в совокупности обозначаемые вектором X, соответствуют сигналам, приходящим в синапсы биологического нейрона. Каждый сигнал умножается на соответствующий вес w1, w2,…, wn, и поступает на суммирующий блок, обозначенный S. Каждый вес соответствует “силе” одной биологической синаптической связи. (Множество весов в совокупности обозначается вектором W.) Суммирующий блок, соответствующий телу биологического элемента, складывает взвешенные входы алгебраически, создавая выход, который мы будем называть Y.

Рассмотренная простая модель нейрона игнорирует многие свойства своего биологического двойника. Например, она не принимает во внимание задержки во времени, которые воздействуют на динамику системы. Входные сигналы сразу же порождают выходной сигнал. И, что более важно, данная модель нейрона не учитывает воздействий функции частотной модуляции или синхронизирующей функции биологического нейрона, которые ряд исследователей считают решающими.

Несмотря на эти ограничения, сети, построенные на основе этой модели нейрона, обнаруживают свойства, сильно напоминающие биологическую систему. Только время и исследования смогут ответить на вопрос, являются ли подобные совпадения случайными или следствием того, что именно в этой модели нейрона верно схвачены важнейшие черты биологического прототипа.

Функция F нелинейного преобразователя называется активационной функцией нейрона. Исторически первой была модель, в которой в качестве активационной функции использовалась ступенчатая функция или функция единичного скачка:


То есть по аналогии с биологическим нейроном, когда суммарное воздействие на входе превысит критическое значение, генерируется импульс 1. Иначе нейрон остается в состоянии покоя, то есть выдается 0.

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


При уменьшении  сигмоид становится более пологим, в пределе при =0 вырождаясь в горизонтальную линию на уровне 0.5, при увеличении  сигмоид приближается по внешнему виду к функции единичного скачка с порогом в точке x=0.

2.4 Однослойная нейронная сеть


Хотя один нейрон и способен выполнять простейшие процедуры распознавания, сила нейронных вычислений проистекает от соединений нейронов в сетях. Простейшая сеть состоит из группы нейронов, образующих слой, как показано в правой части рисунке 4.

Рисунок 4. Однослойная нейронная сеть

Вершины-круги слева служат лишь для распределения входных сигналов. Они не выполняют каких- либо вычислений, и поэтому не будут считаться слоем. По этой причине они обозначены кругами, чтобы отличать их от вычисляющих нейронов, обозначенных квадратами. Каждый элемент из множества входов Х отдельным весом соединен с каждым искусственным нейроном. А каждый нейрон выдает взвешенную сумму входов в сеть. В искусственных и биологических сетях многие соединения могут отсутствовать, все соединения показаны в целях общности. Могут иметь место также соединения между выходами и входами элементов в слое.

Удобно считать веса элементами матрицы W. Матрица имеет т строк и п столбцов, где m - число входов, а n - число нейронов. Например, w2,3 - это вес, связывающий третий вход со вторым нейроном. Таким образом, вычисление выходного вектора N, компонентами которого являются выходы нейронов, сводится к матричному умножению

N = XW,

где N и Х - векторы-строки.

2.5 Многослойная нейронная сеть


Более крупные и сложные нейронные сети обладают, как правило, и большими вычислительными возможностями. Хотя созданы сети всех конфигураций, какие только можно себе представить, послойная организация нейронов копирует слоистые структуры определенных отделов мозга. Оказалось, что такие многослойные сети обладают большими возможностями, чем однослойные, и в последние годы были разработаны алгоритмы для их обучения.

Многослойные сети могут образовываться каскадами слоев. Выход одного слоя является входом для последующего слоя. Подобная сеть показана на рис. 5 .

Рисунок 5. Двухслойная нейронная сеть.

Многослойные сети не могут привести к увеличению вычислительной мощности по сравнению с однослойной сетью лишь в том случае, если активационная функция между слоями будет нелинейной. Вычисление выхода слоя заключается в умножении входного вектора на первую весовую матрицу с последующим умножением (если отсутствует нелинейная активационная функция) результирующего вектора на вторую весовую матрицу.

(XW1)W2

Так как умножение матриц ассоциативно, то

(W1W2).

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

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

Среди многослойных нейронных сетей можно выделить четыре наиболее значимых и важных класса нейронных сетей:

·              сети прямого распространения - все связи направлены строго от входных нейронов к выходным. Такие сети еще называют многослойным персептроном, по аналогии с обычным персептроном Розенблатта, в котором только один скрытый слой;

·              реккурентные нейронные сети или сети обратного распространения - сигнал в таких сетях с выходных нейронов или нейронов скрытого слоя частично передается обратно на входы нейронов входного слоя;

·              радиально базисные функции - вид многослойной нейронной сети, имеющий скрытый слой из радиальных элементов и выходной слой из линейных элементов. Сети этого типа довольно компактны и быстро обучаются. Радиально базисная сеть обладает следующими особенностями: один скрытый слой, только нейроны скрытого слоя имеют нелинейную активационную функцию и синаптические веса входного и скрытого слоев равны единицы;

·              самоорганизующиеся карты или сеть Кохонена. Такой класс многослойных нейронных сетей, как правило, обучается без учителя и успешно применяется в задачах распознавания. Сети такого класса способны выявлять новизну во входных данных: если после обучения сеть встретится с набором данных, непохожим ни на один из известных образцов, то она не сможет классифицировать такой набор и тем самым выявит его новизну. Сеть Кохонена имеет всего два слоя: входной и выходной, составленный из радиальных элементов.

Глава 3. Обучение искусственных нейронных сетей в программе Statistica 7


3.1 Построение модели


За определенную историю наблюдения за больными, накопился массив данных, которые сохранены в таблице системы STATISTICA. Вид соответствующей Таблицы данных представлен на Рисунке 6.

Рисунок 6. Фрагмент таблицы исходных данных

Целью исследования является построение нейросетевой модели, которая по заданному набору исходных данных (данные обследований больного, результаты анализов, лечение до поступления), на основе назначенного в стационаре лечения выдавала бы прогноз его лечения (значений приём в стационаре И-АПФ\АРА, БАБ, БКК, диуретиков, препаратов центрального действия) с достаточной точностью.

Факт нелинейности задачи не вызывает сомнения. Конечно, можно было бы попробовать решить задачу, воспользовавшись модулем STATISTICA Nonlinear Estimation, а именно при помощи предлагаемых данным модулем итеративных процедур "нащупать" вид функции. Однако здесь есть ряд неприятностей, которые значительно растягивают процедуру поиска решения. Важнейшей из них является формулировка гипотезы о явном виде изучаемой зависимости, которая совсем не является очевидной.

Без дополнительных исследований, о явном виде зависимости сказать что-либо сложно. Тем более, следует упомянуть, что мы не учли еще один фактор. В общем, решение подобной задачи методами нелинейного оценивания может растянуться очень надолго, а может так ни к чему и не привести. В таких критических ситуациях, когда известно, что

зависимость между переменными есть;

зависимость определенно нелинейная;

о явном виде зависимости сказать что-либо сложно,

выручают нейросетевые алгоритмы. Рассмотрим способ решения данной задачи в модуле STATISTICA Neural Networks.

К сожалению, универсальных правил, говорящих о том, какой топологии нейронной сети стоит придерживаться для решения той или иной задачи нет. Поэтому, необходима разумная процедура поиска нужной сети.

Модуль Neural Networks системы STATISTICA включает в себя процедуру, организующую поиск нужной конфигурации сети. Эта процедура заключается в построении и тестировании большого количества сетей с разными архитектурами и послудующем выборе из них той сети, которая лучше всего подходит для решения поставленной задачи. Данный инструмент называется Intelligent Problem Solver. Для запуска модуля Neural Networks необходимо воспользоваться одноименной командой основного меню системы STATISTICA - Statistics. (рисунок 7)

Рисунок 7. Запуск модуля Neural Networks

Очень распространенным является следующий тезис: "нейронные сети представляют собой универсальную структуру, позволяющую реализовать любой алгоритм". Попробуем, слепо веря данному утверждению, построить нейронную сеть, которая бы "уловила" предлагаемую зависимость сразу (имеется в виду, без предварительного, разведочного анализа).

Одним из важнейших вопросов, до сих пор, не решенных современной наукой, является вопрос о структуре нейронный сети, которая была бы способна к воспроизведению искомой многомерной нелинейной зависимости. Да действительно, теорема Колмогорова о полноте, доказанная им еще 1957 году, утверждает, что нейронная сеть способна воспроизвести любую (очень важно - непрерывную) функцию. Однако она не прелагает исследователю рецепта по созданию такой сети. В 1988 году, ряд авторов обобщили теорему Колмогорова и показали, что любая непрерывная функция может быть аппроксимирована трехслойной нейронной сетью с одним скрытым слоем и алгоритмом обратного распространения ошибки с любой степенью точности. Таким образом, в нашем случае положительным аспектом является знание того, что сеть должна быть трехслойной, но опять-таки в распоряжении нет правил, устанавливающих зависимость между "любой степенью точности" и количеством нейронов на промежуточном, так называемом скрытом слое.

Резюмируя все вышесказанное, отметим, что универсальных правил, говорящих о том, какой топологии нейронной сети стоит придерживаться для решения той или иной задачи нет. Поэтому, необходима разумная процедура поиска нужной сети.

Модуль Neural Networks системы STATISTICA включает в себя уникальную процедуру, организующую поиск нужной конфигурации сети. Данный инструмент называется Intelligent Problem Solver. Воспользуемся этим инструментом и осуществим поиск нейронной сети, которая будет способна к решению нашей задачи.

Рисунок 8. Стартовая панель модуля Neural Networks

Во вкладке Quick (Быстрый) данного диалогового окна в разделе Problem Type ( Класс задач) предлагается осуществить выбор того класса задач, с которым мы столкнулись. Нашей целью является построение многомерной зависимости или, другими словами, многомерной нелинейной регрессии. Значит, в разделе Problem Type - Класс задач следует указать Regression (Регрессия).

Определившись с классом задач, необходимо указать переменные для проведения Анализа. Для того чтобы выбрать переменные, воспользуемся кнопкой Variables. При нажатии данной кнопки появляется диалоговое окно Select input (independent), output (dependent) and selector variables (Укажите входные (независимые), выходные (зависимые) и группирующие переменные). В данном диалоговом окне необходимо задать два списка переменных. Continuous outputs (Непрерывные выходящие), в нашем случае, - это переменные Приём в стационаре И-АПФ/АРА, Приём в стационаре БАБ, Приём в стационаре БКК, Приём в стационаре диуретиков и приём в стационае препаратов центрального действия . Continuous inputs (Непрерывные входящие), в нашем примере, - это с 1 по 61 исходный параметр.

Рисунок 9. Выбор переменных для анализа

В разделе Select analysis (Выбор анализа ) доступны две опции Intelligent Problem Solver и Custom Network Designer. Для автоматического подбора параметров нейронной сети требуется первая опция, которая устанавливается по умолчанию. Для продолжения Анализа необходимо нажать кнопку OK.

На следующем шаге появляется диалоговое окно настройки процедуры Intelligent Problem Solver.

Раздел Quick (Быстрый) содержит группу опций, отвечающих за время исполнения алгоритма поиска нейронной сети. На этой вкладке необходимо задать количество сетей, которые необходимо протестировать (выяснить подходят ли они для решения сформулированной задачи), а также указать, сколько из этих сетей войдут в итоговый отчет.

В разделе Networks tested (Количество тестируемых сетей) укажем 100, Networks retained (Количество сохраненных сетей) - 10 (Рисунок 10)

На вкладке Types указывается, какие типы нейронных сетей будут использованы в процессе тестирования. Для решения задачи нелинейной регрессии больше всего подходит многослойный персептрон, поэтому выбираем сети, отмеченные на рисунке 11.

Рисунок 10. Задание количества тестируемых сетей

Рисунок 11. Выбор архитектуры сети

Далее, для организации процесса перебора и тестирования необходимо указать диапазон изменения количества нейронов в каждом слое нейронной сети. Рекомендуемые для данной задачи значения указаны на рисунке 12.

Рисунок 12. Указание размеров обучающей, контрольной и тестовой выборок

Теперь, после задания всех параметров обучения, для запуска процедуры поиска сетей необходимо нажать кнопку ОК.

Состояние алгоритма поиска отображается в диалоговом окне IPS Training In Progress (Процесс поиска сети).

Во время работы алгоритма поиска подходящей нейронной сети в этом диалоговом окне приводится информация о времени исполнения алгоритма, а так же о рассмотренных нейронных сетях. Цель алгоритма поиска - перебор ряда нейросетевых конфигураций и выбор наилучшей с точки зрения минимума ошибки на выходе сети и максимума её производительности.

3.2 Обработка результатов


В результате, каждая обученная и проверенная нейронная конфигурация описывается строкой в информационном поле диалогового окна. Наиболее важными показателями здесь являются Profile (Тип сети), Train (Select, Test) Performance (Производительность сети на обучающем (контрольном, тестовом) множестве) и Train Error (Ошибка обучения).В разделе Profile - Тип сети описывается топология нейронной сети, т.е. класс сетей, к которому она принадлежит (в нашем случае -MLP, то есть персептрон), количество входных и выходных переменных, количество скрытых слоев и число элементов на каждом скрытом слое. На рисунке 13 изображено диалоговое окно результатов поиска сети. Здесь приводятся 10 лучших нейросетевых конфигураций среди 100, рассмотренных программой.

Рисунок 13. Диалоговое окно результатов поиска сети

Для окончательного выбора единственной наилучшей сети сравним эти сети по значениям различных ошибок.

После выделения какой-либо сети в списке на рисунке 13 и нажатия кнопки Descriptive statistics появляется окно с характеристиками данной нейросетевой модели. (Рисунок 14). В нем приводятся значения Data Меаn (среднее данных) для каждого прогнозируемого параметра, Data S.D. (среднеквадратическое отклонение данных), Еrror Mean (средняя ошибка прогноза), Еrror S.D. (среднеквадратическое отклонение ошибки прогноза), Аbs E. Mean (средняя абсолютная ошибка прогноза), SD Ratio (отношение среднеквадратического отклонения ошибки прогноза к среднеквадратическому отклонению данных), Сorrelation (величина корреляции между реальными и спрогнозированными данными).

Рисунок 15. Таблица ошибок регрессии, построенной выбранной сетью

Выберем сеть с наилучшими показателями. Значение ошибки «SD Ratio» является наиболее пригодной для целей сравнения, потому как представляет собой число между 0 и 1, зависит лишь от величины каждой составляющей ошибки (не зависит от знака), а также довольно восприимчиво к выбросам. Эмпирическое правило гласит, что если SD Ratio не превышает значения 0.2, сеть подобрана хорошо, если SD Ratio находится в пределах от 0.2 до 0.4 - то удовлетворительно, а если больше 0,4 - то неудовлетворительно.

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

Исследуем поподробнее выбранную сеть (она имеет номер 13, то есть она в процессе тестирования была сформирована 13-й)

Архитектура этой сети проведена на рисунке 16. Эта сеть имеет 61 вход, 30 нейронов в первом слое, 29 нейронов во втором слое, 5 нейронов в третьем слое и 5 выходов.

Рисунок 16. Архитектура лучшей сети

Графической иллюстрацией качества работы нейронной сети является график зависимости наблюдаемых значений выходных переменных от предсказанных значений. Для построения такого графика необходимо воспользоваться кнопкой Graph X versus Y - График X от Y, расположенной во вкладке Plots - Графики. При этом, предварительно указав в качестве X - axis - Observed - Наблюдаемые, Y - axis - Predicted - Предсказанные. Результаты построения графиков приведены на рисунках17-21.

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

Рисунок 18. Приём в стационаре БАБ


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

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

Если модель построена хорошо, то точки этого графика должны располагаться как можно ближе к прямой, лежащей под углом 45 градусов к осям координат.

На этом графике отчетливо видно отсутствие какой-либо зависимости между наблюдаемыми и предсказанными значениями.

На первый взгляд может показаться, что мы получили, противоречащий теореме Колмогорова о полноте, результат. Однако, как мы уже упоминали ранее, теорема работает только с непрерывными функциями. В нашем же случае, имеются серьезные основания полагать, что функция изучаемого физического процесса не является непрерывной.

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

Для нас крайне желательно такие области локализовать. Для этого осуществим разбиение данных на однородные группы, или проведем кластеризацию.

3.3 Кластеризация в программе Statistica 7 и получение новых результатов


Термин кластерный анализ (впервые ввел Tryon, 1939) в действительности включает в себя набор различных алгоритмов классификации. Общий вопрос, задаваемый исследователями во многих областях, состоит в том, как организовать наблюдаемые данные в наглядные структуры.

Существует точка зрения, что в отличие от многих других статистических процедур, методы кластерного анализа используются в большинстве случаев тогда, когда вы не имеете каких-либо априорных гипотез относительно классов, но все еще находитесь в описательной стадии исследования. Следует понимать, что кластерный анализ определяет "наиболее возможно значимое решение". Поэтому проверка статистической значимости в действительности здесь неприменима, даже в случаях, когда известны p-уровни (как, например, в методе К-средних).

Нашу выборку данных желательно разбить на 2-4 кластера. Выберем количество кластеров 3 и разобъём по методу К -средних.

Общая логика метода: Предположим, уже имеются гипотезы относительно числа кластеров (по наблюдениям или по переменным). Можно указать системе образовать ровно три кластера так, чтобы они были настолько различны, насколько это возможно. Это именно тот тип задач, которые решает алгоритм средних. В общем случае метод K средних строит ровно K различных кластеров, расположенных на возможно больших расстояниях друг от друга.

Выберем в меню пункт Statistics- Multivariate Exploratory Techniques -Cluster Analysis

В открывшемся окне выберем метод К-средних (Рисунок 22).

Рисунок 22. Выбор метода к-средних

Во вкладке Advanced выбираем 3 кластера и 10 итераций по умолчанию (Рисунок 23).

Рисунок 23. Выбор числа кластеров и итераций

Сохраняем полученный результат (Рисунок 24).

Рисунок 24. Выбираем Save Classifications and distances

Рисунок 25. Полученное разбиение на кластеры

Описанным выше способом в разделе 3.1 , строим нейронные сети для каждого кластера.

В результате для каждого кластера найдены нейронные сети, у которых SD Ratio хотя бы для одного из выходов достигает значения от 0 до 0.2. Ниже приведены графики зависимости наблюдаемых значений выходных переменных от предсказанных значений для каждого из трёх кластеров

Кластер 1

Рисунок 26 Приём в стационаре И-АПФ\АРА. Полученное значение SD Ratio 0.16

Рисунок 27 Приём в стационаре БАБ. Полученное значение SD Ratio 0.2

Рисунок 28. Приём в стационаре БКК. Полученное значение SD Ratio 0.17

Рисунок 29. Приём в стационаре диуретиков. Полученное значение SD Ratio 0.14

Рисунок 30. Приём в стационаре препаратов центрального действия. Полученное значение SD Ratio 0.0013

Кластер 2

Рисунок 31. Приём в стационаре И-АПФ\АРА. Полученное значение SD Ratio 0.14

Рисунок 32. Приём в стационаре БАБ. Полученное значение SD Ratio 0.21

Рисунок 33. Приём в стационаре БКК. Полученное значение SD Ratio 0.04


Рисунок 34. Приём в стационаре диуретиков. Полученное значение SD Ratio 0.20

Рисунок 35. Приём в стационаре препаратов центрального действия. Полученное значение SD Ratio 0.02

Кластер 3

Рисунок 36. Приём в стационаре БАБ. Полученное значение SD Ratio 0.016

Рисунок 37. Приём в стационаре И-АПФ\АРА. Полученное значение SD Ratio 0.06

Рисунок 38. Приём в стационаре БКК. Полученное значение SD Ratio 0.07

Рисунок 39. Приём в стационаре диуретиков. Полученное значение SD Ratio 0.08

Рисунок 40. Приём в стационаре препаратов центрального действия. Полученное значение SD Ratio 0.05

На графиках выявлены одиночные выбросы, которые не составляют прямую под 45 градусов. Скорее всего такой результат связан с тем, что характеристики отдельных пациентов сильно отличаются от большинства.

Глава 4. Кластеризация. Метод к-средних. Программная реализация модуля кластеризации методом к-средних

 

.1 Кластерный анализ. Общие сведения


Кластерный анализ - это совокупность методов, позволяющих классифицировать многомерные наблюдения. Термин кластерный анализ, впервые введенный Трионом (Tryon) в 1939 году, включает в себя более 100 различных алгоритмов.

В отличие от задач классификации, кластерный анализ не требует априорных предположений о наборе данных, не накладывает ограничения на представление исследуемых объектов, позволяет анализировать показатели различных типов данных (интервальным данным, частотам, бинарным данным). При этом необходимо помнить, что переменные должны измеряться в сравнимых шкалах. Кластерный анализ позволяет сокращать размерность данных, делать ее наглядной.

Кластерный анализ служит для выявления в данных групп точек, явственно отличающихся друг от друга. Важность решения этой задачи связана с тем, что применение стандартных средств анализа данных (в т.ч. стандартных эконометрических процедур) при наличии кластеров в данных приведет к смещению как точечных оценок (коэффициентов регрессии), так и стандартных ошибок, а значит, и к неверным статистическим выводам. Кроме того, структура данных и схожесть наблюдений могут представлять и самостоятельный интерес.

Кластерный анализ предназначен для разбиения совокупности объектов на однородные группы (кластеры или классы). По сути это задача многомерной классификации данных.

Задача кластерного анализа заключается в том, чтобы на основании данных, содержащихся во множестве Х, разбить множество объектов G на m (m - целое) кластеров (подмножеств) Q1, Q2, …, Qm, так, чтобы каждый объект Gj принадлежал одному и только одному подмножеству разбиения и чтобы объекты, принадлежащие одному и тому же кластеру, были сходными, в то время, как объекты, принадлежащие разным кластерам были разнородными.

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


где xj - представляет собой измерения j-го объекта.

Для решения задачи кластерного анализа необходимо определить понятие сходства и разнородности.

Меры расстояния:

Евклидово расстояние. Это, по-видимому, наиболее общий тип расстояния. Оно попросту является геометрическим расстоянием в многомерном пространстве и вычисляется следующим образом:

расстояние(x,y) = {}1/2

Заметим, что евклидово расстояние (и его квадрат) вычисляется по исходным, а не по стандартизованным данным. Это обычный способ его вычисления, который имеет определенные преимущества (например, расстояние между двумя объектами не изменяется при введении в анализ нового объекта, который может оказаться выбросом). Тем не менее, на расстояния могут сильно влиять различия между осями, по координатам которых вычисляются эти расстояния. К примеру, если одна из осей измерена в сантиметрах, а вы потом переведете ее в миллиметры (умножая значения на 10), то окончательное евклидово расстояние (или квадрат евклидова расстояния), вычисляемое по координатам, сильно изменится, и, как следствие, результаты кластерного анализа могут сильно отличаться от предыдущих.

Квадрат евклидова расстояния. Иногда может возникнуть желание возвести в квадрат стандартное евклидово расстояние, чтобы придать большие веса более отдаленным друг от друга объектам. Это расстояние вычисляется следующим образом:

расстояние(x,y) =

Расстояние городских кварталов (манхэттенское расстояние). Это расстояние является просто средним разностей по координатам. В большинстве случаев эта мера расстояния приводит к таким же результатам, как и для обычного расстояния Евклида. Однако отметим, что для этой меры влияние отдельных больших разностей (выбросов) уменьшается (так как они не возводятся в квадрат). Манхэттенское расстояние вычисляется по формуле:

расстояние(x,y) =

Расстояние Чебышева. Это расстояние может оказаться полезным, когда желают определить два объекта как "различные", если они различаются по какой-либо одной координате (каким-либо одним измерением). Расстояние Чебышева вычисляется по формуле:

расстояние(x,y) = max|xi - yi|

Степенное расстояние. Иногда желают прогрессивно увеличить или уменьшить вес, относящийся к размерности, для которой соответствующие объекты сильно отличаются. Это может быть достигнуто с использованием степенного расстояния. Степенное расстояние вычисляется по формуле:

расстояние(x,y) = ()1/r

где r и p - параметры, определяемые пользователем. Несколько примеров вычислений могут показать, как "работает" эта мера. Параметр p ответственен за постепенное взвешивание разностей по отдельным координатам, параметр r ответственен за прогрессивное взвешивание больших расстояний между объектами. Если оба параметра - r и p, равны двум, то это расстояние совпадает с расстоянием Евклида.

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

расстояние(x,y) = (Количество xi <>yi)/ i

4.2 Классификация методов кластерного анализа


1.      Методы по способу обработки данных

1.1.   Иерархические

Агломеративные методы AGNES(Agglomerative Nesting)

·   CURE

·   ROCK

·   CHAMELEON и др.

Дивизимные методы DIANA (Divisive Analysis)

·   BIRCH

·   MST и т.д.

         Неиерархические методы

Итеративные

·   k- средних (k-means)

·   PAM (k-means+k-medoids)

·   CLOPE

·   LargeItem и т.д.

2.      Методы по способу анализа данных

·   Четкие

·   Нечеткие

3.      Методы по количеству применений алгоритмов кластеризации

-        С одноэтапной кластеризацией

         С многоэтапной кластеризацией

4.      Методы по возможности расширения объёма обрабатываемых данных

·   Масштабируемые

·   Немасштабируемые

5.      Методы по времени выполнения кластеризации

·   Потоковые (on-line)

·   Непотоковые (off-line)

 

4.3 Метод К-средних


В своей работе для кластеризации данных я выбрала метод к-средних.

Алгоритм к-средних строит К кластеров расположенных на возможно больших расстояниях друг от друга. Основной тип задач, которые решает алгоритм- наличие предположений(гипотез) относительно числа кластеров , при этом они должны быть различны настолько, насколько это возможно. Выбор числа К может базироваться на результатах предшествующих исследований, теоретических соображениях или интуиции.

Общая идея алгоритма:

Заданное К число кластеров наблюдения сопоставляются кластерам так, что средние в кластере(для всех переменных) максимально возможно отличаются друг от друга.

Ограничения: небольшой объём данных.

Достоинства: Быстрота использования, простота и понятность алгоритма.

Недостатки: алгоритм слишком чувствителен к выбросам, которые могут искажать среднее, медленная работа на больших базах данных, необходимо задавать число кластеров.

Алгоритм:

1. Выбирается количество кластеров и первоначальные их центры. Каждому кластеру соответствует их центр.

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

выбор К наблюдений для максимизации начального расстояния.

случайный выбор К наблюдений.

выбор первых К наблюдений.

В результате каждый объект назначен определённому кластеру.

. Вычисляется для каждого кластера сумма расстояний от центра, до каждой точки этого кластера. А затем вычисляется расстояние от каждой точки кластера до остальных точек этого кластера. Из всех расстояний выбирается наименьшее. Соответствующая точка становится центром. Объекты перераспределяются по кластерам.

Этот процесс продолжается пока не выполнится одно из условий:

кластерные центры стабилизировались, то есть все наблюдения принадлежат кластеру, которому принадлежали на предыдущей итерации.

число итераций равно максимальному числу итераций.

4.4 Реализация модуля кластеризации методом К-средних


В своём модуле я взяла чиcло кластеров К=3. Всего элементов 100. Данные о пациентах хранятся в базе данных MedTable.DB.

Рисунок 41. Вид приложения

На начальном этапе в качестве центров кластеров я беру первые три элемента. На основе этой кластеризации определяется номер кластера, к которому будет принадлежать новый элемент: в специальном массиве Cl хранятся данные о центре каждого кластера. На экран выводятся данные о принадлежности элементов к кластерам и информация о центрах кластеров. (Рисунок 42)

Рисунок 42. После кластеризации

Новый элемент можно добавить с помощью навигатора, который располагается непосредственно над таблицей (Рисунок 43).

Рисунок 43. Добавление нового элемента

При добавлении нового элемента, номер кластера определяется по принципу минимизации расстояния до центра.

Рисунок 44. Добавление нового элемента к одному из кластеров

Кластеризовать можно только изначальное количество объектов. После добавления новых элементов кластеризация недоступна (Рисунок 45).

Рисунок 45. Попытка кластеризации после добавления новых элементов

ЗАКЛЮЧЕНИЕ


В ходе проделанной работы при помощи программы Ststistica 7 начальные данные о пациентах были разбиты на три кластера методом к-средних, и для каждого кластера были подобраны нейронные сети, наиболее точно прогнозирующие лечение пациентов.

В ходе выполнения поставленных задач была начата разработка самостоятельной нейросетевой экспертной системы медицинской диагностики. Был программно реализован модуль кластеризации данных методом К-средних. При разработке программы был использован язык С++ и среда программирования Embarcadero Rad Studio 2010. программа тестировалась на реальных данных.

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


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

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

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

Статьи:

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

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

Приложение


Приложение 1

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

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

.        ФИО

.        Пол

.        Возраст

.        ИМТ

.        Ожирение

.        Степень АГ

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

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

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

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

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

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

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

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

.        ФК ХСН

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

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

.        Наличие ЧМТ

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

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

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

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

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

.        Менопауза

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

.        ЧСС

.        ЭОС

28.    PQ

.        QRS

.        QT

31.    НЖЭС на ЭКГ

.        ЖЭС на ЭКГ

.        НЖТ

.        АВ-блокада

.        СА-блокада

.        ПБПНПГ

.        ПБЛНПГ

.        НБПНПГ

.        НБЛНПГ

.        анемия

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

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

.        СОЭ

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

.        Глюкоза

.        Холестерин

.        Креатинин

.        КДР

.        ФВ

.        ЛП

.        ПП

.        ПЖ

.        Аорта

.        Дла

.        ТМЖП

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Приложение 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>

//---------------------------------------------------------------------------TForm1 : public TForm

{

__published:// IDE-managed Components*DataSource1;*DBGrid1;*Table1;*DBNavigator1;*Table1FIO;*Table1Sex0f1m;*Table1Age;*Table1IMT;*Table1Ogirenie;*Table1ADdegree;*Table1MaxSad;*Table1MaxDad;*Table1AGDuration;*Table1Hypertensiccrisisfreq;*Table1PresenceQnotQinfmiok;*Table1Stenokardianapryageniya;*Table1Kardnafonehyrp;*Table1Zastoynyeyavlenya;*Table1FKHSN;*Table1Mertcarpresandtype;*Table1ONMKinanamn;*Table1CHMTpresence;*Table1Allergicreactions;*Table1Sahdiab;*Table1Oslognsahdiab;*Table1Operationswithobnarkoz;*Table1NaslotpoAG;*Table1Menopausa;*Table1Body;*Table1CHSS;*Table1EOS;*Table1PQ;*Table1QRS;*Table1QT;*Table1NGESinEKG;*Table1GESinEKG;*Table1NGT;*Table1ABblock;*Table1SAblock;*Table1PBPNPG;*Table1PBLNPG;*Table1NBPNPG;*Table1NBLNPG;*Table1Anemia;*Table1Leycotcitipeniya;*Table1Trombotcitopeniya;*Table1SOE;*Table1Udvesmochi;*Table1Glucoza;*Table1Kholesterin;*Table1Kreatinin;*Table1KDR;*Table1FV;*Table1LP;*Table1PP;*Table1PG;*Table1Aorta;*Table1DLA;*Table1TMGP;*Table1TMGPTZSLG;*Table1IAPFARAdo;*Table1BKKdo;*Table1Diureticdo;*Table1Preptcentrdeystvdo;*Table1BABdo;*Table1SADpripostupl;*Table1DADpripostupl;*Table1PriyomIAPFARA;*Table1PriyomBAB;*Table1PriyomBKK;*Table1PriyomDiuret;*Table1Priyompreperattcentrde;*Button1;*Button2;*Memo1;*Memo2;*Memo3;__fastcall FormCreate(TObject *Sender);__fastcall FormDestroy(TObject *Sender);__fastcall Button1Click(TObject *Sender);__fastcall Button2Click(TObject *Sender);__fastcall DBNavigator1Click(TObject *Sender, TNavigateBtn Button);:// User declarations:// User declarations

__fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------PACKAGE TForm1 *Form1;

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

#endif.cpp

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;NumElem; //текущее количество элементовNumElemSt=100; //количество элементов, которые нужно распределить по кластерамNumClust=3; //количество кластеровconst k=67; //размерность вектораToStep1=false; //перейти к первому шагу алгоритма?Finish=false; //закончить кластеризацию?

struct element

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

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

};*Elem=new element [100];//массив элементов таблицы. Максимум 100*Cl=new element [NumClust]; //массив кластеров__fastcall TForm1::FormCreate(TObject *Sender)

{->Table1->Open();

}

//---------------------------------------------------------------------------__fastcall TForm1::FormDestroy(TObject *Sender)

{->Table1->Close();

}

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

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

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

{ro=0;(int i = 0; i < k; i++) {+= (A[m].Pt[i]-B[n].Pt[i])*(A[m].Pt[i]-B[n].Pt[i]);

}ro;

}

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

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

{ro=0;(int i = 0; i < k; i++) {+= (A[m].Pt[i]-A[n].Pt[i])*(A[m].Pt[i]-A[n].Pt[i]);

}ro;

}__fastcall TForm1::Button1Click(TObject *Sender)

{m= DBGrid1->DataSource->DataSet->RecordCount;s=FloatToStr(m);("Количество элементов "+s);

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{=DBGrid1->DataSource->DataSet->RecordCount;(NumElem==NumElemSt) {i=0;->First();(!Table1->Eof) {(int j = 0; j < k; j++) {[i].Pt[j]=Table1->Fields->Fields[j+1]->AsFloat;

}++;->Next();

}->First();

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

for (int i = 0; i < NumElem; i++) {[i].IsKernel=0;[i].InCluster=0;

}

//задание первоначальных центров кластеров(int i = 0; i < NumClust; i++) {

Elem[i].IsKernel=i+1;[i].InCluster=i+1;[i]=Elem[i];

}(!Finish)

{

// шаг 1(int i = 0; i < NumClust; i++) {(int j = 0; j < NumElem; j++) {(Elem[j].IsKernel==i+1) {[i]=Elem[j];[i].NumIntElements=j;

break;

}

}

}

//рапределение элементов по кластерам(int i = 0; i < NumElem; i++) {

double min=9999999;distance=0;(Elem[i].IsKernel==0) {(int j = 0; j < NumClust; j++) {= DistElCl(Elem,Cl,i,j);(distance<min) {=distance;[i].InCluster=j+1;

}

}

}

}

//шаг 2

ToStep1=false;

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

for (int i = 0; i < NumClust; i++) {distance=0;min;oldnum;newnum;=Cl[i].NumIntElements;(int l = 0; l < NumElem; l++) {((Elem[l].IsKernel==0)&&(Elem[l].InCluster==i+1)) {+=DistEl(Elem, oldnum,l);

}

}=distance;(int j = 0; j < NumElem; j++) {((Elem[j].IsKernel==0)&&(Elem[j].InCluster==i+1)) {=0;(int l = 0; l < NumElem; l++) {(Elem[l].InCluster==i+1) {+=DistEl(Elem, j,l);

}

}(distance<min) {=distance;=j;[oldnum].IsKernel=0;[newnum].IsKernel=i+1;=j;=true;;

}

}

}

}(!ToStep1) {=true;

}

}->Memo1->Lines->Add("Центр кластера 1 ");->Memo1->Text=Form1->Memo1->Text+FloatToStr(Cl[0].NumIntElements);->Memo2->Lines->Add("Центр кластера 2");->Memo2->Text=Form1->Memo2->Text+FloatToStr(Cl[1].NumIntElements);->Memo3->Lines->Add("Центр кластера 3");->Memo3->Text=Form1->Memo3->Text+FloatToStr(Cl[2].NumIntElements);->Memo1->Lines->Add("Кластер 1 ");->Memo2->Lines->Add("Кластер 2 ");->Memo3->Lines->Add("Кластер 3 ");(int i = 0; i < NumElem; i++) {(Elem[i].InCluster==1) {->Memo1->Text=Form1->Memo1->Text+(FloatToStr(i))+";";

}(Elem[i].InCluster==2) {->Memo2->Text=Form1->Memo2->Text+(FloatToStr(i))+";";

}(Elem[i].InCluster==3) {->Memo3->Text=Form1->Memo3->Text+(FloatToStr(i))+";";

}

}

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

}

}

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

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

if (Button ==nbPost) {++;[NumElem-1].IsKernel=0;(int i = 0; i < k; i++) {[NumElem-1].Pt[i]=Table1->Fields->Fields[i+1]->Value;

}min=9999999;(int i = 0; i < NumClust; i++) {distance=0;(int j = 0; j < k; j++) {+=(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j])*(Elem[NumElem-1].Pt[j]-Cl[i].Pt[j]);

}(distance<min)

{=distance;[NumElem-1].InCluster=i+1;

}

}(Elem[NumElem-1].InCluster==1) {->Memo1->Text=Form1->Memo1->Text+(FloatToStr(NumElem-1))+";";

}(Elem[NumElem-1].InCluster==2) {->Memo2->Text=Form1->Memo2->Text+(FloatToStr(NumElem-1))+";";

}(Elem[NumElem-1].InCluster==3) {->Memo3->Text=Form1->Memo3->Text+(FloatToStr(NumElem-1))+";";

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

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

}}

Похожие работы на - Нейросетевая экспертная система медицинской диагностики

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!