Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/9082Full metadata record
| DC Field | Value | Language |
|---|---|---|
| dc.contributor.advisor | Голуб, Сергій Васильович | - |
| dc.contributor.author | Колісник, Іван Валерійович | - |
| dc.date.accessioned | 2026-03-25T05:03:44Z | - |
| dc.date.available | 2026-03-25T05:03:44Z | - |
| dc.date.issued | 2022 | - |
| dc.identifier.uri | https://er.chdtu.edu.ua/handle/ChSTU/9082 | - |
| dc.description.abstract | Предметом розробки бакалаврської роботи є програмне забезпечення, яке буде проводити дослідження у сфері машинного навчання, а саме проводити кластеризацію даних. У першому розділі бакалаврської роботи обґрунтовано аналіз об’єкту проектування, досліджено предметну область проекту, проведено аналіз вимог та було визначено поведінку об’єктів. В другому розділі було описано проектну частину. Вона містить опис процесів проектування інформаційної системи (ІС) відповідно до її призначення, а саме: Архітектурне проектування, де описується логічна структура ІС, тобто пакети, програмні класи, підсистеми, завдання та їх зв’язки, детальне проектування, яке описує описує структури даних та алгоритми всередині окремих класів та конструювання, яке вміщує етап конструювання ІС передбачає моделювання та реалізація програмного забезпечення ІС. Передбачається вибір програмного середовища, розробка алгоритмів, та кодування. Обов’язково необхідно відобразити процес розробки та проектування інтерфейсу користувача. В останньому розділі проводиться тестування готового програмного забезпечення. | uk_UA |
| dc.language.iso | uk | uk_UA |
| dc.subject | ПРОГРАМНА РЕАЛІЗАЦІЯ | uk_UA |
| dc.subject | КЛАСТЕРИЗАЦІя | uk_UA |
| dc.subject | ТОЧКА СПОСТЕРЕЖЕННЯ | uk_UA |
| dc.subject | МОНІТОРИНГ | uk_UA |
| dc.subject | ІНФОРМАЦІЙНОЇ СИСТЕМИ | uk_UA |
| dc.title | Програмна реалізація кластеризації точок спостереження моніторингової інформаційної системи | uk_UA |
| dc.type | Bachelor Thesis | uk_UA |
| Appears in Collections: | 121 Інженерія програмного забезпечення (Інженерія програмного забезпечення) | |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Колісник Іван Валерійович. Бак. 2022.pdf Restricted Access | 9.84 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет інформаційних технологій і систем
Кафедра програмного забезпечення автоматизованих систем
Пояснювальна записка
до кваліфікаційної випускної бакалаврської роботи
з напрямку 121 “Інженерія програмного забезпечення”
(освітньо-кваліфікаційний рівень)
на тему: «ПРОГРАМНА РЕАЛІЗАЦІЯ ПІДСИСТЕМИ КЛАСТЕРИЗАЦІЇ
ТОЧОК СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ
СИСТЕМИ»
Виконав: студент 4 курсу, групи ПЗС-1944
Спеціальності
Інженерія програмного забезпечення”
(шифр і назва напряму підготовки)
Студент Колісник І.В. .
(прізвище та ініціали)
Керівник Голуб С.В. .
(прізвище та ініціали)
Рецензент Сивожелєзо М.М. .
(прізвище та ініціали)
Черкаси 2022
Форма № У-9.01
Черкаський державний технологічний університет
Факультет інформаційних технологій і систем
(повна назва)
Кафедра програмного забезпечення автоматизованих систем
(повна назва)
Спеціальність 121 «ІНЖЕНЕРІЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ»
(код і назва)
Освітня програма «ІНЖЕНЕРІЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ»
(назва)
ЗАТВЕРДЖУЮ:
Зав. кафедри
___________________________
«_______» ___________________ 20 р.
ЗАВДАННЯ
кваліфікаційну роботу бакалавра
“_____Бакалавр___”
(назва рівня)
студенту Коліснику Івану Валерійовичу
(прізвище, ім’я, по батькові)
1. Тема проекту (роботи) Програмна реалізація кластеризації точок спостереження
моніторингової інформаційної системи
затверджена наказом по університету від 07.02.2022р. №45/04
2. Термін здачі студентом закінченого проекту (роботи) 01.06.2022 Р.
3. Вихідні дані до проекту (роботи) Операційна система – Microsoft Windows 7/8/8.1/10
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити)
Вступ, 1. Аналіз об’єкта проектування, 1.1. Формулювання та аналіз вимог, 1.2. Об’єктно
структурний аналіз вимог, 1.3. Визначення поведінки об’єктів, 1.4. Опис об’єкту
проектування, 1.5. Актуальні проблеми кластерного аналізу, 1.6. Задачі кластерного аналізу,
1.7. Опис аналогів об’єкта проектування, 2. Проектування інформаційної системи, 2.1.
Архітектурне проектування, 2.2. Детальне проектування, 2.3. Конструювання, 3. Тестування
системи, Висновки, Додаток А, Додаток Б, Додаток В, Додаток Г
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень)
Г.1. Слайд «Кластеризація», Г.2. Слайд «Мета програмного продукту», Г.3. Слайд
«Актуальність теми», Г.4. Слайд «Сфера використання додатку», Г.5. Слайд «Можливості
програмного забезпечення», Г.6. Слайд «Використані програмні рішення», Г.7. Слайд «Головне
вікно програми», Г.8.Слайд «Вибір файлу із провідника», Г.9.Слайд «Вибір стовпців для аналізу
та перегляд завантаженого файлу у вікні програми», Г.10.Слайд «Вибір методу з
випадаючого списку», Г.11. Слайд «Результат кластеризації у вікні програми», Г.12. Слайд
«Збереження файлу через провідник», Г.13. Слайд «Результат збереженого файлу», Г.14.
Слайд «Назва та опис методу Яким була виконана кластеризація».
7. Дата видачі завдання 08.02.2022р.
1.4.1 Календарний план
Термін виконання
№
Назва етапів курсового проекту (роботи) етапів проекту Примітка
з/п
(роботи)
1 Підготовча стадія Виконано
1.1 Аналіз поставленої задачі Виконано
1.2 Підготовка завдання Виконано
1.3 Погодження завдання Виконано
1.4 Затвердження завдання Виконано
2 Основна стадія Виконано
2.1 Підбір матеріалів Виконано
2.2 Аналіз шляхів вирішення поставленої задачі Виконано
2.3 Оформлення первісної редакції роботи Виконано
3 Заключна стадія Виконано
3.1 Оформлення пояснювальної записки до роботи Виконано
3.2 Затвердження роботи Виконано
3.3 Рецензування роботи Виконано
Студент
____Колісник І.В.________ _______________________
(прізвище та ініціали) (підпис)
Керівник роботи
____Голуб С.В.__________ _______________________
(підпис)
Зміст
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ ....................................... 9
АНОТАЦІЯ .............................................................................................................. 10
ВСТУП...................................................................................................................... 12
1 АНАЛІЗ ОБ’ЄКТА ПРОЕКТУВАННЯ ............................................................ 15
1.1 Формулювання та аналіз вимог ................................................................... 15
1.2 Об’єктно структурний аналіз інформаційної системи ............................. 16
1.3 Визначення поведінки об’єктів ................................................................... 20
1.4 Опис об’єкту проектування ......................................................................... 22
1.4.1 Кластеризація .......................................................................................... 22
1.4.2 Алгоритми кластеризації ....................................................................... 23
1.4.3 Алгоритм k-means(k-середніх) .............................................................. 24
1.4.4 Ієрархічна(Агломеративна) кластеризація .......................................... 26
1.4.5 DBSCAN (Просторова кластеризація програм із шумом на основі
щільності) ............................................................................................................. 28
1.4.6 Нечітка кластеризація(С-середнє) ........................................................ 29
1.4.7 Кластеризація середнього зсуву(Mean shift) ....................................... 30
1.4.8 Кластеризація BIRCH(Balanced Iterative Reducing and Clustering
using Hierarchies) ................................................................................................. 31
1.4.9 Кластеризація Affinity propagation(Поширення спорідненості) ........ 32
1.4.10 Спектральна кластеризація(Spectral clustering) ................................... 34
1.4.11 Ward кластеризація(Метод Уорда) ....................................................... 36
1.4.12 Оптична кластеризація(OPTICS) .......................................................... 36
1.4.13 Метод Гуссової суміші(Gaussian mixture) ........................................... 37
1.5 Актуальні проблеми кластерного аналізу .................................................. 39
1.6 Задачі кластерного аналізу .......................................................................... 41
1.7 Опис аналогів об’єкта проектування .......................................................... 41
2 ПРОЕКТУВАННЯ ІНФОРМАЦІЙНОЇ СИСТЕМИ ....................................... 43
2.1 Архітектурне проектування ......................................................................... 43
2.2 Детальне проектування ................................................................................ 45
2.3 Конструювання ............................................................................................. 48
2.3.1 Python ....................................................................................................... 48
2.3.2 Бібліотека Tkinter ................................................................................... 50
2.3.3 Бібліотека Scikit-learn............................................................................. 50
2.3.4 Розробка інтерфейсу користувача ........................................................ 51
2.3.5 Початкові та вихідні дані....................................................................... 58
2.3.6 Початок роботи з програмою ................................................................ 63
3 ТЕСТУВАННЯ СИСТЕМИ ............................................................................... 74
ВИСНОВКИ ............................................................................................................. 85
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................................... 89
Додаток А ................................................................................................................ 89
Додаток Б ................................................................................................................ 91
Додаток В .............................................................................................................. 114
Додаток Г .............................................................................................................. 122
СПИСОК СКОРОЧЕНЬ ТА УМОВНИХ ПОЗНАЧЕНЬ
ПЗ Програмне забезпечення
ОС Операційна система
ПК Персональний комп’ютер
ТЗ Технічне завдання
ІС Інформаційна система
МІС Моніторингова інформаційна система
АНОТАЦІЯ
кваліфікаційної роботи бакалавра
на тему «Програмна реалізація підсистеми кластеризації точок
спостереження моніторингової інформаційної системи».
Студента групи ПЗС-1944
Колісника І.В.
Предметом розробки бакалаврської роботи є програмне забезпечення, яке буде
проводити дослідження у сфері машинного навчання, а саме проводити
кластеризацію даних. У першому розділі бакалаврської роботи обґрунтовано аналіз
об’єкту проектування, досліджено предметну область проекту, проведено аналіз
вимог та було визначено поведінку об’єктів.
В другому розділі було описано проектну частину. Вона містить опис процесів
проектування інформаційної системи (ІС) відповідно до її призначення, а саме:
Архітектурне проектування, де описується логічна структура ІС, тобто пакети,
програмні класи, підсистеми, завдання та їх зв’язки, детальне проектування, яке
описує описує структури даних та алгоритми всередині окремих класів та
конструювання, яке вміщує етап конструювання ІС передбачає моделювання та
реалізація програмного забезпечення ІС. Передбачається вибір програмного
середовища, розробка алгоритмів, та кодування. Обов’язково необхідно відобразити
процес розробки та проектування інтерфейсу користувача.
В останньому розділі проводиться тестування готового програмного
забезпечення.
ANNOTATION
The subject of the bachelor's thesis is software that will conduct research in the field
of machine learning, namely data clustering. In the first section of the bachelor's thesis the
analysis of the object of design is substantiated, the subject area of the project is investigated,
the analysis of requirements is carried out and the behavior of objects is defined.
The second section described the project part. It contains a description of information
system (IS) design processes according to its purpose, namely: Architectural design, which
describes the logical structure of the IS, ie packages, software classes, subsystems, tasks and
their relationships, detailed design, which describes the data structures and algorithms
within individual classes and design, which includes the stage of IP design involves
modeling and implementation of IP software. The choice of software environment,
development of algorithms, and coding is provided. It is important to reflect the process of
database development and user interface design.
The last section tests the finished software. This process consists of at least integration
and validation or system testing. The following were developed and applied:
1) tests for classes based on the implementation of behavior.
2) tests for classes and small clusters of classes, which often form templates responsible
for the implementation of specific external or internal functions.
3) tests for large class clusters or subsystems that cover the architecture of the object-
oriented application.
4) tests for object-oriented system in general, based on its verification in working
mode. Each of the stages is accompanied by appropriate UML diagrams and comments that
reflect the content of each stage and the results obtained.
ВСТУП
Останнім часом інформація, що зростає в колосальних обсягах, породжує
потребу в обробці великих обсягів даних (Big Data). У цьому напрямі велике
місце відведено інтелектуальному аналізу даних (Data Mining). Цей напрямок
включає методи, відмінні від класичного аналізу, засновані на моделюванні,
ймовірнісних, і вирішальні завдання узагальнення, асоціювання та відшукання
закономірностей. Великою мірою розвитку цієї дисципліни сприяло
проникнення у сферу аналізу даних ідей, що виникли в теорії штучного
інтелекту [1].
У цій роботі я хотів би розглянути приватне завдання подібного аналізу, а
саме завдання кластерного аналізу, відоме як завдання автоматичного
угруповання об'єктів.
Дане програмне забезпечення має на меті спростити процес проведення
досліджень у сфері машинного навчання, а саме проведення кластеризації
(кластерного аналізу) для результатів спостереження, які надасть користувач.
На виході буде розроблений програмний продукт, який буде призначений
для кластеризації результатів спостереження, які буде надавати користувач
програми. Формат вхідного файлу має бути у excel файлі. Після чого
користувач має змогу вибрати один із 6 методів кластеризації і здійснити
процес аналізу.
Метою є розробка програмного продукту яким будуть користуватись
працівники різних сфер. Вони зможуть з легкістю виконати процес
кластеризації і отримати її результат у тому ж таки excel файлі. Де зможе
побачити строчки масиву, які поділені на кластери і у кожного кластера буде
свій колір. На другому листі користувач зможе побачити назву і опис методу,
яким проводилась кластеризація.
Актуальність даної теми полягає у тому, що кожного дня людям потрібно
проводити дослідження у сфері машинного навчання і проводити
кластеризацію даних. І щоб не робити це у письмовому вигляді і не
обраховувати це за допомогою формул я виконую дане програмне
забезпечення, яке однозначно допоможе з дослідженнями. Головною перевагою
є те що даний програмний продукт є безкоштовним, на відміну від багатьох
інших, де за користування користувач повинен провести оплату.
Для досягнення мети потрібно виконати такі завдання, як:
Вивчення об’єкту проектування;
Вивчення способів реалізації даного програмного забезпечення;
Розробка алгоритму для реалізації програмного забезпечення;
Головним завданням кластерного аналізу є виділення необхідної кількості
груп об'єктів схожих між собою всередині групи та максимально відмінних від
екземплярів інших класів. Подібний аналіз широко застосовується в
інформаційних системах для відшукання закономірностей у даних.
Список областей, у яких застосовується кластеризація дуже великий: це
робота із зображеннями, маркетингові дослідження, прогнозування, текстовий
аналіз, виявлення шахрайських процесів та інші. Сьогодні кластеризація є
першим кроком для аналізу даних. Завдання кластеризації формуються у різних
наукових напрямах: у статистиці, оптимізації, машинному навчанні, що
породило безліч різних синонімів поняття кластера – клас, таксон, згущення.
Сьогодні вже застосовуються кілька десятків алгоритмів розбиття та безліч їх
модифікацій. Найчастіше дані з якими доводиться працювати цим алгоритмам
обумовлені такими особливостями як висока розмірність і надвеликий обсяг
даних (мільйони записів у тисячах полів), так само зміст великої кількості
числових (numerical), які здатні впорядковуватися у просторі, та категорійних
(categorical), що не впорядковуються, атрибутів. Атрибути набувають значення
відповідно до типу шкали, вибір якої є окремим завданням [13].
У своїй основі алгоритми кластеризації порівнюють між собою об'єкти на
основі різних заходів подібності або близькості, величини, що має межу і
зростаючою мірою схожості об'єктів. Ці заходи подібності вибираються
залежно від завдання та шкали вимірів.
Необхідність обробляти великі обсяги даних дозволила сформулювати
низку вимог для алгоритму кластеризації. Розглянемо ці вимоги. Мінімізація
ітерацій звернення до даних
Обмеженість ресурсів, зокрема пам'яті системи
Відновлюваність алгоритму
Робота алгоритму з базою даних як односпрямованого курсора.
Виконання цих умов, особливо другого пункту, визначає алгоритм як
масштабований. Алгоритм називають масштабованим, якщо при постійної
ємності оперативної пам'яті зі збільшенням числа записів у базі даних час його
роботи зростає лінійно.
Важко дотриматися балансу між високою якістю кластеризації та
масштабованістю. Тому в ідеалі в арсеналі Data Mining повинні бути
присутніми як ефективні алгоритми кластеризації мікромасивів (Microarrays),
так і масштабовані для обробки надвеликих баз даних (Large Databases) [2].
1 АНАЛІЗ ОБ’ЄКТА ПРОЕКТУВАННЯ
1.1 Формулювання та аналіз вимог
Вимоги до роботи кластеризатора – таблиця 1.1.
Таблиця 1.1
Вимоги до кластеризатора
№ Вимоги
Групувати у кластери схожі точки спостережень первинного опису об'єкта
(ПО). ПО містить перелік ознак (назви стовпчиків) та їх чисельні
характеристики, що отримані у результаті вимірювань і спостережень за
ознаками і подані у формі векторів - строчок таблиці. Схожість точок
1
спостереження оцінюється за відстанню між векторами (строчками
таблиці). Методи кластеризації відрізняються між собою критерієм
відстані між векторами. Найпоширенішим мірилом є середнє квадратичне
відхилення ознак кожного вектора від інших
Можливість кластеризувати (групувати) точки спостережень ПО за 6
2 методами (k-means, means shift, affinity propagation, birch, dbscan, spectral
clustering). Створення бібліотеки методів кластеризації
3 Можливість додавання методів кластеризації до бібліотеки
4 Форма представлення результатів кластеризації
5 Збереження результатів кластеризації
6 Вимоги до імпорту-експорту даних
Вимога до можливості застосування кількох методів кластеризації до
7
одного масиву даних без необхідності його повторного завантаження
Вимоги до комунікації програми із користувачем (діалоговий режим,
8
зміст повідомлень, керуючі впливи користувача)
Вимога до додавання стовпчика у вихідний файл, який містить номер
9
кластера
10 Вимога до надання кожному кластеру окремого кольору
Продовження табл.1.1
11 Вимога до надання у вихідному файлі 2 листа із написам та описом методу
Вимога до збереження результатів кластеризації у сортованому за
12
кластерами вигляді, або не сортованому
1.2 Об’єктно структурний аналіз інформаційної системи
Для виявлення вимог замовника будую діаграму прецедентів.
Дана діаграма показує, які вимоги потрібно реалізувати стосовно замовника.
В даному випадку це: вимога до реалізації за допомогою бібліотеки, вимога
до імпорту та експорту файлу у форматі excel, вимога до групування 6 методами
кластеризації, вимога до додавання у вихідний файл стовпця із номерами
кластерів, вимога до надання кожному кластери окремого кольору, вимога до
надання форми представлення результатів кластеризації, вимога до можливості
застовування без повторного завантаження файлу та до надання 2 листа з назвою
та описом методу, яким була проведена кластеризація (рисунок 1.1).
Діаграма варіантів прецедентів – це тип поведінкової діаграми UML, часто
використовується для аналізу різних систем. Вони дозволяють візуалізувати
різні типи ролей у системі і те, як ці ролі взаємодіють із системою. Цей посібник
із діаграми варіантів використання охоплює наступні теми і допоможе вам краще
створювати сценарії використання.
Як згадувалося раніше, діаграми прецедентів використовуються збору вимог
до використання системи. Залежно від ваших вимог, ви можете використовувати
ці дані різними способами. Нижче наведено кілька способів їхнього
використання.
Ідентифікація функцій та як з ними взаємодіють ролі – основне призначення
діаграм сценаріїв використання.
Для представлення системи на високому рівні - Особливо корисно при
поданні її керівникам або зацікавленим сторонам. Ви можете виділити ролі, які
взаємодіють із системою, та функціональні можливості, що надаються
системою, не заглиблюючись у внутрішню роботу системи.
Ідентифікація внутрішніх та зовнішніх факторів – Це може здатися простим,
але у великих складних проектах система може бути ідентифікована як зовнішня
роль в іншому випадку використання [24].
Діаграма складається з чотирьох об'єктів:
Актор;
Випадок використання;
Система;
Пакет.
Існує п'ять типів відносин на діаграмі прецедентів. Вони
Асоціація між актором та випадком використання;
Узагальнення актора;
Розширити відносини між двома випадками використання;
Включити взаємозв'язок між двома випадками використання;
Узагальнення випадку використання.
Рисунок 1.1 – Діаграма прецедентів
Для визначення, як вимоги реалізувати на практиці будую діаграму
діяльності (рисунок 1.2).
ПЗ має такий порядок виконання:
Очікування користувача(тобто очікування поки користувач запустить
додаток);
Потім користувач завантажує вхідний файл із результатами;
Якщо файл не вибрано, з’явиться відповідне повідомлення і
повернеться до його вибору;
Якщо користувач обере файл, то наступним етапом є вибір методу
кластеризації і списку із 6 методів;
Якщо користувач не обрав метод, він побачить відповідне
повідомлення і повернеться назад до його вибору;
Після чого почнеться процес кластеризації, якщо користувач не зберіг
файл, він побачить відповідне повідомлення і повернеться назад до
його збереження;
Після чого користувач може продовжити роботу або завершити її.
Діаграма діяльності – ще одна важлива діаграма UML, що описує динамічні
аспекти системи.
Діаграма дій – це, власне, блок-схема, що становить потік від однієї дії в
інший. Діяльність може бути описана як робота системи.
Потік керування передається від однієї операції до іншої. Цей потік може
бути послідовним, розгалуженим або паралельним. Діаграми дій стосуються всіх
типів управління потоком з допомогою різних елементів, як fork, join тощо.
Основні цілі діаграм діяльності аналогічні чотирьом іншим діаграмам. Він
фіксує динамічну поведінку системи. Інші чотири діаграми використовуються
для відображення потоку повідомлень від одного об'єкта до іншого, але діаграма
дій використовується для відображення потоку повідомлень від однієї дії до
іншого.
Діяльність – це спеціальна операція системи. Діаграми дій використовуються
не тільки для візуалізації динамічної природи системи, але вони також
використовуються для побудови системи, що виконується з використанням
методів прямого і зворотного проектування. Єдина річ, що бракує, на діаграмі
активності – це частина повідомлення.
Він не показує потік повідомлень від однієї дії до іншої. Діаграма діяльності
іноді сприймається як блок-схема. Хоча діаграми виглядають як блок-схема, це
негаразд. Він показує різні потоки, такі як паралельний, розгалужений,
паралельний та одиночний.
Ціль діаграми діяльності може бути описана як:
Намалюйте потік активності системи;
Опишіть послідовність від одного заняття до іншого;
Опишіть паралельний, розгалужений та паралельний перебіг системи;
Намалюйте потік активності системи;
Опишіть послідовність від одного заняття до іншого;
Опишіть паралельний, розгалужений та паралельний перебіг системи.
Діаграми дій переважно використовуються як блок-схеми, що складається з
дій, що виконуються системою. Діаграми дій – це не просто блок-схеми, оскільки
вони мають додаткові можливості. Ці додаткові повноваження включають
розгалуження, паралельний потік, доріжку тощо.
Перш ніж малювати діаграму активності, ми повинні мати чітке уявлення про
елементи, що використовуються у діаграмі активності. Основним елементом
діаграми діяльності є діяльність. Діяльність – це функція, яку виконує система.
Після визначення видів діяльності нам потрібно зрозуміти, як вони пов'язані з
обмеженнями та умовами [25].
Рисунок 1.2 – Діаграма діяльності
1.3 Визначення поведінки об’єктів
Для визначення поведінки кластеризатора будую діаграму взаємодії (рисунок
1.3).
Програмне забезпечення має такий зв’язок: Користувач відкриває програмне
забезпечення, після чого повідомляє його, що програма запущена, після чого
користувач в програмному забезпечення вибирає файл із результатами і
завантажує його, якщо файл не завантажено, то програма про це повідомляє
користувачу, наступним етапом користувач ПЗ обирає метод кластеризації, якщо
він не обрав метод, то програма повідомляє його про це, після чого програмне
забезпечення показує результат у вікні програми, якщо він не зберігає результат,
то користувач побачить відповідне повідомлення.
З терміну «Взаємодія» ясно, що діаграма використовується для опису певного
типу взаємодій між різними елементами моделі. Ця взаємодія є частиною
динамічної поведінки системи.
Ця інтерактивна поведінка представлена в UML двома діаграмами, відомими
як діаграма послідовності та діаграма співпраці. Основне призначення обох
діаграм подібні.
Діаграма послідовності підкреслює тимчасову послідовність повідомлень, а
діаграма співробітництва підкреслює структурну організацію об'єктів, які
надсилають та отримують повідомлення.
Метою діаграм взаємодії є візуалізація інтерактивної поведінки системи.
Візуалізація взаємодії – складне завдання. Отже, рішення полягає в тому, щоб
використовувати різні типи моделей, щоб охопити різні аспекти взаємодії.
Діаграми послідовності та співпраці використовуються для відображення
динамічної природи, але під іншим кутом [26].
Метою діаграми взаємодії є:
Щоб зафіксувати динамічну поведінку системи;
Для опису потоку повідомлень у системі;
Для опису структурної організації об'єктів;
Для опису взаємодії між об'єктами;
Щоб зафіксувати динамічну поведінку системи;
Для опису потоку повідомлень у системі;
Для опису структурної організації об'єктів;
Для опису взаємодії між об'єктами.
Рисунок 1.3 - Діаграма взаємодії
1.4 Опис об’єкту проектування
2.4.1 Кластеризація
Кластеризація це завдання поділу сукупності або точок даних на кілька груп
таким чином, щоб точки даних в тих самих групах були більш схожими на інші
точки даних у тій же групі, ніж в інших групах. Простіше кажучи, мета полягає
в тому, щоб відокремити групи зі схожими ознаками та об’єднати їх у кластери.
Простіше кажучи, кластеризація — це техніка машинного навчання для
організації точок даних у групи. Подібність даних (наприклад, схожий вік, та
сама стать) використовується для визначення максимально однорідних груп
(наприклад, молоді люди, чоловіки). Кластеризація працює без будь-якого
знання того, які записи є подібними, але натомість обчислює схожість виключно
на основі даних. Таким чином, кластеризація є підходящим методом для
створення груп або сегментів без попередніх знань і отримання знань з них [3].
Приклад поділу кластерів на групи, або так звані кластери (рисунок 1.4).
Рисунок 1.4 – Поділ на 3 групи кластерів за допомогою кластеризації
1.4.2 Алгоритми кластеризації
Які методи та алгоритми існують у кластеризації?
У кластеризації, як і в багатьох інших областях машинного навчання, зараз
існує велика різноманітність методів, які можна використовувати. Залежно від
програми та, перш за все, бази даних, кожен алгоритм може давати різний
результат. Я навмисно залишаю відкритим той факт, що «інше» не завжди краще
чи гірше. Тому що дані можна групувати та розділяти багатьма способами,
особливо якщо говорити про простір високої розмірності. Це фактично пояснює
складність кластеризації: застосування правильного алгоритму для даної
програми [4].
Нижче представлено алгоритми кластеризації (рисунок 1.5).
Рисунок 1.5 – Різні алгоритми кластеризації та їх вибірковість
Цей приклад показує характеристики різних алгоритмів кластеризації на
наборах даних, які є «цікавими», але все ще в 2D. За винятком останнього набору
даних, параметри кожної з цих пар набір даних-алгоритм були налаштовані для
отримання хороших результатів кластеризації. Деякі алгоритми більш чутливі до
значень параметрів, ніж інші.
Останній набір даних є прикладом «нульової» ситуації для кластеризації:
дані однорідні, і немає хорошої кластеризації. Для цього прикладу нульовий
набір даних використовує ті самі параметри, що й набір даних у рядку над ним,
що представляє невідповідність значень параметрів та структури даних [5].
1.4.3 Алгоритм k-means(k-середніх)
Кластеризація на розділи є одним із найвідоміших алгоритмів
кластеризації. k-Means є найбільш часто використовуваним алгоритмом у цій
категорії. «K» означає кількість кластерів, які потрібно визначити, а «середнє»
означає середнє, тобто де знаходиться центр кластера.
Як випливає з назви, k-means шукає точку для кожного зі своїх кластерів, де
дисперсія для всіх навколишніх точок якомога менша. Це робиться в
ітераційному процесі:
1. Ініціалізація: випадковий вибір K-центрів.
2. Призначення всіх точок даних до найближчого центру, виміряного
метрикою відстані.
3. Зміщення центрів до середини всіх призначених точок даних.
4. Перейдіть до пункту 2, якщо не досягнуто критерію припинення.
Метрика відстані — це відстань між точкою даних і центром кластера,
завдяки чому тут можна використовувати ряд методів обчислення (наприклад,
евклідова відстань, відстань Манхеттена). Наприклад, людина 18 і 160 см
зростом ближче до іншої людини 20 і 170 см, ніж людина 60 і 190 см.
Якщо алгоритм завершується, тобто досягає критерію завершення
(наприклад, кількість проходів або незначна зміна порівняно з попереднім
кроком), він виводить центр найближчого центру кластера для кожної точки
даних.
Сфери застосування та особливості k-середніх.
Той факт, що k-середніх є найбільш широко використовуваним алгоритмом
кластеризації, пояснюється його властивостями. З одного боку, це дуже легко
реалізувати, з іншого — добре масштабується навіть при великих обсягах
даних. Результатом можна контролювати ітераційно, змінюючи розмір
кластера.
Недоліки k-середніх полягають у тому, що розмір кластера потрібно
встановлювати самостійно, що він насамперед підходить для круглих
(сферичних) кластерів і може обробляти лише числові дані. Крім того, k-середніх
схильні до викидів, тому слід звернути увагу на попередню обробку даних [6].
Приклад виконання кластеризації методом k-середніх (рисунок 1.6)
Рисунок 1.6 – Кластеризація методом k-means
1.4.4 Ієрархічна(Агломеративна) кластеризація
Окрім k-середніх, ієрархічна кластеризація є одним із найбільш часто
використовуваних алгоритмів. Однак кількість кластерів не визначається
заздалегідь, але кожна точка даних починається в окремому кластері, а потім
об’єднується з найближчим. Алгоритм приблизно виглядає так:
1. Ініціалізація: кожна точка даних є кластером
2. Зв’язування: для кожного кластера найближчий знайдено відповідно до
метрики відстані, і ці кластери об’єднуються
3. Перейдіть до пункту 2), якщо не виконано критерій припинення
Відповідною частиною, очевидно, є зв’язок, тобто пошук і об’єднання двох
кластерів. Існує приблизно чотири типи зчеплення: одинарний зв’язок, середній
зв’язок, повний або максимальний зв’язок та причіпний зв’язок:
Одинарне зв’язування , найпростіший випадок, використовує дві окремі
точки даних у двох кластерах, які мають найменшу відстань. Таким чином,
висока дисперсія «добре» для кластера, оскільки з ним можна отримати більше
інших точок даних.
Average Linkage порівнює відстань від кожної точки даних до кожної
іншої точки даних в іншому кластері, а потім приймає їх середнє. Отже, чи
об’єднані кластери визначають не «виброси», а загальна композиція.
Повне (Максимальне) зв’язування повертає одиночне зв’язування і не
бере найближчі точки даних, а скоріше ті, які найбільш віддалені один від
одного, і вибирає мінімум з них для інших кластерів. Отже, він більше
зосереджується на «не вихідних».
Уорд Linkage за Джо Х. Уордом-молодшим (1963) і порівнює дисперсію
можливих зібраних кластерів. Тому як метод мінімізації дисперсії він дуже
схожий на оптимізацію k-середніх і намагається сформувати якомога однорідні
кластери.
Ієрархічна кластеризація сортує кожну сутність у кластер, а потім об’єднує
їх разом. Це створює дендрограму, яку можна легко зменшити до потрібної
кількості кластерів (рисунок 1.7).
Рисунок 1.7 – Ієрархічна кластеризація
Сфери застосування та особливості ієрархічної кластеризації.
Ієрархічна кластеризація має особливу особливість, що склад кластерів
можна відстежити до рівня окремих даних. Це робить метод особливо
привабливим у тих областях, де ви хочете інтерпретувати склад кластерів або
якщо заздалегідь неясно, скільки кластерів ви визначаєте.
Виходячи з цих думок, усі випадки використання, у яких близькість окремих
точок даних є цікавою, мають сенс, особливо з ієрархічною
кластеризацією. Наприклад, близькість людей або продуктів можна
проаналізувати дуже гнучко і сформувати в будь-яку кількість (або кілька)
кластерів. Отримана графіка (« дендограма »), яку можна візуалізувати, дозволяє
особливо візуально передати результати.
Ієрархічна агломеративна кластеризація, з іншого боку, має труднощі через
високі вимоги до ресурсів і ефекти групування, які (нелегітимно) з’єднують
кілька кластерів. Наприклад, можна побудувати свого роду міст між двома
кластерами за допомогою єдиного зв’язку, які насправді (поки що) не належать
разом, оскільки відстань між окремими точками даних менша за щільність
всередині кластера. Нарешті, все ще важко визначити, яка кількість кластерів має
сенс – тут потрібен досвід і знання предметної області [7].
1.4.5 DBSCAN (Просторова кластеризація програм із шумом на
основі щільності)
Просторова кластеризація додатків із шумом на основі щільності — це
алгоритм кластеризації, який використовується в основному у просторі великої
розмірності або для виявлення викидів. Він заснований на тому, що сусідні точки
враховуються в одному кластері, якщо вони досягають достатньої кількості
інших точок. Якщо це не так, точку визначають як «шум». Алгоритм високого
рівня працює наступним чином:
1. Для кожної точки даних зверніть увагу, скільки точок даних близько до неї
2. Якщо підключені таким чином точки даних перевищують ліміт, це
вважається кластером із «щільними» основними точками.
3. Якщо точки даних доступні з основної точки, але не відповідають ліміту,
вони вважаються доступними для щільності
4. Якщо точки даних недоступні з жодної точки ядра, вони вважаються
шумом
Алгоритм контролюється двома параметрами: довжиною відсікання
(епсилон, «довжина сусідства») і мінімальною кількістю точок даних у кластері
(minPoints). Збільшення іпсилону дозволяє отримати більше точок в одному
кластері, але втрачає вибірковість і може об’єднати кілька кластерів. Якщо
мінімальна кількість збільшується, розпізнається менше кластерів і більше точок
даних класифікується як шум або досяжна щільність.
Сфери застосування та особливості DBSCAN.
DBSCAN має деякі переваги порівняно з іншими алгоритмами кластеризації,
такими як k-середніх. Наприклад, DBSCAN може виявляти та диференціювати
кластери будь-якої форми, а не тільки сферичні, як k-середні. Той факт, що
враховується щільність кластерів, а не тільки відстань, також робить DBSCAN
більш стійким до викидів, ніж інші алгоритми.
Проблеми, з іншого боку, полягають у тому, що поведінка алгоритму дуже
сильно контролюється двома параметрами. Для цього потрібен великий досвід
або хоча б бажання експериментувати. Крім того, DBSCAN не може бути
розділений, оскільки всі точки повинні бути з'єднані в будь-який момент часу,
що тягне за собою проблеми з масштабуванням [18].
Приклад кластеризації DBSCAN (рисунок 1.8).
Рисунок 1.8 – Кластеризація методом DBSCAN
1.4.6 Нечітка кластеризація(С-середнє)
Нечітка кластеризація (також звана c-середніми або м’якими k-середніми) —
це, як випливає з назви, алгоритм, який не призначає точки фіксованому
кластеру, але працює з ймовірностями. Отже, кожна точка даних може належати
до кількох кластерів з різною ймовірністю.
Як видно з альтернативних назв c-середніх або м’яких k-середніх, алгоритм
заснований на тому ж принципі, що і k-середніх, але обчислює ймовірності
замість фіксованих кластерних приналежностей. Аналогічно, центри кластерів
розраховуються на основі ймовірностей. Таким чином, нечітка кластеризація
забезпечує розподіл балів, а не призначення.
Сфери застосування та особливості нечіткої кластеризації
Ті ж переваги та недоліки k-середніх також стосуються нечіткої
кластеризації. Однак відмінність полягає в тому, що плавне присвоєння
кластерам з використанням ймовірностей дозволяє використовувати інші
варіанти використання. Наприклад, при атрибуції клієнтів має великий сенс
призначити кожній людині «близькість» до прототипу, а не бінарні
сегменти. Проблема, однак, полягає в тому, що через багатовимірність
ймовірностей потрібна більш висока вимога, ніж для k-середніх [9].
Приклад кластеризації c-середніх (рисунок 1.9).
Рисунок 1.9 – Кластеризація c-середніх
1.4.7 Кластеризація середнього зсуву(Mean shift)
Алгоритм кластеризації середнього зсуву — це алгоритм на основі
центроїдів, який допомагає в різних випадках використання неконтрольованого
навчання. Це один з найкращих алгоритмів для обробки
зображень і комп’ютерного зору. Він працює шляхом зміщення точок даних у
напрямку до центроїдів, щоб отримати середнє значення інших точок у
регіоні. Він також відомий як алгоритм пошуку режиму. Перевага алгоритму
полягає в тому, що він призначає кластери даним без автоматичного визначення
кількості кластерів на основі визначеної пропускної здатності.
Переваги та недоліки кластеризації Mean shift.
Середній зсув — це простий кластерний метод, який дуже добре працює з
даними сферичної форми. Крім того, він автоматично вибирає кількість кластерів
на відміну від інших алгоритмів кластеризації, таких як KMeans . Крім того, вихід
середнього зсуву не залежить від ініціалізації, оскільки на початку кожна точка є
кластером.
Але недоліками є те що алгоритм не дуже масштабований, оскільки під час
його виконання вимагає багаторазового пошуку найближчих сусідів. Він має
складність O(n^2). Крім того, вибір пропускної здатності вручну може бути
нетривіальним, а вибір неправильного значення може призвести до поганих
результатів, також не вдається знайти правильні кластери для деяких наборів
даних [8].
1.4.8 Кластеризація BIRCH(Balanced Iterative Reducing and Clustering
using Hierarchies)
Алгоритми кластеризації, такі як кластеризація K-середніх, не виконують
кластеризацію дуже ефективно, і важко обробляти великі набори даних з
обмеженою кількістю ресурсів (наприклад, пам'ять або повільний
процесор). Отже, звичайні алгоритми кластеризації погано масштабуються з
точки зору часу роботи та якості, оскільки розмір набору даних
збільшується. Ось тут і з’являється кластеризація BIRCH.
Збалансоване ітераційне скорочення та кластеризація з використанням
ієрархій (BIRCH) — це алгоритм кластеризації, який може об’єднувати великі
набори даних, спочатку створюючи невеликий і компактний підсумок великого
набору даних, який зберігає якомога більше інформації. Цей менший підсумок
потім групується замість того, щоб об’єднувати більший набір даних.
BIRCH часто використовується для доповнення інших алгоритмів
кластеризації, створюючи підсумок набору даних, який тепер може
використовувати інший алгоритм кластеризації. Однак у BIRCH є один
істотний недолік – він може обробляти лише метричні атрибути. Атрибут
метрики — це будь-який атрибут, значення якого можуть бути представлені в
евклідовому просторі, тобто не повинно бути жодних категоріальних атрибутів.
Переваги та недоліки методу.
Перевагою є те, що він знаходить хорошу кластеризацію за одне сканування
та покращує якість за допомогою кількох додаткових сканувань.
А недоліком те що він обробляє тільки числові дані.
Приклад кластеризації BIRCH (рисунок 1.10).
Рисунок 1.10 – Кластеризація методом BIRCH
1.4.9 Кластеризація Affinity propagation(Поширення спорідненості)
Affinity Propagation (AP) був опублікований Frey and Dueck у 2007 році, і він
стає все більш популярним завдяки своїй простоті, загальній застосовності та
продуктивності. Він змінює свій статус з сучасного на стандартний.
Affinity Propagation створює кластери, надсилаючи повідомлення між
точками даних до конвергенції. На відміну від алгоритмів кластеризації, таких
як k-середніх чи k-медоїдів, поширення спорідненості не вимагає визначення
чи оцінки кількості кластерів перед запуском алгоритму, для цієї мети двома
важливими параметрами є перевага , яка контролює кількість прикладів (або
прототипи), а також коефіцієнт демпфування, який зменшує відповідальність
та доступність повідомлень, щоб уникнути чисельних коливань під час
оновлення цих повідомлень.
Набір даних описується з використанням невеликої кількості прикладів,
«приклади» є членами вхідного набору, які є репрезентативними для
кластерів. Повідомлення, надіслані між парами, представляють придатність
одного зразка бути прикладом іншого, який оновлюється у відповідь на
значення з інших пар. Це оновлення відбувається ітераційно до зближення, у
цей момент вибираються остаточні зразки, і, отже, ми отримуємо остаточну
кластеризацію.
Основними недоліками K-Means та подібних алгоритмів є необхідність
вибору кількості кластерів та вибору початкового набору точок. Affinity
Propagation, натомість, приймає як вхідні міри подібності між парами точок
даних і одночасно розглядає всі точки даних як потенційні зразки. Реально цінні
повідомлення обмінюються між точками даних, поки поступово не з’явиться
високоякісний набір зразків і відповідних кластерів [10].
Приклад кластеризації Affinity propagation (рисунок 1.11).
Рисунок 1.11 – Кластеризація методом поширення спорідненості
1.4.10 Спектральна кластеризація(Spectral clustering)
Спектральна кластеризація — це техніка, що має коріння в теорії графів, де
цей підхід використовується для ідентифікації спільнот вузлів у графі на основі
ребер, що їх з'єднують. Метод є гнучким і дозволяє нам також групувати
неграфічні дані.
Спектральна кластеризація використовує інформацію з власних значень
(спектру) спеціальних матриць, побудованих на основі графіка або набору
даних. Ми навчимося будувати ці матриці, інтерпретувати їх спектр і
використовувати власні вектори для приписування наших даних кластерам.
Три основних етапи спектральної кластеризації: побудова графіка подібності,
проектування даних на простір нижньої вимірності та кластеризація
даних. Враховуючи набір точок S у просторі вищої вимірності, його можна
розробити наступним чином:
1. Сформуйте матрицю відстаней
2. Перетворіть матрицю відстаней у матрицю спорідненості A
3. Обчисліть матрицю ступенів D і матрицю Лапласа L = D – A.
4. Знайдіть власні значення та власні вектори L.
5. З власними векторами k найбільших власних значень, обчислених на
попередньому етапі, утворіть матрицю.
6. Нормувати вектори.
7. Згрупуйте точки даних у k-вимірному просторі.
Сфера використання спектральної кластеризації
Спектральна кластеризація має своє застосування в багатьох областях, які
включають: сегментацію зображень, аналіз освітніх даних, роздільну здатність
об’єктів, розділення мовлення, спектральну кластеризацію білкових
послідовностей, сегментацію текстового зображення. Хоча спектральна
кластеризація є технікою, заснованою на теорії графів, цей підхід
використовується для визначення спільнот вершин у графі на основі ребер, що
їх з'єднують. Цей метод є гнучким і дозволяє нам також групувати неграфічні
дані з вихідними даними або без них.
Переваги та недоліки спектральної кластеризації
Спектральна кластеризація допомагає нам подолати дві основні проблеми в
кластеризації: одна - це форма кластера, а інша - визначення центроїда
кластера. Алгоритм K-середніх зазвичай припускає, що кластери сферичні або
круглі, тобто в межах k-радіуса від центроїда кластера. У K означає багато
ітерацій, щоб визначити центроїд кластера. У спектрі кластери не мають
фіксованої форми чи шаблону. Точки, які знаходяться далеко, але з’єднані,
належать до одного кластеру, а точки, менш віддалені одна від одної, можуть
належати до різних кластерів, якщо вони не з’єднані. Це означає, що алгоритм
може бути ефективним для даних різної форми та розміру.
Якщо порівнювати з іншими алгоритмами, він є швидким у обчисленні для
розріджених наборів даних із кількох тисяч точок даних. Вам не потрібен
фактичний набір даних для роботи. Відстань або Хоча обчислення для великих
наборів даних може бути дорогим, оскільки необхідно обчислити власні
значення та власні вектори, а потім виконати кластеризацію. Але алгоритми
намагаються знизити витрати. Перед початком процедури необхідно зафіксувати
кількість кластерів (k) [11].
Приклад спектральної кластеризації (рисунок 1.12).
Рисунок 1.12 – Спектральна кластеризації
1.4.11 Ward кластеризація(Метод Уорда)
Метод Уорда (він же метод мінімальної дисперсії або метод кластеризації
мінімальної дисперсії Уорда ) є альтернативою
одноланцюговій кластеризації . Популярний у таких галузях, як лінгвістика, він
подобається тому, що зазвичай створює компактні кластери рівного розміру.
Як і більшість інших методів кластеризації, метод Уорда є інтенсивним
обчислювальним процесом. Проте метод Уорда має значно менше обчислень,
ніж інші методи. Недоліком є те, що це зазвичай призводить до менш
оптимальних кластерів. Тим не менш, отримані кластери зазвичай достатньо
хороші для більшості цілей [20].
Приклад кластеризації методом Уорда (рисунок 1.13).
Рисунок 1.13 – Кластеризація методом Уорда
1.4.12 Оптична кластеризація(OPTICS)
OPTICS Clustering означає упорядкування точок для визначення структури
кластера . Він черпає натхнення з алгоритму кластеризації DBSCAN. Він додає
ще два терміни до концепцій кластеризації DBSCAN. Вони є:
1. Відстань до ядра: це мінімальне значення радіусу, необхідного для
класифікації даної точки як основної точки. Якщо дана точка не є основною
точкою, то її відстань ядра не визначено.
2. Відстань доступності: визначається відносно іншої точки даних
q(Let). Відстань досяжності між точками p і q — це максимальна відстань між
ядрами p і евклідова відстань (або інша метрика відстані) між p і q. Зауважте,
що відстань доступності не визначається, якщо q не є основною точкою.
Ця техніка кластеризації відрізняється від інших методів кластеризації тим,
що ця методика не сегментує дані явно на кластери. Замість цього він створює
візуалізацію відстаней доступності та використовує цю візуалізацію для
кластерування даних [8].
Приклад оптичної кластеризації (рисунок 1.14).
Рисунок 1.14 – Оптична кластеризація
1.4.13 Метод Гуссової суміші(Gaussian mixture)
Моделі гаусової суміші (GMM) часто використовуються для кластеризації
даних. Ви можете використовувати GMM для
виконання жорсткої або м’якої кластеризації даних запиту.
Щоб виконати жорстку кластеризацію, GMM призначає точки даних запиту
багатоваріантним нормальним компонентам, які максимізують апостеріорну
ймовірність компонента, враховуючи дані. Тобто, за умови підібраного
GMM, cluster дані запиту призначаються компоненту, що дає найвищу
апостеріорну ймовірність. Жорстка кластеризація призначає точку даних точно
одному кластеру. Для прикладу, який показує, як пристосувати GMM до даних,
кластер за допомогою підігнаної моделі та оцінку апостеріорних ймовірностей
компонентів .
Крім того, ви можете використовувати GMM для більш гнучкої кластеризації
даних, яка називається м’якою (або нечіткою ) кластеризацією. М’які методи
кластеризації призначають оцінку точці даних для кожного кластера. Значення
оцінки вказує на міцність асоціації точки даних з кластером. На відміну від
жорстких методів кластеризації, м’які методи кластеризації є гнучкими, оскільки
вони можуть призначити точку даних більш ніж одному кластеру. Коли ви
виконуєте кластеризацію GMM, оцінка є апостеріорною ймовірністю. Для
прикладу м’якої кластеризації з GMM дивіться кластерні гауссові дані суміші з
використанням м’якої кластеризації .
Кластеризація GMM може вміщувати кластери, які мають різні розміри та
кореляційні структури всередині них. Тому в деяких програмах кластеризація
GMM може бути більш прийнятною, ніж такі методи, як кластеризація k -
середніх. Як і багато інших методів кластеризації, кластеризація GMM вимагає
від вас вказати кількість кластерів перед встановленням моделі. Кількість
кластерів визначає кількість компонентів у GMM.
Для GMM дотримуйтесь наведених нижче практичних порад.
Розглянемо компонентну коваріаційну структуру. Ви можете вказати
діагональні чи повні матриці коваріації, а також чи всі компоненти мають
однакову коваріаційну матрицю.
Вкажіть початкові умови. Алгоритм максимізації очікування (EM)
відповідає GMM. Як і в алгоритмі кластеризації k -середніх, EM чутливий до
початкових умов і може сходитися до локального оптимуму. Ви можете вказати
власні початкові значення для параметрів, вказати початкові кластерні
призначення для точок даних або дозволити їх вибирати випадковим чином, або
вказати використання алгоритму k -means++ .
Запровадити упорядкування. Наприклад, якщо у вас більше провісників,
ніж точок даних, ви можете упорядкувати для стабільності оцінки [19].
Приклад кластеризації методом Гауссової суміші (рисунок 1.15).
Рисунок 1.15 – Кластеризація методом Гауссової суміші
1.5 Актуальні проблеми кластерного аналізу
Незважаючи на велику кількість досліджень у галузі кластерного аналізу, у
цій галузі існує низка актуальних проблем. Можна сформулювати основні:
1. Обґрунтування якості результатів. Проблема полягає в тому, що один і
той же об'єкт може бути класифікований у різні групи незалежно від його
внутрішніх властивостей, а у зв'язку з різними експертними даними чи різною
побудовою системи. Для уникнення цього необхідно розробляти та вводити
актуальні критерії якості.
2. Аналіз великої кількості різнотипних даних породжує методологічну
проблему вибору метрик. Також збільшення кількості об'єктів навіть
однотипних даних може призвести до нерозрізненість відстаней.
3. Нелінійність взаємозв'язків. Класичні методи зниження розмірності у
кластерному аналізі спрямовані на лінійному взаємозв'язку між змінними. Для
пошуку складніших залежностей необхідно переходити до ядерних методів.
4. Проблема пошуку глобального екстремуму функції критерію якості.
Критерій якості, як правило, є функцією, яка залежить від великої кількості
факторів, нелінійним, що володіє безліччю локальних екстремумів. Для
знаходження кластерів необхідно вирішити складне комбінаторне завдання
пошуку оптимального варіанта класифікації. Тому алгоритм повного перебору
варіантів має трудомісткість, що експоненційно залежить від розмірності. Якщо
кількість груп заздалегідь невідома, то перебірне завдання стає складнішим.
Таким чином, зі збільшенням розмірності таблиць даних відбувається
«комбінаторний вибух». Класичні алгоритми кластерного аналізу здійснюють
спрямований пошук у порівняно невеликому підмножині простору рішень,
використовуючи різноманітні апріорні обмеження (на число кластерів або їх
форму, на порядок включення об'єктів у групи тощо). При цьому знаходження
строго оптимального рішення не гарантується. Для пошуку оптимального
рішення застосовуються складніші методи, такі як генетичні (еволюційні)
алгоритми, нейронні мережі тощо. Існують експериментальні дослідження, які
б підтверджували переваги таких алгоритмів перед класичними алгоритмами.
Однак і при використанні еволюційних методів виникають проблеми, пов'язані
зі специфікою задачі кластер-аналізу, що розв'язується: з труднощами
інтерпретації використовуваних операторів рекомбінації і кросовера.
5. Нестійкість результатів кластеризації. Найчастіше результати
угруповання можуть змінюватися залежно від вибору початкових умов,
порядку об'єктів, параметрів роботи алгоритмів. Різними авторами
пропонуються засоби підвищення стійкості групувальних рішень, засновані на
застосуванні ансамблів алгоритмів. При цьому використовуються результати
угруповання, отримані різними алгоритмами, або одним алгоритмом, але з
різними параметрами налаштування за різними підсистемами змінних і т.д.
Після побудови ансамблю проводиться перебування підсумкового
колективного рішення.
6. Недостатність знань про об'єкт. Існує проблема важко формалізованих
областей, у яких утруднюється створення моделі об'єкта. В такому випадку стає
скрутним застосування алгоритмів, що ґрунтуються на уявленні класу, як
набору розподілених у просторі змінних.
7. Проблема уявлення результатів. Крім хорошої прогнозуючої здатності
для будь-якого алгоритму аналізу даних важливо, наскільки зрозумілими та
інтерпретованими є його результати. Для покращення інтерпретованості рішень
можна використовувати логічні моделі. Такі моделі використовуються на
вирішення завдань розпізнавання образів і прогнозування кількісних
показників, наприклад, у методах побудови вирішальних дерев чи логічних
вирішальних функцій [12].
1.6 Задачі кластерного аналізу
Кластерний аналіз виконує такі основні завдання [2]:
• Дослідження схем угруповання об'єктів;
• Вироблення гіпотез з урахуванням досліджень даних;
• Підтвердження гіпотез та досліджень даних;
• Визначення присутності груп усередині даних.
1.7 Опис аналогів об’єкта проектування
SB-ProX6
SBProX – професійна аналітична платформа, призначена для об'ємного,
кластерного та технічного аналізу ф'ючерсів CME, FORTS, EUREX, ICE, акцій
NYSE та NASDAQ, а також акцій та валют з біржі MOEX.
Можливості SBProX:
Швидкодія
Швидке відображення графіків при масштабуванні та переміщенні.
Висока швидкість завантаження робочих просторів (workspaces).
Сучасний красивий та зрозумілий інтерфейс.
Симулятор
Ручне тестування торгових стратегій перед виходом на реальний ринок.
Зміна швидкості відображення графіка. Побарний аналіз історичних
даних.
Зручна статистика результатів, можливість поєднувати статистичні дані
за різні дні.
АТАS
ATAS спеціалізується на аналізі потоку ордерів, кластерному аналізі, об'ємному
профілі ринку та просунутому технічному аналізі.
Потужна комбінація аналітичних інструментів підвищує прозорість ринку, що
дозволяє трейдерам швидко реагувати та ефективно приймати торговельні рішення.
Платформа використовується проп-трейдинговими (proprietary trading)
компаніями та професійними трейдерами по всьому світу.
Реалізовано можливість швидкого та простого підключення до популярних
постачальників даних, таких як Rithmic, CQG/Continuum, dxFeed, T4 (CTS), TT,
IQfeed, Interactive Brokers, Plaza II, Quik з можливістю торгівлі через Rithmic,
CQG/Continuum, T4 (CTS), TT, Interactive Brokers, Plaza II та Quik.
2 ПРОЕКТУВАННЯ ІНФОРМАЦІЙНОЇ СИСТЕМИ
2.1 Архітектурне проектування
Структурно логічна схема має такий вигляд:
1. Створення вікна програми.
2. Додавання компонентів на вікно(кнопки, випадаючий список, рядок
стану).
3. Реалізація 1 методу кластеризації і збереження методу у файлі excel із
наданням різних кольорів для кожного кластеру і додавання стовпця із номерами
кластерів в кінці вихідного файлу.
4. Реалізація 5 методів кластеризації.
5. Для методів, які потребують вибір кількості кластерів, створено вікно із
запитом на кількість кластерів для кластеризації.
6. Реалізація шляху збереження.
7. Надання файлу за замовчування назви методу.
8. Створення вікна, де відображаються дані, які були завантажені, це
потрібно для того, щоб було зручно вибирати дані для кластеризації.
9. Створення вікна в якому відображаються результати в сортованому
вигляді.
10. Додавання чек боксу із вибором чи зберігання сортованого масиву чи не
сортованого.
В кінцевому вигляді маємо додаток, який спочатку завантажує вхідний файл із
результатами спостереження, після чого іде вибір методу кластеризації, потім
проводиться кластеризація, результат бачимо у вікні програми і ми можемо їх
зберегти у сортованому вигляді, або не в сортованому.
Для відображення її логічної структури у вигляді пакетів будую діаграму пакетів
(рисунок 2.1). Вона містить 8 пакетів, які описують поетапне виконання програми.
Спочатку користувач відкриває ПЗ кластеризації даних, після чого проводиться
кластеризації за допомогою одного з методів, які вибере сам користувач(k-means,
birch, dbscan, spectral clustering, affinity propagation, means shift).
Рисунок 2.1 – Діаграма пакетів
Для відображення її логічної структури у вигляді компонентів будую діаграму
компонентів (рисунок 2.2). Вона містить 4 компоненти.
Програмне забезпечення кластеризації даних(тобто спочатку користувач
відкриває ПЗ);
Користувач(він реалізовує вибір методу кластеризації);
Запит(після вибору методу кластеризації користувач вибирає кількість
кластерів, якщо це потрібно);
ПЗ виконує кластеризації даних(після вибору методу і кількості кластерів
програма реалізовує кластеризації даних).
Рисунок 2.2 – Діаграма компонентів
2.2 Детальне проектування
Складаю план для етапу програмування. Для створення програмного
забезпечення була застосована така модель проектування, як «Waterfall», тобто
каскадна модель або водоспад (рисунок 2.3).
Рисунок 2.3 – Етап програмування
Переваги «водоспаду»
Розробку легко контролювати. Замовник завжди знає, чим зараз зайняті
програмісти, може управляти термінами та вартістю.
Вартість проекту визначається на початковому етапі. Всі кроки
заплановані вже на етапі погодження договору, ПЗ пишеться безперервно
«від і до».
Не потрібно наймати тестувальників із серйозною технічною
підготовкою. Тестувальники зможуть спиратися на детальну технічну
документацію [27].
Для відображення результатів етапу детального проектування будую таблицю в
якій записую назви класів та опис всіх операцій і атрибутів класів.
Назви класів та опис всіх операцій і атрибутів – таблиця 2.1.
Таблиця 2.1
Назви класів та опис всіх операцій і атрибутів
Клас Опис
Батьківський клас для ініціалізації вікон та створення спільних
методів. Цей метод слугує для налаштування основних
параметрів, які відносяться до вікон, такі як: логотип
програми, додавання label, додавання combo box, додавання
button на вікна та для налаштування геометрії вікна.
Class.AppFather Цей клас має такі методи: __init__(Конструктор класу),
get_window_position(Метод, що вираховую позицію вікна по
центру), get_window_size(Метод, що розгортає вікно на
повний екран), set_send_value(Метод який передає дані по
кластерах), return_value(Метод, що відкриває вікно з запитом
на додаткову інформацію).
Клас для вікна із вибором кількості кластерів. Наслідується
від AppFather. Цей клас має такі методи: __init__(Конструктор
Class.AskClusters класу), write_value(Метод, що зчитує дані з combo box),
return_value(Метод, що відкриває вікно з запитом на додаткову
інформацію)
Клас для вікна із вибором першого і останнього стовпця для
проведення аналізу. Наслідується від AppFather. Цей клас має
такі методи: __init__(Конструктор класу),
write_first_value(Метод, що отримує дані по вибору 1 стовпця),
Class.AskRange
write_last_value(Метод, що отримує дані по вибору останнього
стовпця), set_value_send(Метод який передає дані по
діапазону), return_value(Метод, що відкриває вікно з запитом
на додаткову інформацію).
Продовження табл.2.1
Клас із вікном для відображення результатів. Наслідується від
AppFather. Цей клас має такі методи: __init__(Конструктор
класу), return_value(Метод, що відкриває вікно з запитом на
Class.Result
додаткову інформацію), set_save_frame(Метод який відповідає
за сортування по кластерах), switch(Метод, що відповідає за не
сортований варіант збереження).
Клас головного вікна. Наслідується від AppFather. Цей клас
має такі методи: __init__(Конструктор класу), set_ui(Метод що
налаштовує елементи вікна), update_status(Метод, що оновлює
рядок стану), configer_status_frame(Метод, який відповідає за
рядок стану), open_file(Метод, що викликає вікно вибору
файлу), get_range(Метод, що отримує дані про перший та
Class.App останній стовпець для аналізу), get_clusters(Метод, що
отримує кількість кластерів), check_data(Метод, що перевіряє
коректність даних), process(Метод, що обробляє дані, які
завантажив користувач), show_result(Метод, який показує
результат у вікні), save_result(Метод, який викликає вікно
збереження файлу), exit_app(Метод, що закриває вікно
програми та припиняє процес).
Результат етапу детального проектування відображаю діаграмою класів, що
містять опис всіх операцій і атрибутів класів (рисунок 2.4). На ній представлена
загальна структура моделі, тобто класи та їх зміст. Діаграма класів служить графічним
представленням статичної структури застосунку у об’єктно-орієнтованій парадигмі.
Окрім власне візуалізації та документування структури ієрархії класів, діаграма
класів також використовується для конструювання шляхом прямого або зворотнього
проектування. Розроблена діаграма містить 5 класів, що необхідні для коректної
роботи застосунку, та показує відношення у цих класах.
Рисунок 2.4 – Діаграма класів, що відображає атрибути та операції класів
2.3 Конструювання
2.3.1 Python
Для реалізації даного програмного забезпечення я обрав мову програмування
Python. Тому що у даній мові існує бібліотека scikit-learn, яка уміщує в себе достатньо
алгоритмів кластеризації, які можливо потім реалізовувати у своїх цілях і яка чудово
підходить для реалізації даного завдання.
Python — це високорівнева мова програмування загального призначення, яка
використовується навіть для розробки веб-додатків. Мова орієнтована підвищення
продуктивності розробника і читаності коду.
Python підтримує кілька парадигм програмування: структурне, об'єктно-
орієнтоване, функціональне, імперативне та аспектно-орієнтоване. У мові присутня
динамічна типізація, автоматичне керування пам'яттю, повна інтроспекція, механізм
обробки винятків, підтримка багатопоточних обчислень та зручні високорівневі
структури даних. Програмний код на Python організовується у функції та класи, які
можуть об'єднуватись у модулі, а вони у свою чергу можуть бути об'єднані у пакети.
Python зазвичай використовується як інтерпретований, але може бути
скомпільований в байт-код Java та в MSIL (в рамках платфори .NET).
Розробники мови Python дотримуються певної філософії програмування, званої
The Zen of Python (Дзен Пітона або Дзен Пайтона):
Гарне краще, ніж потворне.
Явне краще, ніж неявне.
Просте краще, ніж складне.
Складне краще, ніж заплутане.
Плоске краще, ніж вкладене.
Розріджене краще ніж щільне.
Читання має значення.
Особливі випадки не такі особливі, щоб порушувати правила.
При цьому практичність важливіша за бездоганність.
Помилки ніколи не повинні замовчуватись.
Якщо не замовчуються явно.
Зустрівши двозначність, відкинь спокусу вгадати.
Має бути один — і, бажано, лише один — очевидний спосіб зробити це.
Хоча він спочатку може бути не очевидний, якщо ви не голландець.
Зараз краще ніж ніколи.
Хоча ніколи часто краще, ніж зараз.
Якщо реалізацію складно пояснити, ідея погана.
Якщо реалізацію легко пояснити, то ідея, можливо, хороша.
Простір імен - відмінна штука! Робитимемо їх більше!
По продуктивності інтерпретований Python схожий на всі інші подібні
мови, але можливість компіляції в байт-код дозволяє досягти більшої
продуктивності.
У порівнянні з Ruby та деякими іншими мовами, у Python відсутня можливість
модифікувати вбудовані класи, такі як int, str, float, list та інші.
У Python є глобальне блокування інтерпретатора (GIL) - при своїй роботі
основний інтерпретатор постійно використовує велику кількість потоково-
небезпечних даних. В основному це словники, в яких зберігаються атрибути об'єктів,
і звернення до зовнішнього коду, тому, щоб уникнути руйнування цих даних при
спільній модифікації з різних потоків, перед початком виконання кількох інструкцій
(зазвичай сто) потік інтерпретатора захоплює GIL, а після закінчення звільняє.
Існує кілька реалізацій мови - CPython (основна), Jython, PyS60, IronPython,
Stackless, Python for .NET, PyPy, python-safethread, Unladen Swallow, tinypy [14].
2.3.2 Бібліотека Tkinter
Для реалізації віконного інтерфейсу було прийнято рішення використати
бібліотеку Tkinter.
У Python є досить багато GUI фреймворків (graphical user interface), проте тільки
Tkinter вбудований у стандартну бібліотеку мови. У Tkinter є кілька переваг. Він
кроссплатформенний, тому один і той самий код можна використовувати на Windows,
macOS і Linux.
Візуальні елементи відображаються через власні елементи поточної операційної
системи, тому програми, створені за допомогою Tkinter, виглядають так, ніби вони
належать платформі, на якій вони працюють.
Хоча Tkinter є популярним GUI фреймворком на Python, він має свої недоліки.
Один з них полягає в тому, що графічні інтерфейси, створені за допомогою Tkinter,
виглядають застарілими. Якщо вам потрібен сучасний, яскравий інтерфейс, то Tkinter
може виявитися не зовсім тим, для цього є PyQt5 який розвивається сильніше в цьому
плані.
Тим не менш, у плані використання Tkinter є відносно легким у порівнянні з
іншими бібліотеками. Це відмінний вибір для створення GUI додатків у Python,
особливо якщо сучасний вигляд не в пріоритеті для програми, а велику роль відіграє
функціональність та кросплатформова швидкість [15].
2.3.3 Бібліотека Scikit-learn
Дане програмне забезпечення реалізує алгоритми кластеризації за допомогою
модуля sklearn.cluster.
Кожен алгоритм кластеризації має два варіанти: клас, який реалізує метод fit для
вивчення кластерів на даних поїзда, та функція, яка, враховуючи дані поїзда, повертає
масив цілісних міток, що відповідають різним кластерам. Для класу мітки над
навчальними даними можна знайти у labels.
Важливо відзначити, що алгоритми, реалізовані в цьому модулі, можуть
приймати як вхідні дані різні види матриць. Усі методи приймають стандартні
матриці даних форми (n_samples, n_features). Їх можна отримати з класів у модулі
sklearn.feature_extraction. Для AffinityPropagation , SpectralClustering і DBSCAN також
можна ввести матриці подібності форми (n_samples, n_samples) . Їх можна отримати
з функцій у модулі sklearn.metrics.pairwise [16].
2.3.4 Розробка інтерфейсу користувача
Програмне забезпечення має такі елементи інтерфейсу:
Button «Відкрити файл»;
Button «Запуск»;
Button «Вийти»;
Button «Відправити»;
Button «Зберегти»;
ComboBox з виборов кількості кластерів;
ComboBox з вибором діапазону для аналізу;
CheckBox з вибором функція зберігання сортованого вигляду чи не
сортованого;
Рядок Label, який слугує, як рядок стану;
Програмне забезпечення буде слугувати для проведення досліджень у сфері
машинного навчання. Програма буде виконувати кластеризацію результатів
спостереження. Вона приймає вхідний файл у форматі xlsx, тобто excel. Для
завантаження файлу потрібно у вікні програми натиснути кнопку «Відкрити файл»,
після чого можна з провідника вибрати файл для завантаження. Після вибору файлу
відкриється вікно, де можна побачити вхідний файл у вікні програми і після чого
потрібно обрати перший та останній стовпець для проведення аналізу та натиснути
кнопку «Відправити». Далі користувач повинен обрати метод кластеризації, всього їх
6 реалізовано(Means shift, K-means, DBSCAN, BIRCH , Spectral clustering, Affinity
propagation). Натискаємо кнопку «Запуск» і якщо користувач обере такі методи
кластеризації як: K-means, BIRCH та Spectral clustering, то ще потрібно додатково
обрати кількість кластерів, для цього відкриється додаткове вікно із запитом про
вибір, обираємо і натискаємо кнопку «Відправити», якщо користувач обере інші 3
методи, то відразу ми побачимо повідомлення, що «Обробка даних завершена». І
після того запускається процес кластеризації. Спочатку результат можна буде
побачити у вікні програми, у сортованому вигляді, якщо користувач захоче зберегти
у сортованому по кластерах вигляді, то потрібно натиснути кнопку «Зберегти» і
перейти до процесу збереження, але якщо користувач захоче отримати результат у
вигляді вхідного файлу без сортування, то потрібно поставити позначку навпроти
«Зберегти без сортування» і тоді переходимо до процесу зберігання. При зберіганні
відкриється провідник, де користувач може вибрати довільний шлях збереження і
надати назву файлу, яку захоче, за замовчуванням назва файлу буде назвою методу,
який був використаний. Вихідним файлом буде файл у тому ж форматі excel, але
строчки масиву будуть поділені на кластери, у кожного кластера свій номер(0,1,2…),
а також окремий колір, на іншому листі можна буде побачити опис методу
кластеризації, яким проводилась робота.
Нижче ми можемо спостерігати інтерфейс головного вікна (рисунок 2.5).
Рисунок 2.5 – Головне вікно програми
Нижче ми можемо спостерігати вікно із запитом для вибору першого та
останнього стовпця для аналізу даних (рисунок 2.6).
Рисунок 2.6 – Вікно із запитом на вибір першого та останнього стовпця
Нижче ми можемо спостерігати вікно із результатами кластеризації. За
замовчуванням у вікно буде відображатись сортований масив даних (рисунок 2.7).
Рисунок 2.7– Вікно із результатами кластеризації
У програмі існують попереджувальні повідомлення, які реалізуються за
допомогою бібліотеки Warnings.
Попереджувальні повідомлення зазвичай видаються в ситуаціях, коли корисно
попередити користувача про будь-яку умову в програмі, коли умова (зазвичай) не
вимагає створення виключення та завершення програми.
Саме в таких випадках і використовуються ці повідомлення у програмі.
Нижче ми можемо спостерігати повідомлення, коли користувач не вибрав файл,
або вибрав файл невірного формату (рисунок 2.8).
Рисунок 2.8 – Повідомлення з помилкою
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав перший
стовпець для аналізу даних (рисунок 2.9).
Рисунок 2.9 – Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
останній стовпець для аналізу даних (рисунок 2.10).
Рисунок 2.10– Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
останній стовпець для аналізу даних (рисунок 2.11).
Рисунок 2.11 – Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
кількість кластерів для методу кластеризації (рисунок 2.12).
Рисунок 2.12 – Повідомлення з попередженням
Після успішного вибору вхідного файлу, діапазону для кластеризації та методу
кластеризації ми можемо спостерігати повідомлення, що «»Обробка даних завершена
(рисунок 2.13).
Рисунок 2.13 – Інформативне повідомлення
Якщо користувач не збереже результат кластеризації, то ми будемо
спостерігати таке повідомлення (рисунок 2.14).
Рисунок 2.14 – Повідомлення з попередженням
Якщо користувач не обере шлях для збереження, то ми будемо спостерігати
таке повідомлення (рисунок 2.15).
Рисунок 2.15 – Повідомлення з попередженням
Після того як користувач вкаже шлях для збереження і назву(за замовчуванням
назва методу яким відбувалась кластеризації) можна буде спостерігати таке
повідомлення (рисунок 2.16).
Рисунок 2.17 – Повідомлення про збереження вихідного файлу
У програмі також реалізовано рядок стану, який показує службові
повідомлення.
Після запуску програми рядок стану буде показувати таке повідомлення
«Програма працює» (рисунок 2.18).
Рисунок 2.18– Повідомлення в рядку стану «Програма працює»
Після завантаження вхідного файлу та вибору діапазону для аналізу рядок
стану матиме таке повідомлення «Дані успішно завантажено» (рисунок 2.19).
Рисунок 2.19 - Повідомлення в рядку стану «Дані успішно завантажено»
2.3.5 Початкові та вихідні дані
Обов’язковою умовою для вхідних даних є завантаження результатів
спостереження у форматі xlsx, тобто excel.
Нижче наведено приклад вхідних даних (рисунок 2.20).
Рисунок 2.20 – Файл excel із вхідними даними
Перший стовпчик А - кількість захворювань ендокринної системи в різних
точках спостереження Черкаської області.
Стовпчики B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S ,T - це концентрація
шкідливих речовин у повітрі житлової зони.
Первинний опис побудований для синтезу моделі залежності захворюваності
населення від концентрації шкідливих речовин у повітрі.
Вихідним файлом буде, той же файл excel, але буде проведена кластеризація і
масив даних буде поділений на кілька груп(кластерів).
У вихідному файлі буде доданий стовпчик, де кластери нумеруються, тобто
кожному кластеру буде наданий свій номер(0,1,2…).
Також кожній групі кластерів надається свій колір.
На другому листі у файлі із результатами кластеризації, буде надана назва
методу, яким проводилась кластеризації і його опис.
Нижче ми можемо спостерігати, вихідний файл із результатами кластеризації для
всіх 6 методів кластеризації, які реалізовані у програмі.
Метод Affinity Propagation (рисунок 2.21).
Рисунок 2.21 – Результат кластеризації методом Affinity propagation
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.22).
Рисунок 2.22– Назва і опис методу у файлі excel
Метод BIRCH (рисунок 2.23).
Рисунок 2.23 - Результат кластеризації методом BIRCH
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.24).
Рисунок 2.24 – Назва і опис методу у файлі excel
Метод DBSCAN (рисунок 2.25).
Рисунок 2.25 - Результат кластеризації методом DBSCAN
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.26).
Рисунок 2.26 – Назва і опис методу у файлі excel
Метод K-means (рисунок 2.27).
Рисунок 2.27- Результат кластеризації методом K-means
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.28).
Рисунок 2.28 – Назва і опис методу у файлі excel
Метод Means shift (рисунок 2.29).
Рисунок 2.29 - Результат кластеризації методом Means shift
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.30).
Рисунок 2.30 – Назва і опис методу у файлі excel
Метод Spectral Clustering (рисунок 2.31).
Рисунок 2.31 - Результат кластеризації методом Spectral clustering
Його назву і опис ми можемо спостерігати на 2 листі (рисунок 2.32).
Рисунок 2.32 – Назва і опис методу у файлі excel
2.3.6 Початок роботи з програмою
Для початку роботи з програмою необхідно встановити програмне забезпечення
за допомогою інсталятора.
Для розробки інсталятора спочатку потрібно зробити .exe файл. Щоб його
зробити у python існує пакет PyInstaller [17].
Pyinstaller – це пакет Python, який пов'язує всі залежності програм Python в
одному пакеті.
Pyinstaller читає та аналізує наш код, а потім виявляє модулі, які вимагають
нашої програми для виконання. Потім він упаковує їх в одну папку або один файл,
що виконується.
Він використовується для створення файлів .exe для Windows, файлів .App для
Mac і пакетів для Linux.
Для початку роботи з цим пакетом потрібно спочатку його встановити. Це
робиться за допомогою команди: pip install pyinstaller у терміналі.
Після встановлення якщо ви не знаходитесь у папці зі своїм проєктом, то
потрібно туди перейти за допомогою команди cd. Після того як перейдемо в папку,
потрібно ввести команду: pyinstaller --noconsole --onefile --icon=img/clustering.ico main
py.
Pyinstaller це наша команда яка скампілює файл.
--noconsole означає, що після створення .exe файлу, програма буде запускатись
без консолі, за замовчуванням якщо не ввести цю команду консоль буде присутня.
--onefile означає, що ми створимо один виконавчий файл.
--icon означає, що ми додамо іконку на .exe файлі ставимо знак = і пишемо шлях,
де знаходиться наша іконка у мене це img/clustering.ico.
Pyinstaller аналізує наш код і робить наступне:
• Створює .spec файл, який містить інформацію про файли, які мають бути
запаковані.
• Створено папку збірки, яка містить деякі файли журналу та робочі файли.
• Папка з ім'ям Dist також буде створено, в ній буде містититись .exe файл з тим
же ім'ям, що і назва нашого головного файлу (рисунок 2.33).
Рисунок 2.33– Створені файли і папки після завершення процесу
Після створення заходимо у папку dist, де і буде знаходитись наш .exe файл
(рисунок 2.34).
Рисунок 2.34 - .exe файл
Але це ще не все, наступним етапом буде створення інсталятора для нашого
програмного забезпечення. Це потрібно для того щоб можна було розповсюджувати
наше програмне забезпечення на різних ПК.
Для створення інсталятора я використаю програму Inno Setup Compiler 6.2.0. Для
початку її потрібно завантажити та інсталювати на ПК. Для цього переходжу за
посиланням: https://jrsoftware.org/isdl.php та шукаю Download Sites (рисунок 2.35).
Рисунок 2.35 – Завантаження Inno Setup
Після чого відкриваю та інсталюю на свій ПК. Після інсталяції нам відкриється
головне вікно програми (рисунок 2.36).
Рисунок 2.36 – Головне вікно програми Inno Setup
Далі переходжу в пункт меню File і вибираю там New (рисунок 2.37).
Рисунок 2.37 – Пукти меню File та New
Відкриється вікно, де натискаємо Next (рисунок 2.38).
Рисунок 2.38 – Початок створення інсталятора
В наступному вікні у полі Application name вводжу назву назву програмного
забезпечення, яку воно матиме, версію додатку та виконавець програми та натискаю
Next (рисунок 2.39).
Рисунок 2.39 – Налаштування додатку
У наступному вікні у пункті Application destination base folder за замовчуванням
залишаю Program Files folder, це означає, що додаток встановиться у Program Files на
вашому диску та залишаю позначку навпроти Allow user to change the application
folder, це означає що користувач зможе самостійно вибрати шлях для встановлення
та натискаємо Next (рисунок 2.40).
Рисунок 2.40 – Збереження інсталятора при встановленні
У наступному вікні у полі Application main executable file вибираю шлях до свого
.exe, який я створив раніше за допомогою PyInstaller та залишаю за замовчування
позначку навпроти Allow user to start the application after Setup has finished, це означає,
що після встановлення програмне забезпечення автоматично запуститься та натискаю
Next (рисунок 2.41).
Рисунок 2.41 – Вибір .exe
На наступному вікні прибираю позначку навпроти Create a shortcut to the main
executable in the common Start Menu Programs folder, у полі Application Start Menu
folder name пишу назву того, як наший файл буде відображатись у меню Пуск.
Навпроти всіх чек боксів ставлю позначку, перший чек бокс відповідає за те що ми
зможемо змінювати назву папки у меню Пуск, другий чек бокс відповідає за те що ми
дозволяємо користувачу відключати завантаження у меню Пуск, третій чек бокс
відповідає за те що від додасть деінсталятор, який дозволить видалити програмне
забезпечення через меню Пуск і останній чек бокс відповідає за те що користувач
може завантажити іконку для програмного забезпечення та натискаю Next (рисунок
2.42).
Рисунок 2.42 – Налаштування для меню Пуск
У наступному вікні ми можемо додати файл ліцензії, який буде показано у вікні
інсталятора, щоб його створити, створюю у звичайному текстовому файлі довільний
текст, у мене це «IvanKolisnik Community (c)» після чого зберігаю і додаю шлях до
цього файлу та натискаю Next (рисунок 2.43).
Рисунок 2.43 – Створення та вибір файлу ліцензії
В наступному вікні за замовчуванням залишаю позначку навпроти Administrative
install mode(install for all users), цей мод означає, що наший Setup буде запускатись від
імені Адміністратора та натискаю Next (рисунок 2.44).
Рисунок 2.44 – Запуск від імені Адміністратора
В наступному вікні вибираю 3 мови, якими можна буде при виборі виконати
інсталяцію та натискаю Next (рисунок 2.45).
Рисунок 2.45 – Вибір мови
В наступному вікні у полі Custom compiler output folder вказую куди збережеться
інсталятор, у полі Custom output base file name вказую назву Setup інсталятора і у полі
Custom Setup icon file вказую шлях до іконки, яка буде у програмі та натискаю Next
(рисунок 2.46).
Рисунок 2.46 – Назва інсталятора та вибір іконки
В наступному вікні знімаю позначку, яка знаходиться навпроти Yes, use #define
compiler derectives та натискаю Next (рисунок 2.47).
Рисунок 2.47 – Вікно визначення директив кампілятора
В наступному вікні натискаю Finish (рисунок 2.48). і переходжу до скрипту
створення інсталятора (рисунок 2.49).
Рисунок 2.48 – Вікно завершення процесу створення інсталятора
Рисунок 2.49 – Скрипт створеного інсталятора
Після чого натискаю кнопку Run або F9 і переходжу до створення Setup
інсталятора. Інсталятор готовий до встановлення (рисунок 2.50).
Рисунок 2.50 – Створений інсталятор
Після чого можна виконати встановлення і користуватись програмним
забезпеченням.
3 ТЕСТУВАННЯ СИСТЕМИ
3.1 Метод K-means
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних, який використовується для
всіх методів (рисунок 3.1). Дані були занесені у файл excel.
Рисунок 3.1 – Вхідні дані для тестування методів
Після завершення кластеризації програмним забезпеченням маємо такий
результат (рисунок 3.2).
Рисунок 3.2 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.3).
Рисунок 3.3 – Занесені дані із файлу excel
Наступним етапом обираю кількість кластерів, у моєму випадку це 2 (рисунок
3.4).
Рисунок 3.4 – Вибір кількості кластерів
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.5).
Рисунок 3.5 – Кнопка запуску процесу кластеризації «Cluster data»
Результати можемо спостерігати у вікні Clustering Result (рисунок 3.6). Тут є такі
пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
Рисунок 3.6 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми можемо
бачити те що дані сходяться і є коректними.
3.2 Метод Mean Shift
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних (рисунок 3.1).
програмним забезпеченням маємо такий результат (рисунок 3.7).
Рисунок 3.7 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.8).
Рисунок 3.8 – Занесені дані із файлу excel
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.9).
Рисунок 3.9 – Кнопка запуску процесу кластеризації «Cluster»
Результати можемо спостерігати у вікні Output (рисунок 3.10). Тут є такі пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
Рисунок 3.10 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми можемо
бачити те що дані сходяться і є коректними.
3.3 Метод BIRCH
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних (рисунок 3.1).
Після завершення кластеризації програмним забезпеченням маємо такий
результат (рисунок 3.11).
Рисунок 3.11 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.12).
Рисунок 3.12 – Занесені дані із файлу excel
Наступним етапом обираю кількість кластерів, у моєму випадку це 2 (рисунок
3.13).
Рисунок 3.13 – Вибір кількості кластерів
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.14).
Рисунок 3.14 – Кнопка запуску процесу кластеризації «Cluster»
Результати можемо спостерігати у вікні Output (рисунок 3.15). Тут є такі пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
Рисунок 3.15 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми можемо
бачити те що дані сходяться і є коректними.
3.4 Метод DBSCAN
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних (рисунок 3.1).
Після завершення кластеризації програмним забезпеченням маємо такий
результат (рисунок 3.16).
Рисунок 3.16 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.17).
Рисунок 3.17 – Занесені дані із файлу excel
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.18).
Рисунок 3.18 – Кнопка запуску процесу кластеризації «Cluster»
Результати можемо спостерігати у вікні Output (рисунок 3.19). Тут є такі пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
Рисунок 3.19 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми можемо
бачити те що дані сходяться і є коректними.
3.5 Метод Affinity propagation
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних (рисунок 3.1).
Після завершення кластеризації програмним забезпеченням маємо такий
результат (рисунок 3.20).
Рисунок 3.20 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.21).
Рисунок 3.21 – Занесені дані із файлу excel
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.22).
Рисунок 3.22 – Кнопка запуску процесу кластеризації «Cluster»
Результати можемо спостерігати у вікні Output (рисунок 3.23). Тут є такі пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
Рисунок 3.23 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми
можемо бачити те що дані сходяться і є коректними.
3.6 Метод Spectral clustering
Для тестування використовується метод порівняння із еталоном. За еталон
визначено онлайн-сервіс ToolSlick. Даний сервіс створений саме для вирішення
таких задач як кластеризація даних. Він реалізує в собі алгоритми для вирішення
задач кластеризації даних.
Вхідними даними було обрано такий набір даних (рисунок 3.1).
Після завершення кластеризації програмним забезпеченням маємо такий
результат (рисунок 3.24).
Рисунок 3.24 – Результат кластеризації
Тепер переходжу до тестування онлайн сервісом «ToolSlick».
Записую дані з excel файлу у вікно введення даних Input (рисунок 3.25).
Рисунок 3.25 – Занесені дані із файлу excel
Наступним етапом обираю кількість кластерів, у моєму випадку це 2 (рисунок
3.26).
Рисунок 3.26 – Вибір кількості кластерів
Для отримання результатів натискаю кнопку «Cluster» (рисунок 3.27).
Рисунок 3.27 – Кнопка запуску процесу кластеризації «Cluster»
Результати можемо спостерігати у вікні Output (рисунок 3.28). Тут є такі пункти:
Label (Надпис для нумерації);
Vector (Дані по рядково);
Cluster id (Нумерація кластерів);
Cluster proportion.
=
Рисунок 3.28 – Вікно результатів даних
Якщо порівняти дані програмного забезпечення і онлайн сервісу, то ми можемо
бачити те що дані сходяться і є коректними.
ВИСНОВКИ
В результаті дипломного проектування було розглянуто та виконано завдання за
напрямом інженерії програмного забезпечення. Також було розглянуто методи
кластерного аналізу, популярні продукти для кластеризації даних та їх застосування.
На підставі чого було встановлено, що безліч систем реалізовано під конкретні
завдання. Під час розробки програмного забезпечення було розглянуто методи
кластеризації, що застосовуються в сучасних системах, з яких вибралися 6 основних
методів, це: K-means, DBSCAN, BIRCH, Spectral Clustering, Means shift, Affinity
propagation. Реалізація програмного забезпечення була успішно проведена із
застосуванням бібліотеки «Scikit-learn» мови Python . Для мене постало завдання не
тільки кластеризації, але й розробки програмного забезпечення для її виконання.
Після успішної кластеризації формується вихідний файл у форматі xlsx, тобто excel.
Згруповані у кластери строчки масиву позначаються одним кольором. Різні кластери
мають різні кольори. Крім того в кінець додається стовпчик, де кластери
нумеруються. Кожна строчка містить номер свого кластера.
Дотримано всіх вимог, які були озвучені.
У процесі реалізації застосував процес об'єктно-орієнтованого проектування для
реалізації програмної системи із кластеризації точок спостереження. Реалізував на
кожному із етапів проектування процедури, що передбачені для даного етапу, описав
їх та подав результати виконання цих процедур у формі UML-діаграм.
У результаті отримуємо програмний додаток, який буде використовуватись у
сфері машинного навчання і за допомогою якого користувач буде проводити
дослідження результатів спостереження за допомогою кластеризації.
При розробці програмного забезпечення для дипломного проєкту були освоєні
нові знанні у сфері машинного навчання, а також покращено навички у програмуванні
та отриманий великий практичний досвід роботи з:
Python;
Бібліотекою Tkinter;
Бібліотекою Scikit-learn;
Результати кваліфікаційної роботи пройшли апробацію на 2 наукових
конференціях. За темою роботи опубліковані 2 роботи. Копії публікацій подані у
додатку Д.
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1. davaiknam.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://davaiknam.ru/text/aktualenie-problemi-klasternogo-analiza
(Дата звернення 13.04.2022). - Кластеризація
2. studwood.net [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://studwood.net/1596793/informatika/vvedenie (Дата звернення
13.04.2022). - Кластеризація
3. quora.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.– Режим
доступу: https://www.quora.com/What-is-clustering (Дата звернення 13.04.2022). -
Кластеризація
4. freecodecamp.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://www.freecodecamp.org/news/8-clustering-algorithms-in-
machine-learning-that-all-data-scientists-should-know/ (Дата звернення 13.04.2022). –
Алгоритми кластеризації
5. scikit-learn.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://scikit-
learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html (Дата звернення
15.04.2022). – Алгоритми кластеризації
6. towardsdatascience.com [Електронний ресурс] : [Інтернет-портал]. – Електронні
дані.– Режим доступу: https://towardsdatascience.com/k-means-clustering-algorithm-
applications-evaluation-methods-and-drawbacks-aa03e644b48a (Дата звернення
15.04.2022). – K-means алгоритм
7. geeksforgeeks.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://www.geeksforgeeks.org/ml-hierarchical-clustering-
agglomerative-and-divisive-clustering/ (Дата звернення 15.04.2022). – Ієрархічна
кластеризація
8. freecodecamp.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://www.freecodecamp.org/news/8-clustering-algorithms-in-
machine-learning-that-all-data-scientists-should-know/ (Дата звернення 16.04.2022). –
Алгоритми кластеризації
9. wikipedia.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://en.wikipedia.org/wiki/Fuzzy_clustering (Дата звернення
16.04.2022). – Нечітка кластеризації
10. towardsdatascience.com [Електронний ресурс] : [Інтернет-портал]. –
Електронні дані.– Режим доступу: https://towardsdatascience.com/unsupervised-
machine-learning-affinity-propagation-algorithm-explained-d1fef85f22c8 (Дата
звернення 16.04.2022). – Метод Affinity propagation
11. towardsdatascience.com [Електронний ресурс] : [Інтернет-портал]. –
Електронні дані.– Режим доступу: https://towardsdatascience.com/spectral-clustering-
aba2640c0d5b#:~:text=Spectral%20clustering%20is%20a%20technique,non%20graph
%20data%20as%20well. (Дата звернення 16.04.2022). – Метод Spectral clustering
12. basegroup.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: І. А. Чубукова Data Mining - Інтернет-університет
інформаційних технологій, Біном. Лабораторія знань ISBN 978-5-94774-819-2;
2008 р. (Дата звернення 16.04.2022). – Кластеризація
13. basegroup.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: Н. Паклін «Алгоритми кластеризації на службі Data Mining».
http://www.basegroup.ru/clusterization/datamining.html (Дата звернення
16.04.2022). – Кластеризація
14. web-creator.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://web-creator.ru/articles/python (Дата звернення
17.04.2022). – Python
15. python-scripts.com [Електронний ресурс] : [Інтернет-портал]. – Електронні
дані.– Режим доступу: https://python-scripts.com/tkinter (Дата звернення
18.04.2022). – Бібліотека Tkinter
16. scikit-learn.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://scikit-learn.ru/clustering/ (Дата звернення 18.04.2022). –
Кластеризація
17. pythonru.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://pythonru.com/biblioteki/pyinstaller (Дата звернення
18.04.2022). – PyInstaller
18. towardsdatascience.com [Електронний ресурс] : [Інтернет-портал]. – Електронні
дані.– Режим доступу: https://towardsdatascience.com/dbscan-clustering-
explained-97556a2ad556 (Дата звернення 18.04.2022). – Метод DBSCAN
19. towardsdatascience.com [Електронний ресурс] : [Інтернет-портал]. – Електронні
дані.– Режим доступу: https://towardsdatascience.com/gaussian-mixture-models-
d13a5e915c8e (Дата звернення 18.04.2022). – Метод Гауссової суміші
20. statistics.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://www.statistics.com/glossary/wards-linkage/ (Дата
звернення 18.04.2022). – Метод Ворда
21. scikit-learn.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://scikit-learn.org/stable/modules/clustering.html (Дата
звернення 18.04.2022). – Кластеризація
22. jetbrains.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://www.jetbrains.com/ru-
ru/pycharm/download/#section=windows (Дата звернення 18.04.2022). – PyCharm
23. jrsoftware.org [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://jrsoftware.org/isinfo.php (Дата звернення 18.04.2022). -
InnoSetup
24. visual-paradigm.com [Електронний ресурс] : [Інтернет-портал]. – Електронні
дані.– Режим доступу: https://www.visual-paradigm.com/guide/uml-unified-
modeling-language/what-is-use-case-diagram/ (Дата звернення 20.04.2022).
25. tutorialspoint.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу:
https://www.tutorialspoint.com/uml/uml_activity_diagram.htm#:~:text=Activity%2
0diagram%20is%20another%20important,an%20operation%20of%20the%20syste
m. (Дата звернення 22.04.2022).
26. coderlessons.com [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.–
Режим доступу: https://coderlessons.com/tutorials/akademicheskii/uchit-uml/uml-
diagrammy-vzaimodeistviia . (Дата звернення 22.04.2022).
27. gb.ru [Електронний ресурс] : [Інтернет-портал]. – Електронні дані.– Режим
доступу: https://gb.ru/posts/methodologies. (Дата звернення 22.04.2022).
Додаток А
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ СИСТЕМИ
Специфікація
482.ЧДТУ. 221539.01
Листів 2
Розробник: ________________________ Колісник І. В.
Керівник: ________________________ Голуб С. В.
Черкаси 2022
482.ЧДТУ. 221539.01 2
Позначення Найменування Примітка
482.ЧДТУ. 221539.01 12 01 Текст програми
482.ЧДТУ. 221539.01 34 01 Інструкція користувача
482.ЧДТУ. 221539.01 90 01 Графічний матеріал
482.ЧДТУ. 221539.01 90 01 Тези конференцій
92
Додаток Б
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ СИСТЕМИ
Текст програми
482.ЧДТУ. 221539.01 12 01
Листів 22
Розробник: ________________________ Колісник І. В.
Керівник: ________________________ Голуб С. В.
Черкаси, 2022
482.ЧДТУ. 221539.01 12 01 2
Файл main.py
from interface import *
def main():
root = App()
root.mainloop()
if __name__ == '__main__':
main()
Файл interface.py
import sys
import string
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox as mb
from tkinter import filedialog as fd
from process import *
from output import save_xlsx
# Батьківський клас для ініціалізаціі вікон та створення спільних методів
class AppFather(tk.Tk):
app_w = 100
app_h = 100
n_clusters = None
first_col = None
last_col = None
def __init__(self):
super().__init__()
# Іконка програми
self.iconbitmap(r'C:\Clusters\img/clustering.ico')
self.send = False
self.df = pd.DataFrame()
# Фрейм для надпису
94
482.ЧДТУ. 221539.01 12 01 3
self.frame_label = ttk.Frame(self)
self.frame_label.pack(fill=tk.X)
# Фрейм полів вибору
self.frame_combo = ttk.Frame(self)
self.frame_combo.pack(fill=tk.X)
# Фрейм для виводу таблиці
self.table_frame = ttk.Frame(self)
self.table_frame.pack(fill=tk.X)
# Фрейм для кнопки
self.frame_button = ttk.Frame(self)
self.frame_button.pack(fill=tk.X)
self.geometry(f'{self.app_w}x{self.app_h}' +
self.get_window_position(self.app_w, self.app_h, 72))
# Метод, що вираховую позицію вікна по центру
def get_window_position(self, app_w, app_h, offset):
width = self.winfo_screenwidth()
height = self.winfo_screenheight()
x = int((width - app_w)/2)
y = int((height - app_h)/2) + offset
return f'+{x}+{y}'
# Метод, що розгортає вікно на повний екран
def get_window_size(self):
width = self.winfo_screenwidth()
height = self.winfo_screenheight()
return f'{width}x{height}+-8+0'
def get_tree_view(self):
max_width = self.winfo_screenwidth() - 50
row_0 = self.df.columns.tolist()
max_height = int((self.winfo_screenheight() - 250)/20)
row_width = int(max_width/(len(row_0) + 1))
95
482.ЧДТУ. 221539.01 12 01 4
table = ttk.Treeview(self.table_frame, height=max_height)
heads = [x for x in string.ascii_uppercase[:len(row_0)]]
table['columns'] = heads
table.column('#0', anchor='center', minwidth=10, width=row_width)
for header in heads:
table.heading(header, text=header, anchor='center')
table.column(header, anchor='center', minwidth=10, width=row_width)
table.insert('', 'end', values=tuple(row_0))
for i, row in enumerate(self.df.values):
table.insert('', 'end', text=f'{i + 1}', values=tuple(row))
scrollbarx = ttk.Scrollbar(self.table_frame, orient=tk.HORIZONTAL,
command=table.xview)
scrollbary = ttk.Scrollbar(self.table_frame, orient=tk.VERTICAL,
command=table.yview)
table.configure(xscrollcommand=scrollbarx.set, yscrollcommand=scrollbary.set)
scrollbarx.pack(side=tk.BOTTOM, fill=tk.X)
scrollbary.pack(side=tk.RIGHT, fill=tk.Y)
table.pack(expand=tk.YES, fill=tk.BOTH)
self.table_frame.pack(pady=10)
def set_value_send(self):
self.send = True
self.destroy()
# Вікно запиту кількості кластерів
class AskClusters(AppFather):
app_w = 250
app_h = 150
def __init__(self):
super().__init__()
self.title('Запит')
# Змінна для отримання кількості кластерів
96
482.ЧДТУ. 221539.01 12 01 5
self.n_clusters = ''
self.table_frame.destroy()
# Текстовий лейбл
self.label = tk.Label(self.frame_label, text="Потрібна додаткова інформація")
# Кількість кластерів для вибору
combo_list = ['Оберіть кількість кластерів'] + [str(x) for x in range(2, 21)]
# Елемент випадаючого списку
self.combobox = ttk.Combobox(self.frame_combo, values=combo_list,
state='readonly')
self.combobox.current(0)
self.combobox.bind("<<ComboboxSelected>>", self.write_value)
self.button = tk.Button(self.frame_button, text="Відправити",
command=self.set_value_send)
self.label.pack(padx=20, pady=20)
self.combobox.pack(padx=25, pady=15, fill=tk.X)
self.button.pack()
def write_value(self, event):
self.n_clusters = self.combobox.get()
def return_value(self):
self.grab_set()
self.wait_window()
value = False
if self.send:
try:
value = int(self.n_clusters)
except ValueError:
value = False
return value
# Вікно запиту діапазону даних
class AskRange(AppFather):
97
482.ЧДТУ. 221539.01 12 01 6
def __init__(self, df):
super().__init__()
self.title('Запит')
self.df = df
self.first_col = '-'
self.last_col = '-'
self.geometry(self.get_window_size())
self.label = tk.Label(self.frame_label, text="Оберіть перший та останній
стовбчик для аналізу")
# Кількість кластерів для вибору
combo_list_first = ['-'] + [s for s in string.ascii_uppercase]
combo_list_last = ['-'] + [s for s in string.ascii_uppercase]
# Елемент випадаючого списку
self.combobox_first = ttk.Combobox(self.frame_combo,
values=combo_list_first, state='readonly')
self.combobox_last = ttk.Combobox(self.frame_combo, values=combo_list_last,
state='readonly')
self.combobox_first.current(0)
self.combobox_last.current(0)
self.combobox_first.bind("<<ComboboxSelected>>", self.write_first_value)
self.combobox_last.bind("<<ComboboxSelected>>", self.write_last_value)
self.button = tk.Button(self.frame_button, text="Відправити",
command=self.set_value_send)
self.table_frame = ttk.Frame(self)
self.label.pack(padx=5, pady=10)
self.combobox_first.pack(padx=5, pady=5)
self.combobox_last.pack(padx=5, pady=5)
self.button.pack()
def write_first_value(self, event):
self.first_col = self.combobox_first.get()
98
482.ЧДТУ. 221539.01 12 01 7
def write_last_value(self, event):
self.last_col = self.combobox_last.get()
def set_value_send(self):
if self.first_col == '-':
mb.showwarning('Попередження!', 'Ви не обрали початок діапазону!')
elif self.last_col == '-':
mb.showwarning('Попередження!', 'Ви не обрали кінець діапазону!')
else:
self.send = True
self.destroy()
# Метод, що відкриває вікно з запитом на додаткову інформацію
# та повертає дані або False, якщо дані не введені
def return_value(self):
self.get_tree_view()
self.grab_set()
self.wait_window()
if self.send:
value = (self.first_col, self.last_col)
return value
else:
return False
# Вікно відображення результатів
class Result(AppFather):
def __init__(self, df):
super().__init__()
self.title('Результат')
self.iconbitmap(r'C:\Clusters\img/clustering.ico')
self.df = df
self.sort = tk.BooleanVar()
99
482.ЧДТУ. 221539.01 12 01 8
self.sort.set(False)
self.geometry(self.get_window_size())
ttk.Label(self.frame_label, text="Результати кластеризації").pack(pady=10)
self.tree_frame = ttk.Frame(self)
self.save_frame = ttk.Frame(self)
def return_value(self):
self.get_tree_view()
self.set_save_frame()
self.grab_set()
self.wait_window()
if self.send:
return self.sort
return None
def set_save_frame(self):
self.save_frame.pack(pady=5, padx=10, side='top')
self.checkbox = tk.Checkbutton(self.save_frame, text='Зберегти без
сортування',
variable=self.sort, command=self.switch)
self.checkbox.deselect()
self.checkbox.pack(pady=5, padx=10, side='left')
ttk.Button(self.save_frame, text='Зберегти',
command=self.set_value_send).pack(pady=5, padx=10, side='left')
def switch(self):
self.sort = not self.sort
# Головне вікно
class App(AppFather):
app_w = 300
app_h = 70
# Ініціалізація класу
def __init__(self):
100
482.ЧДТУ. 221539.01 12 01 9
tk.Tk.__init__(self)
self.filename = ''
# Назва застосунку
self.title('Кластеризація даних')
# Іконка вікна
self.iconbitmap(r'C:\Clusters\img/clustering.ico')
# Змінна для збереження шляху до файлу з даними
self.file_path = ''
# Змінна, що позначає необхідність сортування рядків при збереженні
self.sort = False
# Геометрія вікна
self.geometry(f'{self.app_w}x{self.app_h}' +
self.get_window_position(self.app_w, self.app_h, -70))
# Створення фреймів для групування елементів
self.frame_manage = ttk.Frame(self)
self.frame_exit = ttk.Frame(self)
self.frame_status = ttk.Frame(self)
# Виклик метода формування інтерфейсу вікна
self.set_ui()
# Метод, що налаштовує елементи вікна застосунку
def set_ui(self):
# Фрейм для верхнього ряду елемнтів
self.frame_manage.pack(fill=tk.X)
# Фрейм для кнопки "Вихід"
self.frame_exit.pack(fill=tk.X)
# Фрейм для рядка стану
self.frame_status.pack(fill=tk.X)
# Кнопка для відкриття файлу
open_file_button = ttk.Button(self.frame_manage, text='Відкрити файл',
command=self.open_file)
101
482.ЧДТУ. 221539.01 12 01 10
open_file_button.pack(side=tk.LEFT)
# Список методів для вибору
combo_list = ['Оберіть метод', 'kmeans', 'birch', 'dbscan', 'means shift',
'affinity propagation', 'spectral clustering']
# Випадаючий список
self.combobox = ttk.Combobox(self.frame_manage, values=combo_list,
state='readonly')
self.combobox.current(0)
self.combobox.pack(side=tk.LEFT)
# Кнопка запуску обробки
run_button = ttk.Button(self.frame_manage, text='Запуск',
command=self.process)
run_button.pack(side=tk.LEFT)
# Кнопка виходу з програми
exit_button = ttk.Button(self.frame_exit, text='Вийти', command=self.exit_app)
exit_button.pack(fill=tk.X)
self.configer_status_frame('Програма працює')
# Метод, що обновлює рядок стану
def update_status(self, message):
self.status_label.destroy()
self.configer_status_frame(message)
# Рядок стану
def configer_status_frame(self, message):
self.status_label = ttk.Label(self.frame_status, text=message)
self.status_label.pack(fill=tk.X)
# Метод, що викликає вікно вибору файлу
def open_file(self):
self.file_path = fd.askopenfilename(title='Оберіть файл',
filetypes=(('Всі типи файлів', '*.*'),
102
482.ЧДТУ. 221539.01 12 01 11
('Файли xlsx', '*.xlsx')))
if not self.check_data():
mb.showerror('Помилка!', 'Ви не обрали файл або вибрали файл невірного
формату!')
else:
data_range = self.get_range()
if data_range:
self.data = preprocess_data(self.df, data_range[0], data_range[1])
self.update_status('Дані успішно завантажено')
else:
mb.showwarning('Попередження!', 'Ви не обрали діапазон даних!')
def get_range(self):
ask_window = AskRange(self.df)
data_range = ask_window.return_value()
try:
first_col = string.ascii_uppercase.index(data_range[0])
last_col = string.ascii_uppercase.index(data_range[1])
return first_col, last_col
except TypeError:
return False
def get_clusters(self):
ask_window = AskClusters()
return ask_window.return_value()
# Метод, що перевіряє коректність даних
def check_data(self):
try:
self.df = get_data_from_file(self.file_path)
return True
except:
103
482.ЧДТУ. 221539.01 12 01 12
return False
# Метод, що обробляє дані з файлу, що заванатажив користувач
def process(self):
n_clusters = 1
self.method_name = self.combobox.get()
if self.method_name != 'Оберіть метод':
methods_need_clusters = ['kmeans', 'birch', 'spectral clustering']
if self.method_name in methods_need_clusters:
n_clusters = self.get_clusters()
if n_clusters:
self.result = process_data(self.method_name, self.data, n_clusters)
mb.showinfo('Інформація', 'Обробка даних завершена')
self.show_result()
else:
mb.showwarning('Попередження!', 'Ви не обрали кількість кластерів!')
else:
mb.showwarning('Попередження!', 'Ви не обрали метод!')
def show_result(self):
self.df['Номер кластеру'] = self.result
self.df['Номер кластеру'].astype(int)
df = self.df.sort_values(by='Номер кластеру')
result_window = Result(df)
self.sort = result_window.return_value()
if self.sort is not None:
self.save_result()
else:
mb.showwarning('Попередження!', 'Ви не зберегли результати!')
def save_result(self):
df = self.df
if self.sort:
104
482.ЧДТУ. 221539.01 12 01 13
df = self.df.sort_values(by='Номер кластеру')
initialdir = ''.join(self.file_path.split('/')[:-1])
filename = '_'.join(self.method_name.split())
save_path = fd.asksaveasfilename(defaultextension='xlsx',
confirmoverwrite=True,
initialdir=initialdir, initialfile=filename,
filetypes=(('Файли xlsx', '*.xlsx'), ))
if save_path != '':
save_xlsx(df, save_path, self.combobox.get())
mb.showinfo('Файл збережено', f'Шлях до збереженого файлу:\n
{save_path}')
self.update_status('Дані успішно збережено')
else:
mb.showwarning('Попердження!', 'Ви не обрали шлях для збереження
файлу')
# Метод, що закриває вікно застосунку за припиняє процесс
def exit_app(self):
self.destroy()
sys.exit()
Файл metods.py
method_dict = \
{'means shift': '''MEANS SHIFT
Алгоритм середнього зсуву
Алгоритм середнього зсуву підпадає під непідконтрольне навчання, яке
класифікується як алгоритм кластеризації. Ідеологія алгоритму середнього
зсуву
полягає в тому, що він
ітеративно присвоює точки даних кластерам шляхом зміщення в бік точки,
що має точку найбільшої щільності (Режим). Середня логіка зрушення,
що лежить в основі,
105
482.ЧДТУ. 221539.01 12 01 14
заснована на концепції оцінки щільності ядра, що називається KDE.Техніка
навчання без нагляду, виявлена Фукунага та Хостеллером для пошуку
кластерів:
Середній зсув також відомий як алгоритм пошуку режимів, який призначає
точки даних кластерам таким чином, зміщуючи точки даних у напрямку
високої щільності.
Найвища щільність точок даних називається моделлю в регіоні. Алгоритм
Mean Shift має додатки, широко використовувані в області комп’ютерного зору
та
сегментації зображень.
KDE - це метод оцінки розподілу точок даних. Він працює, розміщуючи ядро
на кожній точці даних. Ядро в математичному терміні - це система зважування,
яка застосовуватиме
ваги для окремих точок даних. Додавання всіх окремих ядер створює
ймовірність.
Функція ядра повинна відповідати наступним умовам:
Перша вимога - забезпечити нормалізацію оцінки щільності ядра.
Друга вимога - KDE добре асоціюється з симетрією простору.
Нижче наведені дві популярні функції ядра:
- Плоске ядро
- Гауссове ядро
На основі використаної парами Кернела функція густини в результаті
змінюється. Якщо параметр ядра не згадується,
за замовчуванням викликається ядро Гаусса.
KDE використовує концепцію функції щільності ймовірності, яка допомагає
знайти локальні максимуми розподілу даних. Алгоритм працює, створюючи
точки даних для
залучення один одного, дозволяючи точкам даних у напрямку високої
щільності.
106
482.ЧДТУ. 221539.01 12 01 15
Точки даних, які намагаються сходитись до локальних максимумів, будуть
тієї ж групи кластерів. На відміну від алгоритму кластеризації K-Means,
вихід алгоритму
середнього зсуву не залежить від припущень щодо форми точки даних та
кількості кластерів. Кількість кластерів визначатиметься алгоритмом щодо
даних.
Для того, щоб виконати реалізацію алгоритму середнього зсуву, ми
використовуємо пакет python SKlearn.
Переваги та застосування Алгоритм середнього зсуву
Нижче наведено переваги та застосування середнього алгоритму:
- Він широко використовується для вирішення комп’ютерного зору,
де він використовується для сегментації зображень.
- Кластеризація точок даних у режимі реального часу без згадування
кількості
кластерів.
- Відмінна в сегментації зображень та відстеженні відео.
- Більш надійний для людей, що переживають.
Плюси алгоритму середнього зсуву
Нижче наведено алгоритм зсуву плюсів:
- Вихід алгоритму не залежить від ініціалізації.
- Процедура ефективна, оскільки має лише один параметр - пропускну
здатність.
- Ніяких припущень щодо кількості кластерів даних та форми.
- Він має кращі показники, ніж K-Means Clustering.
Мінуси алгоритму середнього зсуву
Нижче наведені мінуси алгоритму середнього зсуву:
- Дорогий для великих функцій.
- У порівнянні з кластеризацією K-Means це дуже повільно.
- Вихід алгоритму залежить від пропускної здатності параметра.
- Вихід залежить від розміру вікна.
107
482.ЧДТУ. 221539.01 12 01 16
Висновок
Хоча це прямолінійний підхід, який в основному використовується для
вирішення
проблем, пов'язаних із сегментацією зображень, кластеризацією. Він
порівняно
повільніше, ніж K-Means, і обчислювально дорогий.''',
'kmeans': '''K-MEANS
Метод К-середніх
Метод К-середніх – найбільш відомий алгоритм кластеризації. Цей алгоритм
будує задане число кластерів, розташованих якнайдалі один від одного. Робота
алгоритму ділиться
на кілька етапів:
1. Спершу випадковим чином задаємо масив з К центральних точок. Щоб
оцінити значення К, яке необхідно використовувати, достатньо переглянути
дані та спробувати визначити
кількість окремих
угрупувань.
2. Для кожної точки даних обчислюємо відстань між цією точкою та кожною
з центральних точок, а потім відносимо точку до групи з найближчим до неї
центром.
3. Виходячи з класифікованих точок, ми перераховуємо центр групи,беручи
середнє значення всіх векторів групи.
4. Повторюємо кроки 2-3 задану кількість разів або до тих пір, поки зміна
центрів груп на кроці 3 не буде менше наперед заданого значення.
Перевага методу К-середніх – те, що він досить швидкий. Він має лінійну
складність O(n). З іншого боку, у методу К-середніх має кілька недоліків. По-
перше, ми маємо наперед
задавати кількість кластерів для розбиття.
108
482.ЧДТУ. 221539.01 12 01 17
Це не завжди очевидно. По-друге, результат роботи алгоритму залежить від
того, яким чином ми визначимо початкові центри кластерів. Тому виконуючи
алгоритм кілька разів поспіль ми
можемо отримати різні результуючі кластери.
Інші методи кластеризації більш однозначні.''',
'dbscan':
'''DBSCAN
DBSCAN - алгоритм кластеризації на основі щільності, подібний до методу
зсуву середнього значення, але має декілька помітних переваг.
1. DBSCAN починається з довільної початкової точки даних, яка ще не була
відвідана. Усі точки, що знаходяться на відстані ε, розглядаються як точки-
сусіди нашої вершини.
2. Якщо в цьому околі є достатня кількість точок (більша деякого наперед
заданого значення), тоді починається процес кластеризації, а поточна точка
даних стає першою точкою в новому
кластері.
В іншому випадку точка буде позначена як шум (пізніше ця точка ще може
стати частиною деякого кластера). Але в обох випадках ця точка позначається
як "відвідана".
3. Для першої точки в новому кластері усі її точки-сусіди в межах ε-околу
також стають частиною цього кластера. Ця процедура виконується для всіх
точок в околі ε та відносить їх до
одного
кластеру, після чого аналогічний процес відбувається для всіх нових точок,
які були щойно додані до кластеру.
4. Кроки 2 і 3 повторюються циклічно до тих пір, поки всі точки кластеру не
будуть знайдені, тобто всі точки в околицях кластера ε вже були відвідані та
позначені.
109
482.ЧДТУ. 221539.01 12 01 18
5. Після того, як ми закінчимо з поточним кластером, можемо переходити до
нової невідвіданої точки, що призведе до знаходження нового кластеру чи
шуму. Цей процес повторюється, поки
всі точки
не будуть позначені як відвідувані. Оскільки в кінці виконання алгоритму всі
точки будуть відвідані, то кожна точка буде позначена як належна певному
кластеру, або як шум.
DBSCAN має великі переваги перед іншими алгоритмами кластеризації.
По-перше, він взагалі не потребує задавати на перед результуючу кількість
кластерів. Вона визначається автоматично в ході роботи алгоритму. Даний
метод також дозволяє ідентифікувати
викиди як шуми, на відміну від методу
зсуву середнього значення, який просто додає їх у кластер, навіть якщо така
точка значно відрізняється від інших у кластері. Крім того, він дозволяє
визначати кластери довільного
розміру та довільної форми.
Основним недоліком DBSCAN є те, що він дає гірші результати, ніж інші
методи, коли ми маємо кластери різної щільності. Це відбувається тому, що
встановлення порогу відстані ε та
minPoints для ідентифікації точок
сусідства має бути різною, для кластерів різної щільності. Цей недолік також
виникає при дуже об'ємних даних, оскільки важко наперед задати оцінку
параметру відстані ε.''',
'birch': '''BIRCH
Збалансоване ітеративне скорочення та кластеризація за допомогою ієрархій
(BIRCH, англ. balanced iterative reducing and clustering using hierarchies) – це
алгоритм інтелектуального
аналізу даних без вчителя, що використовується
110
482.ЧДТУ. 221539.01 12 01 19
для здійснення ієрархічної кластеризації на наборах великого розміру даних.
Перевагою BIRCH є можливість методу динамічно кластеризувати в міру
надходження багатовимірних метричних
точок даних у спробі отримати кластеризацію кращої
якості для наявного набору ресурсів (пам'яті та тимчасових рамок). У
більшості випадків алгоритм BIRCH вимагає одного проходу бази даних.
Розробники BIRCH стверджували, що це був
«першим алгоритмом кластеризації, що пропонує
в базах даних ефективно обробляти 'шум' (точки даних, які не є частиною
схеми)», що побив DBSCAN за два місяці. Алгоритм отримав у 2006 році приз
SIGMOD після 10 років тестування.
Переваги BIRCH:
- Кожне рішення кластеризації локальне і здійснюється без перегляду всіх
точок даних
та існуючих на даний момент кластерів.
- Метод працює на спостереженнях, простір даних яких зазвичай не
однорідно заповнено
і кожна точка даних однаково важлива.
- Метод дозволяє використовувати всю доступну пам'ять для отримання
найбільш точних
можливих підкластерів за мінімізації ціни введення/виводу.
- Метод є інкрементальним і вимагає наявності повного набору даних
відразу.''',
'spectral clustering': '''SPECTRAL CLUSTERING
Спектральна кластеризація
Спектральна кластеризація (SC) - це метод кластеризації, заснований на
теорії графів - зважений неорієнтований граф поділяється на два або більш
оптимальні підграфи, так що внутрішня
частина підграфа є максимально схожою. Відстань між
111
482.ЧДТУ. 221539.01 12 01 20
картами має бути максимально можливою для досягнення загальної мети
кластеризації.Оптимальний серед них відноситься до іншої оптимальної
цільової функції, яка може бути мінімальним
зрізом ріжучої кромки.
Техніки спектральної кластеризації використовують спектр (власні
значення) матриці подібності даних для зниження розмірності перед
кластеризацією в просторах меншихрозмірностей.
Матриця подібності подається як вхід і складається з
кількісних оцінок відносної схожості кожної пари точок даних.У додатку
сегментації зображень спектральна кластеризація відома як кластеризація
об'єктів на основі сегментації.''',
'affinity propagation': '''AFFINITY PROPAGATION
Поширення спорідненості
У статистиці та аналізі даних поширення спорідненості (AP) — це алгоритм
кластеризації,заснований на концепції «передачі повідомлення» між точками
даних.На відміну від алгоритмів
кластеризації, таких як k -середніх або k -медоїдів,
поширення спорідненості не вимагає визначення чи оцінки кількості
кластерів перед запуском алгоритму. Подібно до k -медоїдів, поширення
спорідненості знаходить «приклади»,
члени вхідного набору, які є репрезентативними для кластерів.'''}
Файл output.py
from methods import method_dict
import pandas as pd
import random
def save_xlsx(df, path, method_name):
def create_cluster_formats():
nonlocal writer, result
cluster_format_list = []
clusters_count = len(set(result))
112
482.ЧДТУ. 221539.01 12 01 21
for j in range(clusters_count):
color = generate_color()
cluster_format = writer.book.add_format()
cluster_format.set_bg_color(color)
cluster_format_list.append(cluster_format)
return cluster_format_list
def save_method_description():
nonlocal method_name, writer
worksheet2 = writer.book.add_worksheet('Опис методу')
description_format = writer.book.add_format()
description_format.set_align('vtop')
worksheet2.write(0, 0, method_dict[method_name])
worksheet2.set_column(0, 0, 180)
result = df['Номер кластеру'].tolist()
with pd.ExcelWriter(path, engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='Кластеризація', index=False)
worksheet1 = writer.sheets['Кластеризація']
cluster_formats = create_cluster_formats()
worksheet1.write_row(0, 0, df.columns)
for i in range(len(df)):
style = cluster_formats[result[i]]
worksheet1.set_row(i + 1, 15, style)
save_method_description()
def generate_color():
color = '#'
for i in range(3):
color += str(hex(random.randint(50, 255)))[2:]
return color
Файл process.py
# Імпорт бібліотек
113
482.ЧДТУ. 221539.01 12 01 22
import pandas as pd
import warnings
from sklearn.cluster import KMeans, AffinityPropagation, DBSCAN, Birch
from sklearn.cluster import MeanShift, SpectralClustering
# Функція читання файлу
def get_data_from_file(path):
df = pd.read_excel(path, sheet_name=0)
return df
# Функція підготовки даних для моделей кластеризації
def preprocess_data(df, first_col, last_col):
data = df.iloc[:, first_col:last_col].values
return data
# Функція застосування алгоритму kmeans
def process_kmeans(data, n_clusters):
model = KMeans(n_clusters=n_clusters, random_state=1)
model.fit(data)
predictions = model.predict(data)
return predictions
# Функція застосування алгоритму means shift
def process_means_shift(data, n_clusters=None):
model = MeanShift(bandwidth=100)
prediction = model.fit_predict(data)
return prediction
# Функція застосування алгоритму birch
def process_birch(data, n_clusters):
brc = Birch(n_clusters=n_clusters)
return brc.fit_predict(data)
# Функція застосування алгоритму affinity propagation
def process_affinity_propagation(data, n_clusters=None):
with warnings.catch_warnings():
114
482.ЧДТУ. 221539.01 12 01 23
warnings.simplefilter("ignore")
model = AffinityPropagation(random_state=1)
model.fit(data)
return model.labels_
# Функція застосування алгоритму spectral clustering
def process_spectral_clustering(data, n_clusters):
clustering = SpectralClustering(n_clusters=n_clusters, assign_labels='discretize',
random_state=0, affinity='nearest_neighbors')
clustering.fit(data)
return clustering.labels_
# Функція застосування алгоритму DBSCAN
def process_dbscan(data, n_clusters=None):
dbscan = DBSCAN(eps=0.3, min_samples=2)
dbscan.fit(data)
return dbscan.labels_
# Функція застосування обраного алгоритму кластеризації
def process_data(method_name, data, n_clusters):
# Словybr алгоритмів и функцій
algorythms = {'kmeans': process_kmeans,
'affinity propagation': process_affinity_propagation,
'means shift': process_means_shift,
'dbscan': process_dbscan,
'birch': process_birch,
'spectral clustering': process_spectral_clustering}
clustering_method = algorythms[method_name]
result = clustering_method(data, n_clusters)
return result
115
Додаток В
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ СИСТЕМИ
Інструкція користувача
482.ЧДТУ. 221539.01 34 01
Листів 8
Розробник: ________________________ Колісник І. В.
Керівник: ________________________ Голуб С. В.
Черкаси, 2022
482.ЧДТУ. 221539.01 34 01 2
ЗАГАЛЬНІ ПОЛОЖЕННЯ
Програмне забезпечення буде слугувати для проведення досліджень у сфері
машинного навчання. Програма буде виконувати кластеризацію результатів
спостереження. Вона приймає вхідний файл у форматі xlsx, тобто excel. Для
завантаження файлу потрібно у вікні програми натиснути кнопку «Відкрити файл»,
після чого можна з провідника вибрати файл для завантаження. Після вибору файлу
відкриється вікно, де можна побачити вхідний файл у вікні програми і після чого
потрібно обрати перший та останній стовпець для проведення аналізу та натиснути
кнопку «Відправити». Далі користувач повинен обрати метод кластеризації, всього їх
6 реалізовано(Means shift, K-means, DBSCAN, BIRCH , Spectral clustering, Affinity
propagation). Натискаємо кнопку «Запуск» і якщо користувач обере такі методи
кластеризації як: K-means, BIRCH та Spectral clustering, то ще потрібно додатково
обрати кількість кластерів, для цього відкриється додаткове вікно із запитом про
вибір, обираємо і натискаємо кнопку «Відправити», якщо користувач обере інші 3
методи, то відразу ми побачимо повідомлення, що «Обробка даних завершена». І
після того запускається процес кластеризації. Спочатку результат можна буде
побачити у вікні програми, у сортованому вигляді, якщо користувач захоче зберегти
у сортованому по кластерах вигляді, то потрібно натиснути кнопку «Зберегти» і
перейти до процесу збереження, але якщо користувач захоче отримати результат у
вигляді вхідного файлу без сортування, то потрібно поставити позначку навпроти
«Зберегти без сортування» і тоді переходимо до процесу зберігання. При зберіганні
відкриється провідник, де користувач може вибрати довільний шлях збереження і
надати назву файлу, яку захоче, за замовчуванням назва файлу буде назвою методу,
який був використаний. Вихідним файлом буде файл у тому ж форматі excel, але
строчки масиву будуть поділені на кластери, у кожного кластера свій номер(0,1,2…),
а також окремий колір, на іншому листі можна буде побачити опис методу
кластеризації, яким проводилась робота.
Нижче ми можемо спостерігати інтерфейс головного вікна (рисунок B.1).
117
482.ЧДТУ. 221539.01 34 01 3
Рисунок B.1 – Головне вікно програми
Нижче ми можемо спостерігати вікно із запитом для вибору першого та
останнього стовпця для аналізу даних (рисунок B.2).
Рисунок B.2 – Вікно із запитом на вибір першого та останнього стовпця
Нижче ми можемо спостерігати вікно із результатами кластеризації. За
замовчуванням у вікно буде відображатись сортований масив даних (рисунок B.3).
118
482.ЧДТУ. 221539.01 34 01 4
Рисунок B.3 – Вікно із результатами кластеризації
У програмі існують попереджувальні повідомлення, які реалізуються за
допомогою бібліотеки Warnings.
Попереджувальні повідомлення зазвичай видаються в ситуаціях, коли корисно
попередити користувача про будь-яку умову в програмі, коли умова (зазвичай) не
вимагає створення виключення та завершення програми.
Саме в таких випадках і використовуються ці повідомлення у програмі.
Нижче ми можемо спостерігати повідомлення, коли користувач не вибрав файл,
або вибрав файл невірного формату (рисунок B.4).
Рисунок B.4 – Повідомлення з помилкою
119
482.ЧДТУ. 221539.01 34 01 5
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав перший
стовпець для аналізу даних (рисунок B.5).
Рисунок B.5 – Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
останній стовпець для аналізу даних (рисунок B.6).
Рисунок B.6 – Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
останній стовпець для аналізу даних (рисунок B.7).
120
482.ЧДТУ. 221539.01 34 01 6
Рисунок B.7 – Повідомлення з попередженням
Нижче ми можемо спостерігати повідомлення, коли користувач не обрав
кількість кластерів для методу кластеризації (рисунок B.8).
Рисунок B.8 – Повідомлення з попередженням
Після успішного вибору вхідного файлу, діапазону для кластеризації та методу
кластеризації ми можемо спостерігати повідомлення, що «»Обробка даних завершена
(рисунок B.9).
Рисунок B.9 – Інформативне повідомлення
121
482.ЧДТУ. 221539.01 34 01 7
Якщо користувач не збереже результат кластеризації, то ми будемо
спостерігати таке повідомлення (рисунок B.10).
Рисунок B.10 – Повідомлення з попередженням
Якщо користувач не обере шлях для збереження, то ми будемо спостерігати
таке повідомлення (рисB.11).
Рисунок B.11 – Повідомлення з попередженням
Після того як користувач вкаже шлях для збереження і назву(за замовчуванням
назва методу яким відбувалась кластеризації) можна буде спостерігати таке
повідомлення (рисунок B.12).
122
482.ЧДТУ. 221539.01 34 01 8
Рисунок B.12 – Повідомлення про збереження вихідного файлу
У програмі також реалізовано рядок стану, який показує службові
повідомлення.
Після запуску програми рядок стану буде показувати таке повідомлення
«Програма працює» (рисунок B.13).
Рисунок B.13 – Повідомлення в рядку стану «Програма працює»
Після завантаження вхідного файлу та вибору діапазону для аналізу рядок
стану матиме таке повідомлення «Дані успішно завантажено» (рисунок B.14).
Рисунок B.14 - Повідомлення в рядку стану «Дані успішно завантажено»
123
Додаток Г
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ СИСТЕМИ
Графічні матеріали
482.ЧДТУ. 221539.01 90 01
Листів 9
Розробник: ________________________ Колісник І. В.
Керівник: ________________________ Голуб С. В.
Черкаси, 2022
482.ЧДТУ. 221539.01 90 01 2
Рисунок Г.1 – Слайд «Кластеризація»
Рисунок Г.2 – Слайд «Мета програмного продукту»
125
482.ЧДТУ. 221539.01 90 01 3
Рисунок Г.3 – Слайд «Актуальність теми»
Рисунок Г.4 – Слайд «Сфера використання додатку»
126
482.ЧДТУ. 221539.01 90 01 4
Рисунок Г.5 – Слайд «Можливості програмного забезпечення»
Рисунок Г.6 – Слайд «Використані програмні рішення»
127
482.ЧДТУ. 221539.01 90 01 5
Рисунок Г.7 – Слайд «Головне вікно програми»
Рисунок Г.8 – Слайд «Вибір файлу із провідника»
128
482.ЧДТУ. 221539.01 90 01 6
Рисунок Г.9 – Слайд «Вибір стовпців для аналізу та перегляд завантаженого
файлу у вікні програми»
Рисунок Г.10 – Слайд «Вибір методу з випадаючого списку»
129
482.ЧДТУ. 221539.01 90 01 7
Рисунок Г.11 – Слайд «Вибір кількості кластерів для методів кластеризації»
Рисунок Г.12 – Слайд «Результат кластеризації у вікні програми»
130
482.ЧДТУ. 221539.01 90 01 8
Рисунок Г.13 – Слайд «Збереження файлу через провідник»
Рисунок Г.14 – Слайд «Результат збереженого файлу»
131
482.ЧДТУ. 221539.01 90 01 9
Рисунок Г.15 – Слайд «Назва та опис методу яким була виконана
кластеризація»
132
Додаток Д
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ МОНІТОРИНГОВОЇ ІНФОРМАЦІЙНОЇ СИСТЕМИ
Тези конференцій
482.ЧДТУ. 221539.01 12 01
Листів 4
Розробник: ________________________ Колісник І. В.
Керівник: ________________________ Голуб С. В.
Черкаси, 2022
482.ЧДТУ. 221539.01 12 01 2
Тези конференції «Дні студентської науки»
АНАЛІЗ ВИМОГ ДО ПРОГРАМИ ДЛЯ ГРУПУВАННЯ РЕЗУЛЬТАТІВ
СПОСТЕРЕЖЕНЬ
Колісник І.В. (Студент ФІТІС)
Голуб С.В. д.т.н., проф.
Черкаський державний технологічний університет, Черкаси, Україна
Актуальність роботи зумовлена потребою у дослідженні процесів аналізу вимог
до програми групування результатів спостереження за об’єктами навколишнього
середовища. Програма створюється за технологією об’єктно-орієнтованого
проектування. Аналіз вимог є початковим етапом цієї технології.
При аналізі вимог описувався перелік функції програмної системи, алгоритмічні
особливості її роботи, вивчався процес групування результатів спостережень.
Групування є інтелектуальною задачею програмної системи, яка описується у цій
роботі. Вивчались особливості процесу групування точок.
Серед задач групування прийнято виділяти класифікацію, кластеризацію і
розпізнавання образів [1]. Кластеризація передбачає поєднання кількох об’єктів у
групи за схожістю. Простіше кажучи, мета полягає в тому, щоб відокремити об’єкти
зі схожими ознаками та об’єднати їх у кластери. Кластеризація працює без будь-якого
знання того, які записи є подібними, але натомість обчислює схожість виключно на
основі даних. Таким чином, кластеризація є підходящим методом для створення груп
або сегментів без попередніх знань і отримання знань з них. Подібність даних
(наприклад, схожий вік, та сама стать) використовується для визначення максимально
однорідних груп (наприклад, молоді люди, чоловіки).
Встановлено [1], що не всі методи кластеризації однаково адекватно групують
об’єкти. Тому була сформульована вимога забезпечити використання кількох методів
кластеризації. Для визначення схожості об’єктів повинна бути надана користувачеві
можливість використати 6 методів кластеризації: K-means, DBSCAN, BIRCH, Spectral
clustering, Affinity propagation та Means shift. Для формалізації масиву вхідних даних
сформульована вимога, що вхідний файл має бути у форматі xlsx, тобто Excel.
134
482.ЧДТУ. 221539.01 12 01 3
Результати кластеризації повинні подаватись у формі згрупованих строчок
масиву вхідних даних, виділених кольором. Результати роботи програми повинні
зберігатись у формі журналу Excel із двома листами. Один лист міститиме результати
кластеризації. Другий лист буде містити опис методу, який використаний для
групування точок.
Таким чином у роботі описані особливості реалізації етапу аналізу вимог до
програмного забезпечення процесів групування результатів спостереження об’єктів
навколишнього середовища.
Тези конференції «Сучасні напрями розвитку інформаційно-
комунікаційних технологій та засобів управління»
ПРОГРАМНА РЕАЛІЗАЦІЯ КЛАСТЕРИЗАЦІЇ ТОЧОК
СПОСТЕРЕЖЕННЯ MIC
Голуб С.В., Колісник І.В.
Черкаський державний технологічний університет, Черкаси, Україна
Кластерний аналіз метод класифікації багатовимірних спостережень на основі
визначення подібності або близькості ( відстані ) між об'єктами . Мета кластерного
аналізу полягає у визначенні однорідних у певному сенсі груп, які називаються
кластерами, щоб ступінь зв'язку між двома об'єктами була високою, якщо вони
належать до однієї групи, та низькою, якщо вони належать до різних груп[1].
Кластерний аналіз відрізняється від багатьох інших статистичних методів тим,
що він в основному використовується, коли дослідники не мають передбачуваного
принципу або факту, який вони використовують як основи своїх досліджень.
Цей метод аналізу, як правило, виконується під час експериментальної фази
дослідження, тому що на відміну від таких методів, як факторний аналіз, він не
розрізняє залежні та незалежні змінні. Натомість кластерний аналіз застосовується в
основному для виявлення структур даних без пояснення чи інтерпретації.
Метою доповіді є створення програмного продукту, який буде здійснювати
кластеризацію даних спостереження. Для реалізації програми було створено віконний
інтерфейс, де розміщені такі елементи як: кнопка виклику провідника для вибору
файлу із результатами «Відкрити файл», випадаюче меню з вибором методу
135
482.ЧДТУ. 221539.01 12 01 4
кластеризації, кнопка «Запуск», кнопка «Вийти» та рядок стану, де виводяться
службові повідомлення: «Програма запущена», шлях до вибраного файлу з
провідника та «Очікування подальших команд».
Програмний продукт реалізує 6 методів кластеризації:
K-means;
Birch;
Dbscan;
Means shift;
Affinity propagation;
Spectral clustering.
Методи кластеризації реалізовано за допомогою мови програмування Python та
бібліотек «scikit-learn» і «pandas».
Список літератури
1. Кластерний аналіз. Визначення, цілі та алгоритм кластерного аналізу.
STUDME: https://studme.org/75019/statistika/klasternyy_analiz
1. Сергій Васильович Голуб, д.т.н., проф., 063-8960849,
2. Іван Валерійович Колісник, бакалавр каф. ПЗАС, 063-6272441,
[email protected]
136