Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
1

Программа диагностики заболеваний

12.08.2019, 10:37. Показов 2348. Ответов 31
Метки нет (Все метки)

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

или же есть смысл создать list из потомков класса болезнь и проходить по нему через foreach?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.08.2019, 10:37
Ответы с готовыми решениями:

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

Программа диагностики рентабельности предприятия
тема: Программа диагностики рентабельности предприятия. Исходные данные и основные требования:...

Программа диагностики ошибок
Тема курсовой работы: Программа диагностики ошибок. Программа обнаруживает в тексте программы на...

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

31
322 / 301 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
12.08.2019, 11:06 2
Цитата Сообщение от koteyko_r Посмотреть сообщение
Думаю создать класс болезнь и от неё унаследовать конкретные заболевания.
Если вы для себя делаете или для продакшена, а не для кого-то на "отвянь от меня", то вы замучаетесь создавать потомков для каждой конкретной болезни, ибо их миллион и постоянно появляются новые.

Можно унаследовать какое-то семейство болезней по определенным признакам, а название болезни должно быть полем класса. Исключительно мое мнение
2
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
12.08.2019, 11:14  [ТС] 3
Добавлено через 1 минуту
Цитата Сообщение от netBool Посмотреть сообщение
Если вы для себя делаете или для продакшена, а не для кого-то на "отвянь от меня", то вы замучаетесь создавать потомков для каждой конкретной болезни, ибо их миллион и постоянно появляются новые.

Можно унаследовать какое-то семейство болезней по определенным признакам, а название болезни должно быть полем класса. Исключительно мое мнение
Спасибо за ответ.
Собираюсь делать для узкоспециализированной сферы, так что прям много болезней там не будет
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
12.08.2019, 11:23 4
Цитата Сообщение от koteyko_r Посмотреть сообщение
Думаю создать класс болезнь и от неё унаследовать конкретные заболевания. Как тогда можно будет выполнить метод, который будет проходиться по всем потомкам этого класса?
Думаю, стоит начать с изучения математической статистики, работы MYCIN и построения математической модели всего этого дела. А классы тут особо не при делах будут.
2
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
12.08.2019, 11:23 5
Цитата Сообщение от koteyko_r Посмотреть сообщение
Собираюсь делать для узкоспециализированной сферы, так что прям много болезней там не будет
Думаю, здесь вообще наследовать ничего не надо.

Есть список болезней и список симптомов. Их соотношение - многие-ко-многим (как в базе данных).
Одно из решений - сделать std::multimap<болезнь, симптом> и std::multimap<симптом, болезнь>. Таким образом ты сможешь по симптому выбрать болезни, которым он соответствует, либо наоборот.
2
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
12.08.2019, 11:28 6
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Одно из решений - сделать std::multimap<болезнь, симптом> и std::multimap<симптом, болезнь>. Таким образом ты сможешь по симптому выбрать болезни, которым он соответствует, либо наоборот.
Да не так же, не так.
Берете список страдающих мигренью. Пересчитываете.
Берете список страдающих мигренью и ослиной сыпью. Пересчитываете.
Делите одно на другое, получаете вероятность того что больной жалующийся на мигрень, страдает ослиной сыпью.
Потом выясняете что ослиной сыпью может страдать больной с абсолютно любыми симптомами. Просто, вероятность этого разная.
А потом начинается матан.
0
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
12.08.2019, 11:44 7
Цитата Сообщение от Renji Посмотреть сообщение
Да не так же, не так.
Берете список страдающих мигренью. Пересчитываете.
Берёте откуда, из воздуха?
Прежде, чем брать и пересчитывать, надо сначала организовать данные - спроектировать структуру, состав, отношения и т.д.
0
2723 / 1887 / 559
Регистрация: 05.06.2014
Сообщений: 5,499
12.08.2019, 11:50 8
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Берёте откуда, из воздуха?
Это уже к ТС вопрос, на основе каких данных он код собрался строить. У него есть какая-то база историй болезни? Просто справочник с симптомами, без каких либо оценок "мигрень с вероятностью 80% означает ослиную сыпь"? Одно голое желание сделать экспертную систему? Именно эти вопросы и будут составлять львиную часть работы над задачей.
0
0 / 0 / 0
Регистрация: 30.11.2017
Сообщений: 6
12.08.2019, 11:53  [ТС] 9
Цитата Сообщение от Renji Посмотреть сообщение
Это уже к ТС вопрос, на основе каких данных он код собрался строить. У него есть какая-то база историй болезни? Просто справочник с симптомами, без каких либо оценок "мигрень с вероятностью 80% означает ослиную сыпь"? Одно голое желание сделать экспертную систему? Именно эти вопросы и будут составлять львиную часть работы над задачей.
помимо симптомов есть также результаты анализов, которые и дают отличить одно от другого. И опираться всё будет на симптомы + анализы

+ также имеется доступ к архивам 3х больниц в разных городах. Ток я пока не знаю,как это присобачить
0
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
12.08.2019, 12:01 10
Цитата Сообщение от koteyko_r Посмотреть сообщение
помимо симптомов есть также результаты анализов, которые и дают отличить одно от другого. И опираться всё будет на симптомы + анализы
+ также имеется доступ к архивам 3х больниц в разных городах. Ток я пока не знаю,как это присобачит
Насколько я понимаю - здесь задача подключиться к базам даных, выбрать из них какие-то данные по условию и обработать их. С++ для это не очень-то и нужен, проще сделать на каких-нибудь скриптах
0
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
12.08.2019, 12:22 11
Лучший ответ Сообщение было отмечено koteyko_r как решение

Решение

Цитата Сообщение от koteyko_r Посмотреть сообщение
Думаю создать класс болезнь и от неё унаследовать конкретные заболевания. Как тогда можно будет выполнить метод, который будет проходиться по всем потомкам этого класса?
Не нужно проходиться по потомкам, это гиблое дело. Нужно просто составить список заболеваний, а для каждого заболевания составить список симптомов с весом симптома для этого заболевания.

Например:
Вы создаете класс "Заболевание". У этого класса есть внутренне поле "Симптом", которое является списком.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct Symptom
{
    string name; // наименование симптома
    /* еще какие-то сопутствующие данные, например описание симптома */
};
 
struct Disease
{
    string name; // наименование заболевания
    map<Symptom,int> symptoms; // <симптом,вес> - список симптомов заболевания, 
    // где "вес" определяет насколько симптом относится к этому заболеванию по какой-либо шкале, 
    // например от 0 до 10 в баллах. 
    // Или можно привязаться к более "медицинской" шкале - количество проявлений 
    // на группу человек с данным заболеванием, это уже нужно со специалистом обговаривать.
}
 
vector<Disease> diseases; // все заболевания, известные программе (внесенные программистом или пользователем)
 
map<Disease,int> possibleDiseases; // список возможных заболеваний в соответствии с симптомами
map<Symptom,int> possibleSymptoms; // список всех симптомов всех возможных заболеваний
1. Пользователь вводит список симптомов с клавиатуры (или выбирает из предлагаемых).
2. Программа пробегает по списку diseases и сопоставляет симптомы. Если какой-то симптом соответствует списку, отправляем все симптомы заболевания текущей итерации в possibleSymptoms. Если симптом уже был в списке, то увеличиваем его вес. Само заболевание добавляем в список possibleDiseases.
3. Собрав список возможных заболеваний, высчитываем вес заболевания и сортируем possibleDiseases в порядке убывания - в самом "верху" списка окажется самое подходящее заболевание, затем менее релевантные.

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

Например, продолжительный кашель может относиться к разным болезням: аллергическая реакция, бронхит и ангина.
Для первых двух заболеваний кашель будет иметь вес 10, для последнего - 6 (грубо говоря).
Температура при этом будет являться определяющим фактором: если температуры нет, то это определенно аллергическая реакция, а если есть - либо бронхит, либо ангина. Значит, при расчете финального веса, нужно учесть этот симптом любым способом: вычесть его или еще что.
Ну а определить однозначно бронхит это или ангина можно по третьему симптому: тошнота, рвота, которые имеют высокий вес при бронхите.

Итого имеем:
Код
Disease1.name = "Аллергическая реакция";
Disease1.symptoms = { { Кашель,10 }, { Температура,0}, {Тошнота,0} };

Disease2.name = "Ангина";
Disease2.symptoms = { { Кашель,6 }, { Температура,10}, {Тошнота,0} };

Disease3.name = "Бронхит";
Disease3.symptoms = { { Кашель,10 }, { Температура,10}, {Тошнота,5} };
Допустим, у пациента кашель с температурой.
Карта симптомов будет выглядеть как-то так:
Код
possibleSymptoms = {
Кашель: 26, // сложил вес кашля со всех возможных заболеваний
Температура: 20, // тоже самое
Тошнота: 5 // ...
}
А карта заболеваний:
Код
possibleDiseases = {
"Ангина": 46, // (кашель+температура)
"Бронхит": 41, // (кашель+температура-тошнота). Тошнота с минусом, потому что её нет в анамнезе
"Аллергическая реакция": 1 // (кашель-температура-тошнота). Темп. с "-", потому что она не соответствует заболеванию
}
Итого: пациент болен ангиной.

Это один из примеров алгоритма, не гарантирую его качества.
Повторю: всё зависит исключительно от алгоритма определения веса заболевания.
2
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
12.08.2019, 17:02 12
Мне кажется, вы начинаете с конца задачи.
Я бы начала с поиска в научной литературе. Наверняка не выпервый пытаетесь такое сделать
По результатам обзора литературы станет понятно как построить связь симптом-болезнь и что для этого нужно, можно ли определить веса, о которых говорили здесь раньше и достаточно ли для этого данных, которые доступны вам. Наверняка, обнаружатся более сложные закономерности. Например, некоторые симптомы, наверняка, нельзя рассматривать как независимые, а значит просто "в лоб" перемножать веса иногда нельзя - будет некорректный результат...
Как показывает практика, подавляющее большинство математических моделей медицинских процессов упирается в первую очередь к оценке параметров и разумного использования экспериментальных данных.
Так же из обзора литературы вам станет понятно чем уникальна именно ваша ситуация, ваши данные и, наверняка, как именно ваша модель будет отличаться от остальных. Раз вы ее хотите сделать узкоспециализированной, то, наверняка ее получится сделать эффективнее, чем модели для более широкого спектра заболеваний.
Как обработать ваши статистически (а это вам будет просто необходимо!) Возможно захотите использовать R? А может и екселя хватит...
А вот потом, когда все связи и структура модели будет продумана (без привязи к методам программирования), уже думать об огранизации приложения.
Как результат я бы, при удачном раскладе и хорошем научном рководителе (лучше двух - одного медика, а второго математика строящего мат.модели), ожидала бы 3-4 научные статьи:
1) обзор литературы (очень часто она потом идет за основывведения для диссера)
2) сама модель, с обоснованиями, выбором параметров и т.п. (основной научный труд)
3) (возможно) оценка еще неоцененных (или плохо оцененых) ранее параметров, разумеется, на базе доступных вам данных и с использованием вашей модели.
4) само приложение (в каком-нибудь специфическом журнале)
Итого - диссертация или почти. Как вам? ))))
2
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
12.08.2019, 17:46 13
Крашеная, беда в том, что врачи начнут вешаться. Зачем учиться 6 лет (возиться с трупами, фекалиями и мочой и пр. и бр-р-р)? А потом интернатура... Потом годы - накопление опыта ассистируя и на вторых ролях, пока не дадут самостоятельную практику. Это всё не нужно. Любой больной сможет пальпировать живот, выполнить несложный анализ и томографию. Некоторые покупают примочки которые можно подключить по usb к компу и насладиться видом стада сперматозоидов. Жизнь идёт вперёд. Люди сами вводят себе и другим внутримышечно, внутривенно, аннально и т.д. А врачам... - так им и надо! Пусть учатся пользоваться ПО. Иначе ни как.
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
12.08.2019, 18:00 14
Цитата Сообщение от IGPIGP Посмотреть сообщение
беда в том, что врачи начнут вешаться. Зачем учиться 6 лет (возиться с трупами, фекалиями и мочой и пр. и бр-р-р)? А потом интернатура... Потом годы - накопление опыта ассистируя и на вторых ролях, пока не дадут самостоятельную практику. Это всё не нужно. Любой больной сможет пальпировать живот, выполнить несложный анализ и томографию. Некоторые покупают примочки которые можно подключить по usb к компу и насладиться видом стада сперматозоидов. Жизнь идёт вперёд. Люди сами вводят себе и другим внутримышечно, внутривенно, аннально и т.д. А врачам... - так им и надо! Пусть учатся пользоваться ПО. Иначе ни как.
Нет, не думаю. Живого врача вряд ли скоро заменят роботы ))
Вы пробовали у себя когда-нибудь симптомы определить и посмотреть в справочнике диагноз? Были раньше такие здоровые книжки для этого... Я уж не буду о давно известном "сразу 50% описанных симптомов у себя почувствуешь. Даже если откинуть это, обычный пациент не в состоянии определить симптом достаточно внятно (кроме самых простых и распространенных). Например, у моего сына была сыпь...мелкие прыщечки... да фиг знает что за сыпь! Аллергия? Грибок? бактериальное? А может MRSA???? Попросить обычный анализ? Заплатить за срочный? Анализ чего? всего? Может в скорую сразу (а вдруг MRSA)? Только опытный врач, который уже только за обучение насмотрелся на разные виды прыщечков до тошнотиков, сможет сообразить на какой анализ вас дальше направить и как срочно. Недавно у меня заболела коленка... я всегда думала, я хорошо описываю свои ощущения... ну история та же - только врач поймет, который 100500 коленок видел.
Возвращаясь к теме. Такая программа, которая задумана автором, на мой взгляд, была бы очень полезным инструментом для ВРАЧЕЙ (а не для пациентов!). Особенно если хорошо продумать модель и статистику проработать.
3
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
12.08.2019, 18:09 15
Цитата Сообщение от Крашеная Посмотреть сообщение
Нет, не думаю. Живого врача вряд ли скоро заменят роботы
Мой пост - сарказм) Моя мать всю жизнь работала в больнице (областной) и я всё голопузое детство пробегал по отделению и огромному двору больницы. Кстати говоря, я по жизни не плохой лекарь. Приходилось сдавать экзамены (на уровне первой помощи, но многие и этого не умеют). Умею чистить раны, ставить шины, жгуты, вводить противошоковое, обезболивающее, антибиотики, нестероидные противо-воспалительные препараты и пр. Несложная диагностика (травматическая, в основном) и кое-какие болячки с которыми пришлось столкнуться у близких. Я прекрасно понимаю, насколько данная область далека от автоматизации. Хотя некоторые вещи разрабатываются, конечно. Но не диагностика.
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
12.08.2019, 18:25 16
Цитата Сообщение от IGPIGP Посмотреть сообщение
Приходилось сдавать экзамены (на уровне первой помощи, но многие и этого не умеют). Умею чистить раны, ставить шины, жгуты, вводить противошоковое, обезболивающее, антибиотики, нестероидные противо-воспалительные препараты и пр. Несложная диагностика (травматическая, в основном) и кое-какие болячки с которыми пришлось столкнуться у близких.
А я не умею. Я занималась математическим моделированием динамики распростронения и контроля антибиотико-резистентных заболеваний в больничных условиях )))
И знаю сколько подводных камней может оказаться при разработке, казалось бы, самой простой модели )) И тоже как вы думаю:
Цитата Сообщение от IGPIGP Посмотреть сообщение
насколько данная область далека от автоматизации
1
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
12.08.2019, 19:36 17
Цитата Сообщение от Крашеная Посмотреть сообщение
И знаю сколько подводных камней может оказаться при разработке
Это главное, Крашеная, я в который раз убеждаюсь, что вы понимаете о чём говорите.
Один из таких камней состоит в том, что при недостаточной уверенности (неоднозначности симптоматики), врач делает назначение и анализирует результат. То есть, при отсутствии улучшения предполагается альтернативный диагноз и назначение изменяется. И это ещё семечки.
Ещё есть эффект самовнушения как в одну (плацебо) так и в другую сторону (нечто сродни синдрому стигматов). От него не свободны даже врачи, а уж о непрофессионалах и речи нет.
1
6738 / 4537 / 1839
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
12.08.2019, 20:55 18
Крашеная, IGPIGP, вам не кажется, что вы увлеклись? Понятно, что задача сложная, но начинать надо с малого.
Можно, конечно проштудировать литературу, веса, симптомы, самовнушение и т.д., но человек спрашивал
Цитата Сообщение от koteyko_r Посмотреть сообщение
или же есть смысл создать list из потомков класса болезнь и проходить по нему через foreach?
Может он хороший специалист в предметной области, только программировать не умеет, и тупо не знает как программно организовать и обработать всю эту статистику?
0
391 / 64 / 11
Регистрация: 06.08.2018
Сообщений: 202
12.08.2019, 21:44 19
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Может он хороший специалист в предметной области, только программировать не умеет, и тупо не знает как программно организовать и обработать всю эту статистику?
Вполне может быть Только тогда, мне кажется, для того, чтобы вы могли посоветовать как именно воплотить програмную часть, автор должен немножко подробнее рассказать что задумал, разумеется не углубляясь сильно уж медицинские подробности, разумеется: )))) Ну на уровне "дали мне в больнице ексельный файл на 14000+ сторк (случай из моей практики ))) )"
Ваш совет про подключиться к базам данных мне кажется хорош, только вот не факт, что доступ к их базам данных дадут. Конечно, зависит от географии, но, насколько я сталкивалась, данные о пациентах некисло так засекречены. Обычно для подобных исследований предоставляют анонимные данные уже некоторым образом экстрагированные из базы данных больницы... Хотя, может и не везде так...
Подождем посмотрим, что автор ответит
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
вам не кажется, что вы увлеклись?
Есть такое дело
1
93 / 78 / 23
Регистрация: 19.10.2013
Сообщений: 480
12.08.2019, 22:04 20
Цитата Сообщение от Крашеная Посмотреть сообщение
должен немножко подробнее рассказать что задумал
Цитата Сообщение от koteyko_r Посмотреть сообщение
Хочу написать программу на плюсах, которая по симптомам ставит диагноз.
Куда уж подробнее?
Есть такое понятие, как экспертная система. Эта система не создаётся с целью полной замены специалиста, она нужна лишь для упрощения его работы.

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

Нормальный же путь развития обычной программы, которою создают не научные деятели, а программисты (не всегда потому что от них этого требуют, программисты творческие люди и часто создают проекты только потому что им это нравится), предельно прост: сначала у него будет список болезней. Врач-специалист будет клацать по списку: «о как удобно! никакие бумаги заполнять не нужно, клац-клац и бумага выкатилась из принтера». Потом этот список "научится" сокращаться, при выборе симптомов (что-то вроде примитивного поиска по справочнику). Потом программа научится анализировать группы симптомов и предлагать релеватные варианты заболеваний... и т.д. и т.п.
Всё это может реализовать один программист. Когда его проектом начнут более-менее массово пользоваться из целевой аудитории, появятся предложения и идеи как сделать лучше. Одни начнут подтягивать других и чем больше специалистов (не только из области медицины) начнет подключаться к этому проекту, тем продвинутее будут его алгоритмы и возможности. Получается не мы вливаем науку в проект, а проект сам "вкачивает" науку в себя, по своим потребностям. Это самый обычный процесс автоматизации, который начался с простого списка болезней. Только отличие от научного подхода тут в том, что первая версия проекта будет не через 2-3 года, а через пару дней и им уже можно будет пользоваться.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2019, 22:04

Программа диагностики СМА
Господа программисты! Неужели итальянские программисты лучше наших?! Имеется программа:...

Программа для диагностики ПК
Здравствуйте, есть программа для диагностики ПК При запуске на любых ОС появляется вот такая...

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

Программа диагностики автомобиля (OBD2)
Хочу сам написать программу диагностики автомобиля, а именно чтения и сброс ошибок, а руководство к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.