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


Автор: kalexi 2.3.2012, 01:34
Необходимо создать экспертную систему определяющую заболевание по наводящим вопросам. Реализация будет на языке НЕ специализированном под данные задачи.
Как я понимаю на каждый вопрос есть 5 вариантов ответа: Нет, Скорее нет, Не знаю, Скорее да, Да.
Я думаю, что, в конце опроса, необходимо дать несколько вариантов ответа по порядку вероятости, т.е. не один ответ. При этом хотелось бы отсеивать лишние вопросы, т.е. если насморк, то про зуд в одном месте уже спрашивать не стоит smile  (правда не знаю надо ли это, может программа определит сразу несколько заболеваний).

Первое, что пришло на ум: есть список заболеваний с симптомами и вопросы. При ответе на вопрос к вероятности каждого заболевания в котором числится симптом о которором идет речь в вопросе прибавляется значение ответа: Нет(-2), Наверное нет(-1), Не знаю(0), Наверное да(+1), Да(+2).

Насколько работоспрособна эта схема? Может есть какие идеи по этому поводу? smile
Спасибо!

Автор: Wolf1994 2.3.2012, 09:50
Цитата(kalexi @  2.3.2012,  01:34 Найти цитируемый пост)
Может есть какие идеи по этому поводу?

Ещё вариант.

Составить дерево. Если выбор сделан, переходить к следующей ветви, если нет - раскрывать все вопросы следующего уровня.

Автор: Mirkes 2.3.2012, 18:07
А можно узнать о каких заболеванях идет речь? Если например о гриппе, ангине и бронхите то можно и не начинать. Прежде чем начинать эту работу хорошо бы найти эксперта и попросить поставить диагноз по ответам на вопросы. Только в качестве эксперта брать не студента или интерна, а действительно эксперта. После многих лет работы с медиками такая простая система вызывает подозрение. Насколько я знаю, такие системы делают на нечеткой логике.
Хотя я не встречал ХОРОШЕГО врача, который в нормальной ситуации поставит диагноз не УВИДЕВ больного (даже при наличии анализов, кардиограмм и т.д.)

Автор: _Y_ 2.3.2012, 23:12
Я гробанул несколько месяцев, попробовав написать что-то подобное: самообучающуюся систему со статистикой симптомов на входе и статистикой диагнозов на выходе. Все по определенной группе заболеваний с достаточно специфическими симптомами. 

Получилось ерунда. Для того, чтобы достоверно научить такую систему, нужно ввести данные, наверное, по десяткам тысяч частных случаев. А у меня были только сотни.

Автор: Mirkes 5.3.2012, 18:22
Цитата(_Y_ @ 2.3.2012,  23:12)
Я гробанул несколько месяцев, попробовав написать что-то подобное: самообучающуюся систему со статистикой симптомов на входе и статистикой диагнозов на выходе. Все по определенной группе заболеваний с достаточно специфическими симптомами. 

Получилось ерунда. Для того, чтобы достоверно научить такую систему, нужно ввести данные, наверное, по десяткам тысяч частных случаев. А у меня были только сотни.

Статистика утверждает простую оценку числа случаев. Если у нас n симптомов на входе, то нужно иметь порядка 2^n случаев.
Это гроб для медицинских приложений. Поскольку при n порядка 100 (а обычно их примерно столько), то 2^n порядка 10^30, то есть бесконечность, поскольку население земного шара несколько меньше 10^10.

Поэтому статистика в медицине обычно не работает.

Автор: _Y_ 5.3.2012, 21:57
Mirkes, да нет. Статобработку влоб я отбросил сразу. Использовал Байесовскую сеть. Она позволяет на меньшем количестве данных выявить взаимосвязь между отдельными явлениями. Что-то типа вот этого http://www.hugin.com, если интересно. Но, при имеющемся количестве данный, связей нашлось мало и рванно. Так что пользы никакой этот труд не принес.

Автор: Pavia 6.3.2012, 07:38
_Y_, А алгоритм один против всех использовали?

Автор: _Y_ 6.3.2012, 11:05
Цитата(Pavia @  6.3.2012,  07:38 Найти цитируемый пост)
алгоритм один против всех

Что-то я не вкурсе. И гугл ничего компактного под это название не выдает. Не дадите ссылку на достойное краткое описание что за алгоритм?

Автор: Pavia 6.3.2012, 11:54
_Y_, Я уже не помню где-то попадалось. Но суть в том что при обучение мы тренируем перспетрон на не только берём элементы из своего класса на который настраиваем. Но и на отрицательных результатах. В качестве отрицательных берём элементы из всех других классов.

Тем самым алгоритм менее требователен к числу образцов.

Автор: _Y_ 6.3.2012, 14:43
Цитата(Pavia @  6.3.2012,  11:54 Найти цитируемый пост)
 Но и на отрицательных результатах. В качестве отрицательных берём элементы из всех других классов.

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

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

Автор: mrgloom 11.3.2012, 15:12
ну если не на специальном языке, то кто мешает написать на все на if'ах  и у каждого вопроса проставить свой весовой коэффициент и у ответа проставить умножающий коэффициент,  потом составить таблицу результатов каким "очкам" соответствует какое заболевание.
но это будет плохая экспертная система.

Автор: Mirkes 11.3.2012, 17:04
Цитата(Pavia @  6.3.2012,  11:54 Найти цитируемый пост)
_Y_, Я уже не помню где-то попадалось. Но суть в том что при обучение мы тренируем перспетрон на не только берём элементы из своего класса на который настраиваем. Но и на отрицательных результатах. В качестве отрицательных берём элементы из всех других классов.Тем самым алгоритм менее требователен к числу образцов. 


Идея хорошая и широко применяемая, однако в медицине она под большим вопросом по двум причинам. Одну четко указал 
Цитата(_Y_ @  6.3.2012,  14:43 Найти цитируемый пост)
Понятно. Проблема медицинских наблюдений в том, что для большинства случаев результат не отрицательный, а вроде как null. В смысле - оценка данного параметра не проводилась.
Типа, одному больному сняли кардиограмму, другому энцефалограмму, третьему.... ну и так далее. Нельзя же назначать вскрытие 100 процентам пациентов  Вот и получаются огромные дыры в данных. 


А вот вторая гораздо существенней - то, что человек болеет ангиной не означает, что он не болеет гастритом и еще десятком заболеваний.
То есть если в базе указано, что данному пациенту поставили диагноз ангина, это не означает, что при обучении постановке диагноза гастрит его можно использовать как пример "здорового" пациента.

Автор: _Y_ 11.3.2012, 19:26
Цитата(Mirkes @  11.3.2012,  17:04 Найти цитируемый пост)
болеет ангиной не означает, что он не болеет гастритом и еще десятком заболеваний

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

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)