Ім'я файлу: Курсова_робота_Постебайло_Роман_Олексійович.docx
Розширення: docx
Розмір: 393кб.
Дата: 22.06.2023
скачати
Пов'язані файли:
5.2.3.8 Візуалізація даних в Excel ч.1 Ua.docx
Постебайло_Р_О.pdf

Міністерство освіти і науки України

Міжрегіональна академія управління персоналом

Інститут комп’ютерно-інформаційних технологій та дизайну

Кафедра _____________________
Галузь знань 1.2 Інформаційні технології

спеціальність 1.2.2 «Програмна інженерія»

(шифр і назва спеціальності)
КУРСОВА РОБОТА

з навчальної дисципліни: «Аналіз даних» (КОД)
на тему:

« Аналітика даних в процесі прийняття управлінських рішень»

Студента Постебайло Р.О.

ІІІ курсу групи ІК-9-20-Б1ІПЗ-іпз(4.0д)

Керівник:_________________________
Кількість балів:____________________

Національна шкала: ________________
Оцінка ECTS: _____________________


Члени комісії:

____________________ ________________________

(підпис) (прізвище та ініціали)

____________________ ________________________

(підпис) (прізвище та ініціали)

____________________ ________________________

(підпис) (прізвище та ініціали)


м. КИЇВ – 2022 рік

ЗМІСТ


ВСТУП 3

РОЗДІЛ 1. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ 5

1.1.Поняття нейронної мережі 5

1.2.Штучні нейрони як основна складова мережі 9

1.3.Парадигми навчання нейронних мереж 10

1.4.Модель нейронної мережі 12

1.5.Використання нейронних мереж 14

1.6.Аритмія 17

РОЗДІЛ 2. ВИБІР ЗАСОБІВ РЕАЛІЗАЦІЇ 19

2.1. Мова програмування Python 19

2.2. sckit-image 23

РОЗДІЛ 3. РЕАЛІЗАЦІЯ ПРОГРАМНОГО ПРОДУКТУ 24

3.1. Діаграма варіантів використання 24

3.2. Діаграма класів програмного продукту 26

3.3. Структура нейронної мережі 27

3.3. Графічний інтерфейс користувача 32

3.4. Інструкція користувача 33

ВИСНОВКИ 34

ПЕРЕЛІКИ ВИКОРИСТАНИХ ДЖЕРЕЛ 35






ВСТУП



В сучасному світі, де панують тенденції на діджиталізацію та автоматизацію усіх процесів, явище нейронних мереж, які замінюють людину в деяких аспектах при прийнятті тих чи інших рішень — не новина.

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

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

Виходячи з описаної вище актуальності явища нейронних мереж в медицині, об’єктом дослідження було обрано використання нейронних мереж в сфері медицини, а саме кардіології.

В свою чергу, предметом дослідження став аналіз методів і засобів інтелектуального аналізу результатів електрокардіограми.

Мета роботи полягає в розробленні нейронної мережі для виявлення можливих аритмій і їх типів на базі аналізу результатів електрокардіограми.

Методи дослідження — аналіз літературних та інших джерел, комп’ютерне моделювання та проектування.

Для досягнення поставленої мети слід виконати наступні завдання:

  • Провести аналіз предметної області

    • Проаналізувати поняття нейронної мережі

    • Проаналізувати поняття штучних нейронів

    • Провести огляд парадигм навчання нейронних мереж

    • Проаналізувати поняття моделі нейронної мережі

    • Оглянути сфери використання нейронних мереж

    • Розглянути поняття аритмії

  • Описати обрані засоби розробки

    • Провести огляд мови програмування Python

    • Провести огляд бібліотеки sckit-image

  • Реалізувати програмний засіб

    • Створити діаграму варіантів використання

    • Створити діаграму класів

    • Створити графічний інтерфейс користувача

    • Написати інструкцію користувача



РОЗДІЛ 1. АНАЛІЗ ПРЕДМЕТНОЇ ОБЛАСТІ




    1. Поняття нейронної мережі



Штучні нейронні мережі (ANN), які зазвичай просто називають нейронними мережами (NN), - це обчислювальні системи, нечітко натхненні біологічними нейронними мережами, які складають мозок тварин. [1]

ANN базується на колекції з’єднаних одиниць або вузлів, званих штучними нейронами, які вільно моделюють нейрони біологічного мозку. Кожне з'єднання, як синапси в біологічному мозку, може передавати сигнал іншим нейронам. Штучний нейрон, який отримує сигнал, потім обробляє його і може сигналізувати про нейрони, підключені до нього. "Сигнал" у зв'язку є дійсним числом, і вихід кожного нейрона обчислюється якоюсь нелінійною функцією суми його входів. З'єднання називаються ребрами. Нейрони та краї зазвичай мають вагу, яка регулюється в процесі навчання. Вага збільшує або зменшує силу сигналу при з'єднанні. Нейрони можуть мати такий поріг, що сигнал надсилається лише в тому випадку, якщо сукупний сигнал перетинає цей поріг. Як правило, нейрони агрегуються в шари. Різні шари можуть виконувати різні перетворення на своїх входах. Сигнали рухаються від першого шару (вхідного шару) до останнього шару (вихідного шару), можливо, після багаторазового обходу шарів.

Уоррен Маккалок і Уолтер Піттс [2] (1943) відкрили тему, створивши обчислювальну модель для нейронних мереж. [3] Наприкінці 40-х років Д. О. Хебб [4] створив гіпотезу навчання, засновану на механізмі нервової пластичності, який став відомим як геббіанське навчання. Фарлі та Уеслі А. Кларк [5] (1954) спочатку використовували обчислювальні машини, які потім називали "калькуляторами", для імітації геббіанської мережі. Розенблат [6] (1958) створив персептрон. [7] Перші функціональні мережі з багатьма шарами були опубліковані Івахненком та Лапою в 1965 році як груповий метод обробки даних. [8] [9] [10] Основи безперервного зворотного розповсюдження [8] [11] [12] [13] були виведені в контексті теорії управління Келлі [14] в 1960 р. І Брайсоном в 1961 р. [15], використовуючи принципи динамічного програмування.

У 1970 р. Сеппо Ліннайнмаа опублікував загальний метод автоматичного диференціювання (AD) дискретних підключених мереж вкладених диференційованих функцій [16] [17]. У 1973 році Дрейфус використовував зворотне розповсюдження для адаптації параметрів контролерів пропорційно градієнтам помилок. [18] Алгоритм зворотного розповсюдження Вербоса (1975) дозволив практичне навчання багаторівневих мереж. У 1982 р. Він застосував метод AD Ліннайнмаа до нейронних мереж способом, який став широко застосовуватися [11] [19]. Потім дослідження застоювались після Мінські та Паперта (1969) [20], який виявив, що основні персептрони не здатні обробляти ексклюзив або схему і що комп'ютерам не вистачає потужності для обробки корисних нейронних мереж.

Розвиток дуже масштабної інтеграції (ОМС) метал-оксид-напівпровідник (МОП) у формі додаткової технології МОП (КМОП) дозволило збільшити кількість транзисторів МОП в цифровій електроніці. Це забезпечило більшу обробну потужність для розвитку практичні штучні нейронні мережі у 1980-х рр. [21]

У 1992 році було введено макс-пулінг, щоб допомогти з мінімальним зсувом незмінності та толерантності до деформації, щоб допомогти 3D-розпізнаванню об'єктів. [22] [23] [24] Шмідхубер прийняв багаторівневу ієрархію мереж (1992), попередньо підготовлену по одному рівню за допомогою безконтрольного навчання та доопрацьованої шляхом зворотного поширення.
Джеффрі Хінтон та співавт. (2006) запропонував вивчити подання високого рівня з використанням послідовних шарів двійкових або дійсних прихованих змінних із обмеженою машиною Больцмана [26] для моделювання кожного шару. У 2012 році Нг та Дін створили мережу, яка навчилася розпізнавати концепції вищого рівня, такі як коти, лише переглядаючи зображення без міток [27]. Безконтрольна попередня підготовка та збільшення обчислювальної потужності від графічних процесорів та розподілених обчислень дозволили використовувати більші мережі, особливо у проблемах розпізнавання зображень та зору, що стало відомим як "глибоке навчання". [28]

Ciresan and colleagues (2010) [29] показали, що, незважаючи на проблему зникнення градієнта, графічні процесори роблять зворотне розповсюдження можливим для багатошарових нейронних мереж прямого зв'язку. [30] У період з 2009 по 2012 рр. АНН почали вигравати призи в конкурсах АНН, наближаючись до виконання людським рівнем різноманітних завдань, спочатку в розпізнаванні шаблонів та машинному навчанні. [31] [32] Наприклад, двонаправлена ​​і багатовимірна тривала короткочасна пам’ять (LSTM) [33] [34] [35] [36] від Graves et al. виграв три конкурси з розпізнавання зв’язаного рукописного тексту в 2009 році, не маючи жодних попередніх знань про три мови, які слід вивчити [35] [34].

Ciresan and colleagues створили перші розпізнавачі шаблонів для досягнення конкурентоспроможності людини / надлюдської діяльності [37] на таких орієнтирах, як розпізнавання дорожніх знаків (IJCNN 2012).

Нейронні мережі навчаються, обробляючи приклади, кожен з яких містить відомі "вхідні дані" та "результат", утворюючи зважені за ймовірністю асоціації між ними, які зберігаються в структурі даних самої мережі. Навчання нейронної мережі з поданого прикладу, як правило, проводиться шляхом визначення різниці між оброблюваним виходом мережі (часто передбачуваним) та цільовим результатом. У цьому полягає помилка. Потім мережа коригує свої зважені асоціації відповідно до правила навчання та використовуючи це значення помилки. Послідовне коригування призведе до того, що нейронна мережа видаватиме результат, який все більше схожий на цільовий результат. Після достатньої кількості цих коригувань навчання може бути припинено на основі певних критеріїв. Це відоме як контрольоване навчання.

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

    1. Штучні нейрони як основна складова мережі



ANN складаються із штучних нейронів, які концептуально походять від біологічних нейронів. Кожен штучний нейрон має вхідні дані і виробляє єдиний вихід, який може бути надісланий кільком іншим нейронам. Вхідними даними можуть бути значення характеристик вибірки зовнішніх даних, таких як зображення або документи, або вони можуть бути виходами інших нейронів. Виходи кінцевих вихідних нейронів нейронної мережі виконують таке завдання, як розпізнавання об’єкта на зображенні.

Щоб знайти вихід нейрону, спочатку беремо зважену суму всіх входів, зважену вагами зв’язків від входів до нейрона. До цієї суми додаємо термін упередженості. Цю зважену суму іноді називають активацією. Потім ця зважена сума передається через (як правило, нелінійну) функцію активації для отримання вихідних даних. Початкові дані - це зовнішні дані, такі як зображення та документи. Кінцеві результати виконують завдання, наприклад, розпізнавання об’єкта на зображенні. [40]

    1. Парадигми навчання нейронних мереж



Існує дві парадигми навчання нейронних мереж - з учителем і без вчителя. У першому випадку, на вхідний вектор є готова відповідь, у другому випадку нейронна мережа самонавчається. У кожного виду навчання є своя ніша завдань і за великим рахунком вони не перетинаються. На даний момент придумано і запатентовано велика кількість архітектур нейронних мереж і методів їх навчання. Але основними (вихідними) є - для навчання з учителем це «алгоритм зворотного поширення помилки», а для навчання без учителя це алгоритми Хебба і Кохонена. Ці парадигми сильно перетинаються з біологічної дійсністю, наприклад - дитина навчається з учителем або без?

Також, останнім часом, сформувалася нова, третя парадигма - навчання з підкріпленням.

Навчання з вчителем

Ця категорія навчання має справу в парах X '; і Y ';, і завдання - відобразити їх у функції f: X → Y. Тут Y дана - це вчитель, планові бажані виходи, і X дані - це дані, які генерують Y дані. Це аналогічно вчителю, який навчає всіх виконувати певне завдання.

Одна виняткова особливість цієї парадигми навчання - пряме посилання на помилку, яка просто порівнює між плановим і поточним результатом. Параметри мережі скармливаются в вартісну функцію, яка визначає кількість невідповідність між бажаним і поточним висновком.

Навчання з учителем - дуже придатна для задач, які заздалегідь надає патерн, мета досягнення. Приклади: класифікація картинок, розпізнавання голосу, функція апроксимації, прогнозування. Зверніть увагу, що нейросеть слід забезпечити попередніми знаннями парою вводити-незалежних значень (X) і висновком Классификаци-залежних значень (Y). Присутність залежних висновком - обов'язкова умова для навчання з учителем.

Навчання без учителя

В навчанні без учителя ми маємо справу лише з даними без міток або класифікації; замість цього наша нейронна структура намагається намалювати логічні висновки і витягти знання з цього використовуючи тільки вхідні дані X.

Це аналогічно самонавчання коли хтось навчає його / її завдяки його / її досвіду і встановлюючи побічні критерії. в навчанні без учителя ми не визначаємо бажаний патерн для кожного спостереження але нейронна структура може навчатися без будь-якого вчителя.

Тут, функція вартості (cost function) грає важливу роль. Вона сильно впливає на значення нейрона так само добре як і зв'язок між вхідними значеннями.

Приклади завдань, де використовується навчання без учителя: кластеризація, компресія даних, статистичні моделі і мовні моделі.

    1. Модель нейронної мережі



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

Архітектура нейронної мережі визначає загальні принципи її побудови (плоскослоістая, полносвязная, слабозв'язаних, прямого поширення, реккурентна і т.д.).

Конфігурація конкретизує структуру мережі в рамках заданої архітектури: число нейронів, число входів і виходів мережі, які використовуються активаційні функції.

Розрізняють такі базові архітектури:

  1. мережі прямого поширення - всі зв'язки направлені строго від вхідних нейронів до вихідних. До таких мереж відносяться, наприклад персептрон Розенблатта і багатошаровий персептрон;

  2. рекурентні нейронні мережі - сигнал з вихідних нейронів або нейронів прихованого шару частково передається назад на нейрони вхідного шару мережі;

  3. мережі радіально-базисних функцій - мережі, що містять єдиний прихований шар, нейрони якого використовують радіально-симетричну активаційну функцію, застосовуються для вирішення задач класифікації та прогнозування;

  4. мережі Кохонена - клас мереж, що використовують навчання без учителя і призначених для вирішення завдань кластеризації. Вони містять всього два прошарки: вхідний (розподільний) і вихідний (кластеризуються);

  5. карти Кохонена або карти ознак, що самоорганізуються - різновид мереж Кохонена, в яких число вихідних нейронів вибирається багато більше числа формованих кластерів. Використовуються для візуалізації результатів кластеризації багатовимірних даних;

  6. повнозв'язні мережі - нейронні мережі, в яких кожен нейрон пов'язаний з усіма іншими нейронами. Такі мережі мають найвищу щільність зв'язків;

  7. слабозв'язаних мережі - в них нейрони з'єднані тільки зі своїми найближчими сусідами;

  8. нейронні мережі з плоскими шарами - в них нейрони утворюють каскади, звані шарами, при цьому нейрони кожного шару пов'язані з усіма нейронами наступного і попереднього шарів, а всередині шару зв'язків немає. Мережі з плоскими шарами можуть бути одношарові (містити один прихований шар) і багатошаровими (містити кілька прихованих шарів).

Кожна архітектура мережі призначення для вирішення певного класу задач аналізу даних (регресії, класифікації, кластеризації, прогнозування) і використовує спеціальні алгоритми навчання.

    1. Використання нейронних мереж



До теперішнього часу найбільшого поширення набули такі види нейромереж: - згорткові нейронні мережі (CNN) імітують роботу зорової кори головного мозку і частково виконують функцію абстрактного мислення. Вони прекрасно справляються із завданням розпізнавання зображень, а їх обчислення легко распараллелить на графічних процесорах, що дозволяє створювати відносно дешеві апаратні платформи з елементами ШІ.

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

- рекурентні нейронні мережі (RNN) володіють короткочасною пам'яттю, за рахунок чого легко аналізують послідовності довільної довжини. RNN розбивають потік даних на елементарні частини і оцінюють взаємозв'язки між ними. Ці алгоритми знайшли основне застосування в розпізнаванні рукописного тексту й мови. Коли ви шукаєте мелодію на слух в Shazam, розмовляєте з Siri, Google Now або Алісою від «Яндекса», залишаєте замітки від руки для Cortana - на хмарних платформах беруться за справу рекурентні нейромережі.

- мережі з довготривалою і короткочасною пам'яттю (LSTM) стали подальшим розвитком RNN. Вони гарні для прогнозування змін будь-якої величини (наприклад, біржових курсів або купівельного попиту) шляхом екстраполяції. Також їх застосовують для глибокого аналізу природної мови. Наприклад, Google використовує LSTM в персональному помічника і системі машинного перекладу Google Translate. Без LSTM якість перекладів так і залишалося б на рівні програм з дев'яностих, з якими часом було простіше перевести текст самому, ніж виправляти численні помилки.

- керовані рекурентні блоки (GRU) - порівняно недавня модифікація RNN, що з'явилася тільки в 2014 році. Їх використовують для синтезу мови, яка володіє емоційним забарвленням і звучить як справжня. Наприклад, в тестах сервісів Google Duplex і Microsoft XiaoIce люди не змогли відрізнити говорять ботів від живих співрозмовників. Примітно, що XiaoIce дозволила Microsoft зміцнитися на азіатському ринку, де розвиток компанії завжди стримувалося мовним бар'єром.

- глибокі нейронні мережі (DNN) - будь-яка мережа більш ніж з трьома шарами. Вони лежать в основі механізмів глибокого машинного навчання, знаходячи неявні взаємозв'язку між різнорідними даними. Яскравий приклад - пошук кореляцій між розвитком захворювань і різними потенційними факторами у величезних масивах наукових статей за допомогою IBM Watson.

- генеративно-змагальні мережі (GAN). Це комбінація нейромереж, одна з яких генерує варіанти, а інша відсіває їх (виступає в якості арбітра). Таке поєднання дозволяє реалізувати машинне навчання без учителя, що підвищує автономність ІІ. Наприклад, PixelDTGAN генерує окремі зображення одягу, взуття та аксесуарів для каталогів онлайн-магазинів. В якості вхідних даних використовуються фотографії, на яких ці предмети гардероба демонструють фотомоделі. Поки зйомка для каталогів одягу вважається досить витратною частиною електронної комерції, але цілком можливо, що в найближчі роки нейромережі дозволять швидко проілюструвати каталог, навіть не залучаючи фотографа. Обробка фотографій теж забирає багато часу. Ви можете спробувати зробити це набагато швидше, додаючи і прибираючи графічні об'єкти за допомогою іншої нейромережі -IBM GANPaint. Подібна їй нейросеть DRAGAN вже застосовується для автоматичної відтворення персонажів аніме і мультфільмів. Вона дозволяє прискорити вихід нових серій і утримати аудиторію розважальних каналів, не перевантажуючи аніматорів колосальним об'ємом роботи. Так що там мультфільми! GAN дозволяють анімувати тривимірну модель людини, переносячи на неї руху іншого в реальному часі. Перші результати виглядають не дуже переконливо, однак особливість будь нейромережі - в тому, що вона покращується з кожною новою порцією даних.

    1. Аритмія



Аритмія, також відома як серцева аритмія або аритмія серця, - це група станів, при яких серцебиття є нерегулярним, занадто швидким або занадто повільним. [2] Занадто швидкий пульс - понад 100 ударів на хвилину у дорослих - називається тахікардією, а занадто повільний - менше 60 ударів на хвилину - брадикардією. [2] Деякі типи аритмій не мають симптомів. [1] Симптоми, коли вони є, можуть включати серцебиття або відчуття паузи між серцебиттям. [1] У більш серйозних випадках може спостерігатися запаморочення, втрата свідомості, задишка або біль у грудях. [1] Хоча більшість типів аритмії не є серйозними, деякі схиляють людину до таких ускладнень, як інсульт або серцева недостатність. [2] [3] Інші можуть призвести до раптової смерті. [3]

Існує чотири основні групи аритмії: зайві удари, надшлуночкові тахікардії, шлуночкові аритмії та брадиаритмії. [3] До додаткових ударів відносяться передчасне скорочення передсердь, передчасне скорочення шлуночків та передчасне стикання. [3] До суправентрикулярних тахікардій належать фібриляція передсердь, тремтіння передсердь та пароксизмальна суправентрикулярна тахікардія. [3] Шлуночкові аритмії включають фібриляцію шлуночків та шлуночкову тахікардію. [3] [7] Аритмії виникають через проблеми з системою електропровідності серця. [2] У дітей також можуть виникати аритмії; однак нормальний діапазон частоти серцевих скорочень різний і залежить від віку. [3] Ряд тестів може допомогти в діагностиці, включаючи електрокардіограму (ЕКГ) та монітор Холтера. [5]

Більшість аритмій можна ефективно лікувати. [2] Лікування може включати ліки, медичні процедури, такі як введення кардіостимулятора та хірургічне втручання [6]. Ліки для прискореного серцебиття можуть включати бета-блокатори або антиаритмічні засоби, такі як прокаїнамід, які намагаються відновити нормальний серцевий ритм. [6] Ця остання група може мати більш значні побічні ефекти, особливо якщо приймати їх протягом тривалого періоду часу [6]. Електрокардіостимулятори часто використовують для повільного серцевого ритму. [6] Хворих з нерегулярним серцебиттям часто лікують розріджувачами крові, щоб зменшити ризик ускладнень. [6] Ті, хто має важкі симптоми аритмії, можуть отримати термінове лікування з контрольованим ураженням електричним струмом у вигляді кардіоверсії або дефібриляції. [6]

Аритмія вражає мільйони людей. [4] У Європі та Північній Америці станом на 2014 рік фібриляція передсердь страждає приблизно від 2% до 3% населення. [8] Фібриляція передсердь та тремтіння передсердь призвели до 112 000 смертей у 2013 році проти 29 000 у 1990 році [9]. Раптова серцева смерть є причиною приблизно половини смертей через серцево-судинні захворювання та близько 15% всіх смертей у всьому світі. [10] Близько 80% раптової серцевої смерті є результатом шлуночкових аритмій. [10] Аритмії можуть виникати в будь-якому віці, але частіше зустрічаються серед людей похилого віку. [4]

РОЗДІЛ 2. ВИБІР ЗАСОБІВ РЕАЛІЗАЦІЇ



2.1. Мова програмування Python



Python - інтерпретована мова програмування загального призначення високого рівня. Філософія дизайну Python підкреслює читабельність коду, використовуючи значні відступи. Його мовна структура та об’єктно-орієнтований підхід покликані допомогти програмістам писати чіткі логічні коди для великих та великих проектів.

Python динамічно збирає сміття. Він підтримує кілька парадигм програмування, включаючи структуроване (включаючи процедурне), об'єктно-орієнтоване та функціональне програмування. Оскільки Python має повну стандартну бібліотеку, її зазвичай описують як мову, що включає батареї.

Як спадкоємець мови програмування ABC, Гідо ван Россум почав займатись дослідженнями Python наприкінці 1980-х і вперше випустив цю мову під назвою Python 0.9.0 в 1991 році. [32] Python 2.0 був випущений у 2000 році, представивши нові функції, такі як розуміння списку та система збору сміття за допомогою підрахунку посилань, і був припинений у версії 2.7.18 у 2020 році. [33] Python 3.0 був випущений в 2008 році і є основною редакцією мови. Мова не повністю сумісна із зворотним характером, і більшість кодів Python 2 не можуть нормально працювати на Python 3.

Python завжди був однією з найпопулярніших мов програмування.

Python був задуманий наприкінці 1980-х років Гвідо ван Россумом з Нідерландських Centrum Wiskunde & Informatica (CWI). Він є наступником мови програмування ABC, натхненної SETC, яка може обробляти винятки та взаємодіяти з операційною системою Amoeba. Його реалізація розпочалась у грудні 1989 року. Як головний розробник проекту, Ван Россум брав на себе повну відповідальність за проект до 12 липня 2018 року, коли оголосив про своє "вічне свято" титулом "дружнього диктатора життя" Пітона. Він знайшов своє відображення у своїй довгій історії спільнотою Python. Зобов'язання бути головним менеджером проекту. Зараз він займає керівну посаду в якості члена ради наглядових органів із п'яти осіб. У січні 2019 року активні розробники ядра Python обрали Бретта Кеннона, Ніка Коглана, Баррі Варшаву, Керол Віллінг та Ван Россума членами комітету з п'яти осіб. З тих пір Гвідо ван Россум відкликав свою кандидатуру до ради 2020 року.

Python 2.0 був випущений 16 жовтня 2000 року з багатьма основними новими можливостями, включаючи збирач сміття для виявлення циклів та підтримку Unicode.

Python 3.0 був випущений 3 грудня 2008 року. Це серйозний перегляд мови, який не повністю сумісний з іншою стороною. Багато його основних функцій було перенесено до версій Python 2.6.x та 2.7.x. До розподілу Python 3 входить утиліта 2to3, яка автоматично (принаймні частково) перетворює код Python 2 у Python 3.

Термін дії Python 2.7 спочатку був встановлений у 2015 році, а потім перенесений на 2020 рік через побоювання, що велика кількість існуючого коду не може бути легко перенесена на Python 3. Більше виправлень безпеки та інших удосконалень не буде випущено. Наприкінці життєвого циклу Python 2 підтримує лише Python 3.6.x та новіші версії.

Оскільки всі версії Python мають проблеми з безпекою, швидкість Python 3.9.2 та 3.8.8 була прискорена, що призвело до можливого віддаленого виконання коду та отруєння веб-кешу.

Python - мова програмування з багатьма парадигмами. Він повністю підтримує об'єктно-орієнтоване програмування та структуроване програмування, а багато його функцій підтримують функціональне програмування та аспектно-орієнтоване програмування (включаючи дизайн метапрограми та мета-об'єкт (магічний метод)). Розширення підтримує багато інших парадигм, включаючи дизайн контрактів та логічне програмування.

Python використовує динамічне введення тексту та комбінацію підрахунку посилань та збирачів сміття.Сбирач сміття визначає цикл для управління пам'яттю. Він також має динамічну роздільну здатність імен (пізнє прив'язування), щоб асоціювати імена методів та змінних під час виконання програми.

Python призначений для надання певної підтримки функціонального програмування на основі Lisp. За допомогою функцій фільтрування, відображення та скорочення; перелічено розуміння генераторів, словників, наборів та виразів. Стандартна бібліотека має два модулі (itertools та functools) для реалізації функціональних інструментів, запозичених у Haskell та Standard ML.

Основні принципи мови викладені в документі Zen of Python (PEP 20), який включає такі сентенції:

  • Красиво-краще, ніж потворно.

  • Явне краще, ніж неявне.

  • Просте - краще, ніж складне.

  • Комплекс краще, ніж комплекс.

  • Розрахунок читабельності.

Python не має всіх своїх функцій, вбудованих у своє ядро, але розроблений таким чином, щоб бути дуже розширюваним (з модулями). Ця компактна модульність робить його особливо популярним як спосіб додавання програмованих інтерфейсів до існуючих програм. Бачення Ван Россума щодо малих основних мов, великих стандартних бібліотек та легко розширюваних перекладачів випливає з його невдоволення ABC, який підтримує протилежний підхід. Python прагне спростити та зменшити плутанину граматики та граматики, дозволяючи розробникам обирати методи кодування. На відміну від девізу Perl "Існує кілька способів зробити це", Python висвітлює філософію дизайну "Для цього повинен бути один - бажано, лише один очевидний спосіб". [69] Алекс Мартеллі, співробітник Фонду програмного забезпечення Python і автор книги про Python, писав: "Опис чогось як" розумного "не вважається компліментом до культури Python".

Розробники Python прагнуть уникнути передчасної оптимізації та відмовляються виправляти некритичні частини посилальної реалізації CPython. Ці виправлення відбуваються за рахунок ясності, тим самим трохи покращуючи швидкість. Коли швидкість важлива, програмісти Python можуть переміщати критично важливі для часу функції до розширень, написаних мовами, такими як C, або використовувати компілятор PyPy, що встигає за часом. Також доступний Cython, який перетворює сценарії Python на C і здійснює виклики API рівня C безпосередньо до інтерпретатора Python.

Важливою метою розробників Python є збереження задоволення від використання. Це відображається в назві мови (данина поваги британській комедійній компанії Monty Python), а іноді і в цікавих підручниках та довідкових методах, таких як стандартний foo та bars.

Користувачів та шанувальників Python, особливо тих, хто вважається обізнаним або досвідченим, часто називають Pythonistas. Python має бути простою для читання мовою. Його формат візуально не бентежить, він часто використовує англійські ключові слова, тоді як інші мови використовують розділові знаки. На відміну від багатьох інших мов, він не використовує фігурні дужки для розділення блоків і допускає крапку з комою після операторів, але крапка з комою використовується рідко. Він має менше граматичних винятків та особливих випадків, ніж C або Pascal.

Виходячи з обсягу та потужних особливостей мови Python, описаних вище, можна зробити висновок, що вона універсальна. Ось чому для виконання цієї роботи було обрано саме цю мову програмування.

2.2. sckit-image



scikit-image (раніше scikits.image) - це бібліотека зображень з відкритим кодом для мови програмування Python. [2] Він включає алгоритми сегментації, геометричного перетворення, маніпулювання кольоровим простором, аналізу, фільтрації, морфології, виявлення особливостей тощо. Він призначений для взаємодії з числовою та науковою бібліотеками Python NumPy та SciPy.

Проект scikit-image розпочався на scikits.image, а його автором був Стефан ван дер Вальт. Його назва походить від ідеї, що це "SciKit" (набір інструментів SciPy), розроблений та розповсюджений окремо стороннім розширенням SciPy. [4] Оригінальна база коду пізніше була широко переписана іншими розробниками. У листопаді 2012 року в різних наукових роботах наукові знання та наукові знання були описані як «ретельно модифіковані та популярні» [5]. Scikit-image також дуже активний у Google Summer of Code. [6]

scikit-image в основному написаний на Python, а деякі основні алгоритми написані на Cython для підвищення продуктивності.

РОЗДІЛ 3. РЕАЛІЗАЦІЯ ПРОГРАМНОГО ПРОДУКТУ




3.1. Діаграма варіантів використання



Діаграма використання найпростіша - це представлення взаємодії користувача із системою, яка показує взаємозв'язок між користувачем та різними випадками використання, в яких користувач бере участь. Діаграма випадків використання може ідентифікувати різні типи користувачів системи та різні випадки використання, і часто вона супроводжується також іншими типами діаграм. Варіанти використання представлені кругами або еліпсами.

Незважаючи на те, що сам випадок використання може детально вивчити кожну можливість, діаграма прикладів використання може допомогти забезпечити огляд системи на більш високому рівні. Раніше вже було сказано, що "схеми використання - це принципи вашої системи".

На рисунку 3.1 зображено діаграму варіантів використання, яка описує можливі дії користувача в системі.


Рис. 3.1 — Діаграма варіантів використання

3.2. Діаграма класів програмного продукту



У програмній інженерії діаграма класів в Уніфікованій мові моделювання (UML) - це статична структурна діаграма, яка описує структуру системи та відображає системні класи, її атрибути, операції (або методи) та взаємозв'язки між об'єктами.

Діаграми класів - це основні будівельні блоки об’єктно-орієнтованого моделювання. Він використовується для загального концептуального моделювання структури програми та детального моделювання для перетворення моделі в програмний код. Діаграми класів також можна використовувати для моделювання даних. Класи на схемі класів представляють основні елементи, взаємодії в програмі та запрограмовані класи.

Рис. 3.2 — Діаграма класів

3.3. Структура нейронної мережі



Розроблена нейронна мереж, фактично, представляє собою реалізацію бібліотечного класу DescisionTreeClasifier, тобто дерева прийняття рішень, яке класифікує отримані дані завдяки створеному під час навчання алгоритму.

Нейронна мережа навчалася на датасеті даних щодо кардіограм, а саме наборах критеріїв результатів кардіограм.

Нейронна мережа складається з 4-х окремих моделей, кожна з яких навчалася на окремому датасеті. Кожна з моделей націлена на визначення вірогідності наявності одного з чотирьох типів аритмії у людини, якій належить кардіограма.

Моделі навчалися на датасетах с 4-ма видами кардіограм, а саме:

  • Миготлива аритмія (рис. 3.3)

  • Тріпотіння передсердь (рис. 3.4)

  • Синусова брадикардія (рис. 3.5)

  • Синусова тахікардія (рис. 3.6)




Рис. 3.3 — Миготлива аритмія на ЕКГ



Рис. 3.4 — Фібриляція (тріпотіння) передсердь на ЕКГ


Рис. 3.5 — Синусова брадикардія на ЕКГ



Рис. 3.6 — Синусова тахікардія на ЕКГ

Кожний тип аритмії має свої унікальні характеристики, наприклад, кількість QRS-комплексів. Графік розподілу кількості QRS-комплексів зображено на рисунках 3.7 — 3.10.



Рис. 3.7 — Графік розподілу кількості QRS-комплексів для фібриляції передсердь



Рис. 3.8 — Графік розподілу кількості QRS-комплексів для миготливої аритмії



Рис. 3.9 — Графік розподілу кількості QRS-комплексів для синусової брадикардії



Рис. 3.10 — Графік розподілу кількості QRS-комплексів для синусової тахікардії
Після навчання моделі були збережені у файли за допомогою модулю pickle, як файли з розширенням .pkl.

Після навчання нейронна мережа готова до використання в реальних умовах. Принцип роботи такий: нейронна мережа отримує на вхід набір із 12 параметрів кардіограми, починаючи з віку пацієнта, який передається у вигляді масиву у допоміжну функцію.

Допоміжна функція по черзі вивантажує моделі нейронної мережі із файлів .pkl за допомогою модулю pickle та викликає у них функцію predict, в яку і подається отриманий масив параметрів.

Кожна модель на основі даних, отриманих під час навчання, визначає вірогідність наявності у людини того виду аритмії, на виявлення якого вона націлена.

Допоміжна функція повертає 4 значення з плаваючою комою, кожне з яких є вірогідністю того чи іншого виду аритмії.

Оскільки при навчанні нейронної мережі для кожної моделі був створений датасет на тисячу і більше семплів, зазвичай результат є однозначними і в процесі тестування не було виявлено набору даних, в якому 2 моделі дали б суперечливі результати.

3.3. Графічний інтерфейс користувача



Графічний інтерфейс користувача представлено інтерфейсом командного рядку, який почергово виводить запити на необхідну інформацію і видає результат роботи мережі в кінці. Зовнішній вигляд інтерфейсу представлено на рисунку 3.11.



Рис. 3.11 — Інтерфейс користувача


3.4. Інструкція користувача



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

Запуск програми через IDE:

  • Запустити IDE PyCharm

  • Натиснути кнопку «Файл» в меню вгорі вікна

  • Натиснути кнопку «Відкрити проект»

  • Обрати папку проекту

  • Вгорі вікна, зліва від зеленої кнопки «Пуск» перевірити, що конфігурація встановлена у значенні «main», якщо це не так — змінити

  • Натиснути зелену кнопку «Пуск»

  • Слідувати рекомендаціям щодо роботи з програмою

Запуск програми через командний рядок:

  • Запустити командний рядок із директорія проекту

  • В командному рядку ввести наступну команду

    • python main.py

  • Слідувати рекомендаціям щодо роботи з програмою

Для роботи з програмою:

  • Запустити програму одним з описаних вище способів

  • Слідуючи підказкам інтерфейсу ввести всі необхідні данні

  • Після кожного вводу натискати клавішу «Єнтер»

  • Вводити лише цифри

  • Після вводу останнього значення отримати результати


ВИСНОВКИ



Метою даної роботи було розроблення нейронної мережі для виявлення можливих аритмій і їх типів на базі аналізу результатів електрокардіограми.

Для виконання поставленої мети було виконано наступні завдання:

  • Провести аналіз предметної області

    • Проаналізувати поняття нейронної мережі

    • Проаналізувати поняття штучних нейронів

    • Провести огляд парадигм навчання нейронних мереж

    • Проаналізувати поняття моделі нейронної мережі

    • Оглянути сфери використання нейронних мереж

    • Розглянути поняття аритмії

  • Описати обрані засоби розробки

    • Провести огляд мови програмування Python

    • Провести огляд бібліотеки sckit-image

  • Реалізувати програмний засіб

    • Створити діаграму варіантів використання

    • Створити діаграму класів

    • Створити графічний інтерфейс користувача

    • Написати інструкцію користувача

Завдяки чіткому виконанню завдань, поставлених на початку роботи, в результаті виконання роботи було отримано повноцінну систему, що здатна виконувати закладений в неї функціонал і готова до використання в реальних умовах.

ПЕРЕЛІКИ ВИКОРИСТАНИХ ДЖЕРЕЛ





  1. Bhadeshia H. K. D. H. (1999). "Neural Networks in Materials Science" (PDF). ISIJ International. 39 (10): 966–979. doi:10.2355/isijinternational.39.966.

  2. Bishop, Christopher M. (1995). Neural networks for pattern recognition. Clarendon Press. ISBN 978-0-19-853849-3. OCLC 33101074.

  3. Borgelt, Christian (2003). Neuro-Fuzzy-Systeme : von den Grundlagen künstlicher Neuronaler Netze zur Kopplung mit Fuzzy-Systemen. Vieweg. ISBN 978-3-528-25265-6. OCLC 76538146.

  4. Cybenko, G.V. (2006). "Approximation by Superpositions of a Sigmoidal function". In van Schuppen, Jan H. (ed.). Mathematics of Control, Signals, and Systems. Springer International. pp. 303–314. PDF

  5. Dewdney, A. K. (1997). Yes, we have no neutrons : an eye-opening tour through the twists and turns of bad science. New York: Wiley. ISBN 978-0-471-10806-1. OCLC 35558945.

  6. Duda, Richard O.; Hart, Peter Elliot; Stork, David G. (2001). Pattern classification (2 ed.). Wiley. ISBN 978-0-471-05669-0. OCLC 41347061.

  7. Egmont-Petersen, M.; de Ridder, D.; Handels, H. (2002). "Image processing with neural networks – a review". Pattern Recognition. 35 (10): 2279–2301. CiteSeerX 10.1.1.21.5444. doi:10.1016/S0031-3203(01)00178-9.

  8. Fahlman, S.; Lebiere, C (1991). "The Cascade-Correlation Learning Architecture" (PDF).

  9. created for National Science Foundation, Contract Number EET-8716324, and Defense Advanced Research Projects Agency (DOD), ARPA Order No. 4976 under Contract F33615-87-C-1499.

  10. Gurney, Kevin (1997). An introduction to neural networks. UCL Press. ISBN 978-1-85728-673-1. OCLC 37875698.

  11. Haykin, Simon S. (1999). Neural networks : a comprehensive foundation. Prentice Hall. ISBN 978-0-13-273350-2. OCLC 38908586.

  12. Hertz, J.; Palmer, Richard G.; Krogh, Anders S. (1991). Introduction to the theory of neural computation. Addison-Wesley. ISBN 978-0-201-51560-2. OCLC 21522159.

  13. Information theory, inference, and learning algorithms. Cambridge University Press. 25 September 2003. Bibcode:2003itil.book.....M. ISBN 978-0-521-64298-9. OCLC 52377690.

  14. Kruse, Rudolf; Borgelt, Christian; Klawonn, F.; Moewes, Christian; Steinbrecher, Matthias; Held, Pascal (2013). Computational intelligence : a methodological introduction. Springer. ISBN 978-1-4471-5012-1. OCLC 837524179.

  15. Lawrence, Jeanette (1994). Introduction to neural networks : design, theory and applications. California Scientific Software. ISBN 978-1-883157-00-5. OCLC 32179420.

  16. MacKay, David, J.C. (2003). Information Theory, Inference, and Learning Algorithms (PDF). Cambridge University Press. ISBN 978-0-521-64298-9.

  17. Masters, Timothy (1994). Signal and image processing with neural networks : a C++ sourcebook. J. Wiley. ISBN 978-0-471-04963-0. OCLC 29877717.

  18. Ripley, Brian D. (2007). Pattern Recognition and Neural Networks. Cambridge University Press. ISBN 978-0-521-71770-0.

  19. Siegelmann, H.T.; Sontag, Eduardo D. (1994). "Analog computation via neural networks". Theoretical Computer Science. 131 (2): 331–360. doi:10.1016/0304-3975(94)90178-3. S2CID 2456483.

  20. Smith, Murray (1993). Neural networks for statistical modeling. Van Nostrand Reinhold. ISBN 978-0-442-01310-3. OCLC 27145760.

  21. Wasserman, Philip D. (1993). Advanced methods in neural computing. Van Nostrand Reinhold. ISBN 978-0-442-00461-3. OCLC 27429729.

  22. Wilson, Halsey (2018). Artificial intelligence. Grey House Publishing. ISBN 978-1-68217-867-6.

  23. Oliphant, Travis (2007). "Python for Scientific Computing". Computing in Science and Engineering. 9 (3): 10–20. Bibcode:2007CSE.....9c..10O. CiteSeerX 10.1.1.474.6460. doi:10.1109/MCSE.2007.58. S2CID 206457124.

  24. ^ Millman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science and Engineering. 13 (2): 9–12. Bibcode:2011CSE....13b...9M. doi:10.1109/MCSE.2011.36.

  25. ^ Science education with SageMath, Innovative Computing in Science Education, retrieved 22 April 2019

  26. ^ "OpenCV: OpenCV-Python Tutorials". docs.opencv.org. Retrieved 14 September 2020.

  27. ^ Dean, Jeff; Monga, Rajat; et al. (9 November 2015). "TensorFlow: Large-scale machine learning on heterogeneous systems" (PDF). TensorFlow.org. Google Research. Retrieved 10 November 2015.

  28. ^ Piatetsky, Gregory. "Python eats away at R: Top Software for Analytics, Data Science, Machine Learning in 2018: Trends and Analysis". KDnuggets. KDnuggets. Retrieved 30 May 2018.

  29. ^ "Who is using scikit-learn? — scikit-learn 0.20.1 documentation". scikit-learn.org.

  30. ^ Jouppi, Norm. "Google supercharges machine learning tasks with TPU custom chip". Google Cloud Platform Blog. Retrieved 19 May 2016.

  31. Aahz; Baxter, Anthony (15 March 2001). "PEP 6 – Bug Fix Releases". Python Enhancement Proposals. Python Software Foundation. Retrieved 27 June 2009.

  32. ^ "Python Buildbot". Python Developer’s Guide. Python Software Foundation. Retrieved 24 September 2011.

  33. ^ "1. Extending Python with C or C++ — Python 3.9.1 documentation". docs.python.org. Retrieved 14 February 2021.

  34. ^ "PEP 623 -- Remove wstr from Unicode". Python.org. Retrieved 14 February2021.

  35. ^ "PEP 634 -- Structural Pattern Matching: Specification". Python.org. Retrieved 14 February 2021.

  36. ^ "Documentation Tools". Python.org. Retrieved 22 March 2021.

  37. ^ Jump up to:a b "Whetting Your Appetite". The Python Tutorial. Python Software Foundation. Retrieved 20 February 2012.

  38. ^ "In Python, should I use else after a return in an if block?". Stack Overflow. Stack Exchange. 17 February 2011. Retrieved 6 May 2011.

  39. ^ Lutz, Mark (2009). Learning Python: Powerful Object-Oriented Programming. O'Reilly Media, Inc. p. 17. ISBN 9781449379322.

  40. ^ Fehily, Chris (2002). Python. Peachpit Press. p. xv. ISBN 9780201748840.

  41. ^ "TIOBE Index". TIOBE - The Software Quality Company. Retrieved 26 February 2021.

  42. ^ Blake, Author Troy (18 January 2021). "TIOBE Index for January 2021". Technology News and Information by SeniorDBA. Retrieved 26 February 2021.

  43. ^ TIOBE Software Index (2015). "TIOBE Programming Community Index Python". Retrieved 10 September 2015.

  44. ^ Prechelt, Lutz (14 March 2000). "An empirical comparison of C, C++, Java, Perl, Python, Rexx, and Tcl" (PDF). Retrieved 30 August 2013.

  45. ^ "Quotes about Python". Python Software Foundation. Retrieved 8 January2012.


скачати

© Усі права захищені
написати до нас