Анализ реадмиссии пациентов на основе логистической регрессии
Использование классификаторов машинного обучения для анализа данных. Создание модели, которая на основании параметров, влияющих на течение диабета, выявляет показатель возвращения больного в ухудшенное состояния после оказанного лечения (реадмиссию).
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.06.2017 |
Размер файла | 625,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Penalty = l2, tol = 0.0001
Penalty = l1, tol = 0.0001
Penalty = l1, tol = 0.001
Penalty = l2, tol = 0.01 - cтаким набором параметров модель дает наилучший результат. Точность 0,85.
Penalty = l2, tol = 0.001
Рисунок 7. Кросс-валидация для логистической регрессии
В метод, использующий наивный баесовский классификатор, не передаются входные параметры, поэтому для данного классификатора шаг подбора параметров пропущен.
3.4 Оценка качества работы классификаторов
Кросс-валидация также может быть применена для сравнения различных классификаторов между собой, чтобы определить метод с наиболее высокой точностью предсказаний.
На графике слева направо представлен результат работы всех классификаторов (см.рис.8):
Наинвыйбаесовский классификатор - точность 0,28
Метод ближайших соседей - точность 0,79
Метод случайного леса - точность 0,83.
Логистическая регрессия - точность 0,85
Рисунок 8. Кросс-валидация для всех классификаторов
Таким образом, по результатам проведенной кросс-валидации наилучшим методом является логистическая регрессия. Низкий результат точности классификатора наивный Баесовский классификатор может быть обусловлен размером выборки и количеством параметров, так как данный метод в основном хорошо работает только на маленьких выборках.
Помимо метода кросс-валидации для проверки качества классификатора используются ROC-кривые - графики, показывающие соотношение неправильно определенных позитивных случаев к корректно определенным позитивным случаям (flasepositiverateи truepositiverate). В связи с тем, что в данной выборке целевая переменная принимает больше, чем два значения, то необходимо строить ROC-кривую для каждого из значений целевой переменной, а потом представлять на графике среднее для всех значений зависимого параметра. Данный алгоритм реализуется следующим образом:
target = diabetic_data.readmitted - определяем целевую переменную
# Binarizetheoutput - представляем значения целевой переменной в бинарном виде
target = label_binarize(target, classes=[0, 1, 2])
n_classes = target.shape[1]
fori in range (n_classes): -запускаемциклдлякаждогозначенияцелевойпеременной
fpr[i], tpr[i], _= roc_curve([Применениеклассификатора][:,i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
Результат работы данного алгоритма представлен ниже (см. рис.9):
Рисунок 9. ROC-кривые для классификаторов
Таким образом, и в анализе через ROC-кривые наилучшим образом себя показала именно логистическая регрессия. В связи с этим именно данный классификатор будет использоваться для предсказания целевой переменной.
Прежде, чем начать реализацию интерфейса для конечного пользователя, необходимо проверить и интерпретировать результат работы выбранного классификатора. Первым шагом, получаем коэффициенты линейной регрессии, далее необходимо провести интерпретацию полученных результатов, а также проверить значимость полученных коэффициентов с помощью t-статистики.В случае, если полученное значение статистики больше, чем табличное значение, то коэффициенты признаются значимыми. В данном случае все коэффициенты признаны статистически значимыми, так как значение t-статистики больше, чем (уровень значимости 0,01, степени свободы = 101470 (n-k-1)). Данные представлены в таблице 3 (синим выделены положительные коэффициенты, красным - отрицательные)
Таблица 3. Коэффициенты логистической регрессии
Параметр |
Коэффициент |
t-статистика |
Интерпретация |
|
Отделение |
+0.00164492 |
7,44529 |
Слабая степень влияния. Пациенты, поступившие в кардиологическое отделение и отделение эндокринологии наиболее склонны к ухудшению состояния. |
|
Пол |
+ 0.02195529 |
5,98426 |
Мужчины более склонны к ухудшению состояния |
|
Количество дней в госпитале |
+0.00883695 |
8,991112 |
Степень влияния на реадмиссию очень слабое, однако наблюдается прямая зависимость между днями, проведенными в госпитале и последующим ухудшением состояния. |
|
Заключение по визиту |
+0.00937918 |
9,424847 |
Наблюдается прямая взаимосвязь между увеличением числа, указанного в заключении по визиту, и реадмиссией. Однако данные закодированы в случайном порядке, логическая интерпретация данных результатов затруднена. |
|
Тест на глюкозу |
+0.03859679 |
7,542266 |
Чем выше показатели теста на глюкозу, тем выше вероятность реадмиссии. |
|
Вторичный диагноз |
+0.07319994 |
12,02284 |
Аналогично первичному диагнозу существует прямая зависимость. |
|
Количество препаратов |
+0.08079777 |
12,551719 |
Большое количество назначенных препаратов говорит о вероятности реадмиссии. Может быть обусловлено тем, что человек в более плохом изначальном состоянии принимает большое количество лекарств, а не самим фактом назначения большого количества медикаментов. |
|
Количество посещений до этого визита |
+0.08866531 |
9,491827 |
В случае если пациент часто обращается в больницу, вероятность реадмиссии выше. |
|
Возраст |
+0.13933213 |
8,225969 |
Чем старше человек, тем больше вероятность реадмисии. |
|
Первичный диагноз |
+0.14479666 |
6,783833 |
В соответствии с группировкой заболеваний в классы, наиболее высокий риск реадмиссии у пациентов с заболеваниями системы кровообращения, пищеварения, а также поступивших с травмами. |
|
Тест HbA1c |
+0.81238387 |
11,538118 |
Чем выше показатели HbA1c, тем выше вероятность возвращения к ухудшенному состоянию. Степень влияния показателя высокая. |
|
Раса |
-0.06573962 |
10,986301 |
Европеоиды более склонны к ухудшению состояния |
|
Изменение в принимаемых лекарствах |
-0.09270197 |
5,295517 |
В случае корректировки принимаемых лекарств, вероятность реадмиссии меньше. |
|
Количество других процедур |
-0.10109088 |
7,705122 |
Чем больше процедур оказано пациенту, тем меньше вероятность реадмиссии. Коэффициенты у этого и предудущего параметра обусловлены тщательным подходом к лечению больного в случае оказания большого количества услуг. |
|
Количество лабораторных тестов |
-0.2510888 |
10,850467 |
Чем больше тестов сделано пациенту, тем меньше вероятность реадмиссии. |
|
Тип поступления |
-0.32507527 |
9,300183 |
Если человек поступил в экстренном случае, то вероятность ухудшения более велика. |
Все медикаменты оказывают довольно слабое влияния на целевую переменную, однако прямая зависимость (принятие лекарства - реадмиссия) характерна для следующих медикаментов - глипизид и пиоглитазон, которые предначзначены для снижения уровня гликированного гемоглобина в крови. Данная зависимость может быть обусловлена тем, что оба препарата имеют широкий список противопоказаний и побочных действий, а прекращение приема должно проходить под контролем лечащего врача.
Таким образом, наиболее весомыми факторами, влияющими на возможную реадмиссию являются пол, возраст, тип поступления в госпиталь, количество проведенных лабораторных тестов и процедур, первичный диагноз, а также результаты теста HbA1C. Последние три показателя прямо говорят о том, что тщательный подход к лечению больного может благоприятно сказаться на его состоянии после завершения лечения. Однако, несмотря на то, что остальные показатели оказывают не такое сильное влияние на целевую переменную, в интерфейсе пользователю необходимо вести все эти значения, для более точной работы модели. Более того, все полученные коэффициенты регрессии являются статистически значимыми, что доказывают показатели t-статистики каждого параметра.
3.5 Интерфейс пользователя
Интерфейс пользователя выглядит следующим образом (см. рис.10):
Рисунок 10. Интерфейс пользователя
Для запуска программы необходимо заполнить все имеющиеся поля - выбрать расу, тип поступления, заключение, отделение, первичный и вторичный диагноз из выпадающих списков; ввести возраст, количество дней в госпитале, количество проведенных тестов и процедур, количество принимаемых препаратов, количество амбулаторных посещений до данного визита, значение теста на глюкозу, а также теста HbA1C; отметить пол, а также принимаемые больным лекарства из предложенных в интерфейсе.
Введенные значения проверяются на корректность - выполняется проверка на соответствие типу данных (текстовый, числовой и т.д.) и на заполнение всех необходимых полей, также существует ограничение на длину символов, а именно:
Раса - выпадающий список, недоступно ввести собственное значение
Пол - необходимо обязательно поставить галочку в одно из полей
Возраст - числовое поле, не более 100 лет
Тип поступления - выпадающий список, недоступно ввести собственное значение
Заключение - выпадающий список, недоступно ввести собственное значение
Дней в госпитале - числовое поле
Отделение - выпадающий список, недоступно ввести собственное значение
Кол-во тестов - числовое значение
Кол-во процедур - числовое значение
Кол-во препаратов - числовое значение
Кол-во посещений до - числовое значение
Первичный диагноз - выпадающий список, недоступно ввести собственное значение
Вторичный диагноз - выпадающий список, недоступно ввести собственное значение
Тест на глюкозу - числовое значение
Тест HbA1c - числовое значение
Обязательные отметки на препараты
Все значения представлены для пользователя в удобном, текстовом виде, после ввода корректных данных, программа преобразует введенную информацию в формат, необходимый для анализа логистической регрессии.
После того, как пользователь ввел все данные и нажал кнопку «ОК», программа записывает все полученные значения в массив и выдает результат с помощью функции test.return= model_lr_5.fit([Массив_Данных]). Было проведено несколько тестов программы, во всех случаях выдавался логичный результат по реадмисии.
Например, для следующих значений (см. Таблицу 4) результат реадмиссии =2, то есть ожидается возвращение больного в период меньше 30 дней.
Таблица 4. Данные для теста программы
Поле |
Значение |
|
race |
AfricanAmerican |
|
gender |
1 |
|
age |
45 |
|
admission_type_id |
1 |
|
discharge_disposition_id |
1 |
|
time_in_hospital |
9 |
|
num_lab_procedures |
47 |
|
num_procedures |
2 |
|
num_medications |
17 |
|
number_outpatient |
0 |
|
diag_1 |
Болезни эндокринной системы |
|
diag_2 |
Болезни системы кровообращения |
|
number_diagnoses |
9 |
|
max_glu_serum |
0 |
|
A1Cresult |
0 |
|
metformin |
1 |
|
repaglinide |
1 |
|
nateglinide |
1 |
|
chlorpropamide |
1 |
|
glimepiride |
1 |
|
acetohexamide |
1 |
|
glipizide |
1 |
|
glyburide |
1 |
|
tolbutamide |
1 |
|
pioglitazone |
1 |
|
acarbose |
1 |
|
miglitol |
1 |
|
troglitazone |
1 |
|
tolazamide |
1 |
|
examide |
1 |
|
citoglipton |
1 |
|
insulin |
1 |
|
glyburide-metformin |
1 |
|
glipizide-metformin |
1 |
|
glimepiride-pioglitazone |
1 |
|
metformin-rosiglitazone |
1 |
|
metformin-pioglitazone |
1 |
|
change |
0 |
Полученный результат совпадает с ожидаемым, так как вторичным диагнозом больного является заболевание системы кровообращения, для него не проводился тест HbA1c, он принимает большое количество лекарств, среди которых есть глипизид и пиоглитазон, что говорит о высокой вероятности реадмиссии.Также были рассмотрены еще два примера классификации на основе разработанной модели. Во втором случае (см. Приложение 1) программа предсказывает результат реадмиссии 2, что также является наиболее плохим случаем (возвращение менее чем через 30 дней). Данный результат является валидным, так как наиболее значимые показатели указывают на то, что пациент действительно находится в группе риска -возрастная группа пациента (50-60 лет), мужской пол, болезни системы кровообращения, относительно небольшое количество проведенных процедур, наличие множества заболеваний и диагнозов, отсутствие проведения теста HbA1c, прием лекарств с побочными эффектами. В последнем же случае (см. Приложение 2), пациент находится вне зоны риска, что и предсказывается моделью в качестве значения реадмиссии 0 - молодой возраст пациента, сопутствующие заболевания, не оказывающие влияние на течение диабета, раса, менее всего предрасположенная к осложнениям, большое количество проведенных процедур, корректное назначение лекарств, а также проведение теста HbA1C. При дальнейшем тестировании и валидации результатов работы программы некорректности в предсказывании показателя реадмиссии также обнаружено не было.
Таким образом, полученная модель позволяет в большинстве случаев корректно предсказывать факт реадмиссии на основе данных, вводимых конечным пользователем через интерфейс.
В качестве дальнейших перспектив усовершенствования интерфейса можно отметить добавление справки о заполнении необходимых полей, так как сейчас пользователь узнает о правиле, только в случае неправильно заполненных данных и появлении сообщения об ошибке. Также интерфейс можно дополнить вкладкой с рекомендациями по лечению и мониторингу диабета, полезными фактами о заболевании, доступностью лекарств в аптеках города и другой полезной информацией для людей с диабетом.
Заключение
В ходе данной работы была выполнено построение моделей с помощью нескольких алгоритмов классификации методов машинного обучения. В качестве инструментальных методов реализации поставленной задачи был выбран программный продукт PyCharm, представляющий собой среду разработки на языке программирования Python. В данной программе был проведен первоначальный анализ данных с помощью методов boxplot, позволяющий выявить выбросы выборки, а также такие показатели, как минимальное и максимальное значение, медиана; и анализа ANOVA, позволяющего вычислить зависимости и корреляции между переменными начального dataset. Для создания модели использовались наиболее подходящие классификаторы с оптимальными для данной выборки параметрами - метод рандомного леса, k-ближайщих соседей, наивный Баесовский классификатор и логистическая регрессия. Далее была проведена оценка точности работы классификаторов с помощью методов скользящего контроля (кросс-валидация) и ROC-кривых, наилучшим образом себя показала логистическая регрессия, поэтому именно она была выбрана для дальнейшего построения модели. После разработки модели были выявлены значимые показатели, влияющие на целевую переменную - реадмиссия зависит отпервичного диагноза пациента, его пола, возраста, количества проведенных лабараторных испытаний, а также от назначенных лекарств, а именно глипизида и пиоглитазона. Для удобства конечных пользователей программы в среде разработкиQtDesigner был разработан интерфейс пользователя, позволяющий предсказать реадмиссию для каждого нового пациента.В качестве дальнейших перспектив развития данной работы может быть рассмотрена рекомендательная модель для медицинских учреждений, позволяющая подобрать оптимальное лечение для каждого конкретного пациента.Рекомендательная модель включает в себя потенциал учета большого количества внешних факторов, влияющих на возможность применения рекомендуемых методов лечения (бюджетные средства, особенности географической области применения, доступность необходимых лекарственных средств и др.), а также непосредственно возможность подбирать для каждого пациента индивидуальную программу лечения.
Список литературы.
Российская организация борьбы с диабетом.URL: http://www.dialand.ru/, дата обращения 23.02.2017
Материал для журнала "Клинико-лабораторный консилиум" № 3-2009, URL: http://www.analytica.ru/news.php?id=103 , дата обращения 24.02.2017
Всемирная организация здравоохранения. URL: http://www.who.int/diabetes/ru/, дата обращения 18.02.2017
Глобальное комьюнити по диабету. URL: http://www.diabetes.co.uk/what-is-hba1c.html, дата обращения 16.04.2017
И. И. Никберг, И. А. Чайковский, М. С. Ахманов. Лечение диабета в XXI веке. Реальность, мифы, перспективы. -- СПб.: Вектор, 2011
Тюкавкина Н.А., Бауков Ю.И. Биоорганическая химия.-- М.: Медицина, 1985.-- 480 с.
Различия сахарного диабета, I и II типа (по Этцвиллеру, 1987)
David B. Sacks. Measurement of hemoglobinA1c. A new twist on the path to harmony. Diebates Care 35(12): 2674-2680, 2012
Miedema K. Standardization of HbA1c and optimal range of monitoring. Scand J Clin Lab Invest Suppl 240: 61-72, 2005
Mogens Lytken Larsen, Mogens Hшrder and Erik F. Mogensen. Effect of long-term monitoring of glycosylated hemoglobin levels in insulin-dependent diabetes mellitus. NEnglJMed 323(15):1021-1025, 1990
J. Ross Quinlan. C4.5: Programs for Machine learning. MorganKaufmannPublishers 1993
Лагутин М. Б. Наглядная математическая статистика. (Том 2, стр. 174) -- М.: П-центр, 2003.
S.Murthy. Automatic construction of decision trees from data - A Multi-disciplinary survey, 1997
Загоруйко Н.Г. Прикладные методы анализа данных и значний. Новосибирск: ИМ СО РАН, 1999
Журавлев Ю.И. и пр. Математические методы. Программная система. Практические применения. - М.: Фазис, 2006
Валик В.Н., Червоненкис А.Я. Теория распознования образов - М.: Наука, 1974.
Trevor Hastie, Robert Tibshirani and Jerome H. Friedman. The elements of statistical learning - Stanford: Springer, 2009
Воронцов К. В. Комбинаторный подход к оценке качества обучаемых алгоритмов. -- Математические вопросы кибернетики / Под ред. О. Б. Лупанов. -- М.: Физматлит, 2004. -- T. 13. -- С. 5-36.
Hand, David J. Measuring classifier performance: A coherent alternative to the area under the ROC curve, Machine Learning, 77: 103--123, 2009
Сайт языка программирования python. URL: https://www.python.org/ , дата обращения 08.05.2017
Сайт программного продукта PyCharm. URL: https://www.jetbrains.com/pycharm/ , дата обращения 08.05.2017
Сайт программного продукта QtDesigner. URL: https://www.qt.io/ide/ , дата обращения 08.05.2017
Кодировка ICD9. URL: http://icd9.chrisendres.com/, дата обращения 16.04.2017
Breiman, Leo (2001). Random forests. Machine Learning 45 (1): 5-32
Altman, N. S. (1992). An introduction to kernel and nearest-neighbor nonparametric regression. The American Statistician. 46 (3): 175-185.
Greene, William H. (2012). Econometric analysis (Seventh ed.). Boston: PearsonEducation. pp. 803-807.
Приложение 1
Данные для теста программы, значение реадмиссии 2
Поле |
Значение |
|
race |
Caucasian |
|
gender |
1 |
|
age |
6 |
|
admission_type_id |
2 |
|
discharge_disposition_id |
1 |
|
time_in_hospital |
3 |
|
num_lab_procedures |
31 |
|
num_procedures |
6 |
|
num_medications |
16 |
|
number_outpatient |
0 |
|
diag_1 |
болезни кровообращения |
|
diag_2 |
болезни кровообращения |
|
number_diagnoses |
9 |
|
max_glu_serum |
0 |
|
A1Cresult |
0 |
|
metformin |
1 |
|
repaglinide |
1 |
|
nateglinide |
1 |
|
chlorpropamide |
1 |
|
glimepiride |
1 |
|
acetohexamide |
1 |
|
glipizide |
1 |
|
glyburide |
1 |
|
tolbutamide |
1 |
|
pioglitazone |
1 |
|
acarbose |
1 |
|
miglitol |
1 |
|
troglitazone |
1 |
|
tolazamide |
1 |
|
examide |
1 |
|
citoglipton |
1 |
|
insulin |
1 |
|
glyburide-metformin |
2 |
|
glipizide-metformin |
1 |
|
glimepiride-pioglitazone |
1 |
|
metformin-rosiglitazone |
1 |
|
metformin-pioglitazone |
1 |
|
change |
1 |
Приложение 2
Данные для теста программы, значение реадмиссии 0.
Поле |
Значение |
|
race |
Hispanic |
|
gender |
0 |
|
age |
3 |
|
admission_type_id |
6 |
|
discharge_disposition_id |
1 |
|
time_in_hospital |
6 |
|
num_lab_procedures |
75 |
|
num_procedures |
2 |
|
num_medications |
19 |
|
number_outpatient |
0 |
|
diag_1 |
болезни органов дыхания |
|
diag_2 |
болезни эндокринной системы |
|
number_diagnoses |
6 |
|
max_glu_serum |
0 |
|
A1Cresult |
1 |
|
metformin |
1 |
|
repaglinide |
1 |
|
nateglinide |
1 |
|
chlorpropamide |
1 |
|
glimepiride |
1 |
|
acetohexamide |
1 |
|
glipizide |
0 |
|
glyburide |
1 |
|
tolbutamide |
1 |
|
pioglitazone |
1 |
|
acarbose |
1 |
|
miglitol |
1 |
|
troglitazone |
1 |
|
tolazamide |
1 |
|
examide |
1 |
|
citoglipton |
1 |
|
insulin |
1 |
|
glyburide-metformin |
1 |
|
glipizide-metformin |
1 |
|
glimepiride-pioglitazone |
1 |
|
metformin-rosiglitazone |
1 |
|
metformin-pioglitazone |
1 |
|
change |
0 |
Приложение 3
Код программы на языке Python
import csv
import pandas
import pylabas pl
import matplotlib.pyplotas mtb
from pandas import DataFrame, Series
import sklearn
from itertoolsimport izip
from sklearn.preprocessingimport LabelEncoder
import numpyas np
import re
from sklearnimport cross_validation, svm
from sklearn.neighborsimport KNeighborsClassifier
from sklearn.ensembleimport RandomForestClassifier
from sklearn.linear_modelimport LogisticRegression
from sklearnimport metrics
from sklearn.naive_bayesimport GaussianNB
from sklearn.metricsimport roc_curve, auc
import pylabas pl
#BoxPlot
import pandas
import matplotlib.pyplot as plt
diabetic_data = pandas.read_csv('C:/nominal_diabetic.csv',',')
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#ANOVA
import pandas
import scipy.statsas st
diabetic_data = pandas.read_csv('C:/data.csv',',')
target = diabetic_data.readmitted
train = diabetic_data.drop(['weight','payer_code','patient_nbr','encounter_id','diag_3','rosiglitazon','readmitted'],axis=1)
kfold = 5
itog_val ={}
model_knc_1 = KNeighborsClassifier(n_neighbors= 19)
scores = cross_validation.cross_val_score(model_knc_1, train, target, cv = kfold)
itog_val['KNeighborsClassifier1'] = scores.mean()
DataFrame.from_dict(data = itog_val, orient='index').plot(kind='bar', legend=False)
#
pl.show()
#
pl.clf()
pl.figure(figsize=(8,6))
#print diabetic_data.head()
#diabetic_data_1=pandas.get_dummies(diabetic_data, columns=[])
kfold = 5
itog_val ={}
# model_rfc = RandomForestClassifier(n_estimators = 50)
# model_rfc_1 = RandomForestClassifier(n_estimators = 10)
# model_rfc_2 = RandomForestClassifier(n_estimators = 2)
# model_rfc_3 = RandomForestClassifier(n_estimators = 30)
model_rfc_4 = RandomForestClassifier(n_estimators= 80)
# model_rfc_5 = RandomForestClassifier(n_estimators = 150)
model_knc_1 = KNeighborsClassifier(n_neighbors= 19)
model_lr = LogisticRegression(penalty='l2', tol=0.0001,multi_class='ovr')
model_lr_1 = LogisticRegression(penalty='l1', tol=0.0001)
model_lr_2 = LogisticRegression(penalty='l1', tol=0.001)
model_lr_3 = LogisticRegression(penalty='l2', tol=0.001,multi_class='ovr')
model_lr_4 = LogisticRegression(penalty='l2', tol=0.1,multi_class='ovr')
model_lr_5 = LogisticRegression(penalty='l2', tol=0.01,multi_class='ovr')
#model_svc = svm.SVC()
model_naiv = GaussianNB()
# Binarize the output
target = label_binarize(target, classes=[0, 1, 2])
n_classes = target.shape[1]
#
# print target
ROCtrainTRN, ROCtestTRN, ROCtrainTRG, ROCtestTRG = cross_validation.train_test_split(train, target, test_size=0.25, random_state=0)
#model =model_lr_5.fit(ROCtrainTRN, ROCtrainTRG).coef_
#print model
#
classifier = OneVsRestClassifier(RandomForestClassifier(n_estimators=80))
y_score = classifier.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# plt.figure()
'''print y_score'''
lw=2
# Random Forest
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range (n_classes):
fpr[i], tpr[i], _= roc_curve(ROCtestTRG[:,i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
plt.plot(fpr[2], tpr[2], lw=lw, label='Random Forest (area = %0.2f)' % roc_auc[2])
#KNeighborsClassifier
classifier = OneVsRestClassifier(KNeighborsClassifier(n_neighbors= 19))
y_score = classifier.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range (n_classes):
fpr[i], tpr[i], _= roc_curve(ROCtestTRG[:,i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
plt.plot(fpr[2], tpr[2], lw=lw, label='K-neighbors (area = %0.2f)' % roc_auc[2])
#LogisticRegression
classifier = OneVsRestClassifier(LogisticRegression(penalty='l2', tol=0.01,multi_class='ovr'))
y_score = classifier.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range (n_classes):
fpr[i], tpr[i], _= roc_curve(ROCtestTRG[:,i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
plt.plot(fpr[2], tpr[2], lw=lw, label='Logistic Regression (area = %0.2f)' % roc_auc[2])
#naivBaes
classifier = OneVsRestClassifier(GaussianNB())
y_score = classifier.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr = dict()
tpr = dict()
roc_auc = dict()
for i in range (n_classes):
fpr[i], tpr[i], _= roc_curve(ROCtestTRG[:,i], y_score[:, i])
roc_auc[i] = auc(fpr[i], tpr[i])
plt.plot(fpr[2], tpr[2], lw=lw, label='NaivBaes (area = %0.2f)' % roc_auc[2])
#SVC
# classifier = OneVsRestClassifier(svm.SVC())
# y_score = classifier.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# fpr = dict()
# tpr = dict()
# roc_auc = dict()
# for i in range (n_classes):
# fpr[i], tpr[i], _= roc_curve(ROCtestTRG[:,i], y_score[:, i])
# roc_auc[i] = auc(fpr[i], tpr[i])
# plt.plot(fpr[2], tpr[2], lw=lw, label='SVC (area = %0.2f)' % roc_auc[2])
# Compute micro-average ROC curve and ROC area
'''fpr["micro"], tpr["micro"], _ = roc_curve(ROCtestTRG.ravel(), y_score.ravel())
roc_auc["micro"] = auc(fpr["micro"], tpr["micro"])'''
#plot a ROC curve
lw = 2
'''plt.plot(fpr[2], tpr[2], color='darkorange',
lw=lw, label='ROC curve (area = %0.2f)' % roc_auc[2])'''
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
# First aggregate all false positive rates
#
# scores = cross_validation.cross_val_score(model_rfc, train, target, cv = kfold)
# itog_val['0RandomForestClassifier'] = scores.mean()
#
# scores = cross_validation.cross_val_score(model_knc_1, train, target, cv = kfold)
# itog_val['KNeighborsClassifier1'] = scores.mean()
#PARAMETERS FOR RANDOM FOREST
# scores = cross_validation.cross_val_score(model_rfc, train, target, cv = kfold)
# itog_val['model_rfc'] = scores.mean()
# scores = cross_validation.cross_val_score(model_rfc_1, train, target, cv = kfold)
# itog_val['model_rfc_1'] = scores.mean()
# scores = cross_validation.cross_val_score(model_rfc_2, train, target, cv = kfold)
# itog_val['model_rfc_2'] = scores.mean()
# scores = cross_validation.cross_val_score(model_rfc_3, train, target, cv = kfold)
# itog_val['model_rfc_3'] = scores.mean()
scores = cross_validation.cross_val_score(model_rfc_4, train, target, cv = kfold)
itog_val['model_rfc_4'] = scores.mean()
# scores = cross_validation.cross_val_score(model_rfc_5, train, target, cv = kfold)
# itog_val['model_rfc_5'] = scores.mean()
#PARAMETERS FOR LOGISTIC REGRESSION
# scores = cross_validation.cross_val_score(model_lr, train, target, cv = kfold)
# itog_val['model_lr'] = scores.mean()
# scores = cross_validation.cross_val_score(model_lr_1, train, target, cv = kfold)
# itog_val['model_lr_1'] = scores.mean()
# scores = cross_validation.cross_val_score(model_lr_2, train, target, cv = kfold)
# itog_val['model_lr_2'] = scores.mean()
# scores = cross_validation.cross_val_score(model_lr_3, train, target, cv = kfold)
# itog_val['model_lr_3'] = scores.mean()
# scores = cross_validation.cross_val_score(model_lr_4, train, target, cv = kfold)
# itog_val['model_lr_4'] = scores.mean()
# scores = cross_validation.cross_val_score(model_lr_5, train, target, cv = kfold)
# itog_val['model_lr_5'] = scores.mean()
# scores = cross_validation.cross_val_score(model_svc, train, target, cv = kfold)
# itog_val['SVC'] = scores.mean()
# scores = cross_validation.cross_val_score(model_naiv, train, target, cv = kfold)
# itog_val['naiv'] = scores.mean()
# #
# DataFrame.from_dict(data = itog_val, orient='index').plot(kind='bar', legend=False)
# #
# pl.show()
# #
# pl.clf()
# pl.figure(figsize=(8,6))
'''#SVC
model_svc.probability = True
probas = model_svc.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
roc_auc = auc(fpr, tpr)
pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('SVC', roc_auc))'''
#RandomForestClassifier
# probas = model_rfc.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
# roc_auc = auc(fpr, tpr)
# pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('RandonForest',roc_auc))
# #KNeighborsClassifier
# probas = model_knc_1.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
# roc_auc = auc(fpr, tpr)
# pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('KNeighborsClassifier',roc_auc))
# #LogisticRegression
# probas = model_lr.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
# roc_auc = auc(fpr, tpr)
# pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('LogisticRegression',roc_auc))
# #naivBaes
# probas = model_naiv.fit(ROCtrainTRN, ROCtrainTRG).predict_proba(ROCtestTRN)
# fpr, tpr, thresholds = roc_curve(ROCtestTRG, probas[:, 1])
# roc_auc = auc(fpr, tpr)
# pl.plot(fpr, tpr, label='%s ROC (area = %0.2f)' % ('NaivBaes',roc_auc))
pl.plot([0, 2], [0, 2], 'k--')
pl.xlim([0.0, 2.0])
pl.ylim([0.0, 2.0])
pl.xlabel('False Positive Rate')
pl.ylabel('True Positive Rate')
pl.legend(loc=0, fontsize='small')
pl.show()
Размещено на Allbest.ru
Подобные документы
Создание логической модели данных. Назначение кнопок Erwin Toolbox. Создание БД в СУБД InterBase. Использование утилиты WISQL. Создание Script-файла. Перенос структуры данных с одного сервера на другой. Синхронизация каталога БД и текущей модели.
курсовая работа [4,6 M], добавлен 26.11.2011ERwin как средство разработки структуры базы данных. Внешний вид диалогового окна Entity Edition. Общий вид модели после создания сущностей. Вид логической модели после создания связей. Диалоговое окно New Key Group, окончательный вид логической модели.
лабораторная работа [559,0 K], добавлен 16.07.2013Искусственные нейронные сети как одна из широко известных и используемых моделей машинного обучения. Знакомство с особенностями разработки системы распознавания изображений на основе аппарата искусственных нейронных сетей. Анализ типов машинного обучения.
дипломная работа [1,8 M], добавлен 08.02.2017Анализ матрицы коэффициентов парной корреляции. Выбор факторных признаков для построения двухфакторной регрессионной модели. Оценка параметров регрессии по методу наименьших квадратов. Нахождение определителей матриц. Применение инструмента Регрессия.
контрольная работа [1,0 M], добавлен 13.01.2013Проектирование базы данных для учета поступления пациентов и проведенного лечения, ведение архива выписанных пациентов. Определение требований поддержки целостности данных. Тестирование программы и руководство пользователю. Листинг программных модулей.
курсовая работа [3,3 M], добавлен 28.04.2014Использование систем моделирования. Повышение технического уровня и качества выпускаемой продукции. Классификация видов контроля. Активный и пассивный контроль. Создание модели, которая бы демонстрировала работу токаря в течение одной рабочей смены.
курсовая работа [341,6 K], добавлен 08.06.2015Проект базы данных "Карточка амбулаторного больного", которая должна включать в себя данные о больных и об их заболеваниях. Выбор технических и программных средств. Разработка программного приложения по обработке данных и формированию выходных документов.
курсовая работа [1,3 M], добавлен 06.12.2011Сущность базы данных. Процесс построения концептуальной модели. Построение реляционной модели, создание ключевого поля. Процесс нормализации. Проектирование базы данных в ACCESS. Порядок создание базы данных. Создание SQL запросов и работа в базе данных.
курсовая работа [185,6 K], добавлен 08.11.2008Создание структуры интеллектуального анализа данных. Дерево решений. Характеристики кластера, определение групп объектов или событий. Линейная и логистическая регрессии. Правила ассоциативных решений. Алгоритм Байеса. Анализ с помощью нейронной сети.
контрольная работа [2,0 M], добавлен 13.06.2014Разработка автоматизированной информационной системы предприятия на основе баз данных, которая обеспечивает качественный контроль данных, автоматизацию документооборота, быстрое составление отчетов. Создание форм, отчетов и макросов, меню базы данных.
курсовая работа [4,8 M], добавлен 20.05.2014