From 56bb16b03bb15f39fbfdb277d419e25adf71d4f0 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 30 Jul 2025 14:38:24 +0000 Subject: [PATCH] Translated ['src/AI/AI-Unsupervised-Learning-Algorithms.md'] to uk --- src/AI/AI-Unsupervised-Learning-Algorithms.md | 135 +++++++++++++++--- 1 file changed, 114 insertions(+), 21 deletions(-) diff --git a/src/AI/AI-Unsupervised-Learning-Algorithms.md b/src/AI/AI-Unsupervised-Learning-Algorithms.md index 5b93bbb08..e476e1b7b 100644 --- a/src/AI/AI-Unsupervised-Learning-Algorithms.md +++ b/src/AI/AI-Unsupervised-Learning-Algorithms.md @@ -11,21 +11,21 @@ K-Середніх — це алгоритм кластеризації на основі центроїдів, який розділяє дані на K кластерів, призначаючи кожну точку найближчому середньому кластеру. Алгоритм працює наступним чином: 1. **Ініціалізація**: Виберіть K початкових центрів кластерів (центроїдів), часто випадковим чином або за допомогою більш розумних методів, таких як k-means++ 2. **Призначення**: Призначте кожну точку даних найближчому центроїду на основі метрики відстані (наприклад, евклідова відстань). -3. **Оновлення**: Перерахуньте центроїди, взявши середнє всіх точок даних, призначених кожному кластеру. +3. **Оновлення**: Перерахуньте центроїди, взявши середнє значення всіх точок даних, призначених кожному кластеру. 4. **Повторення**: Кроки 2–3 повторюються, поки призначення кластерів не стабілізуються (центроїди більше не рухаються суттєво). > [!TIP] -> *Випадки використання в кібербезпеці:* K-Середніх використовується для виявлення вторгнень шляхом кластеризації мережевих подій. Наприклад, дослідники застосували K-Середніх до набору даних про вторгнення KDD Cup 99 і виявили, що він ефективно розділяє трафік на нормальні та атакуючі кластери. На практиці аналітики безпеки можуть кластеризувати записи журналів або дані про поведінку користувачів, щоб знайти групи подібної активності; будь-які точки, які не належать до добре сформованого кластера, можуть вказувати на аномалії (наприклад, новий варіант шкідливого ПЗ, що формує свій власний малий кластер). K-Середніх також може допомогти в класифікації сімейства шкідливого ПЗ, групуючи бінарні файли на основі профілів поведінки або векторів ознак. +> *Випадки використання в кібербезпеці:* K-Середніх використовується для виявлення вторгнень шляхом кластеризації мережевих подій. Наприклад, дослідники застосували K-Середніх до набору даних про вторгнення KDD Cup 99 і виявили, що він ефективно розділяє трафік на нормальні та атакуючі кластери. На практиці аналітики безпеки можуть кластеризувати записи журналів або дані про поведінку користувачів, щоб знайти групи подібної активності; будь-які точки, які не належать до добре сформованого кластера, можуть вказувати на аномалії (наприклад, новий варіант шкідливого ПЗ, що формує свій власний малий кластер). K-Середніх також може допомогти в класифікації сімей шкідливого ПЗ, групуючи бінарні файли на основі профілів поведінки або векторів ознак. #### Вибір K Кількість кластерів (K) є гіперпараметром, який потрібно визначити перед запуском алгоритму. Техніки, такі як Метод Ліктя або Оцінка Силуету, можуть допомогти визначити відповідне значення для K, оцінюючи продуктивність кластеризації: -- **Метод Ліктя**: Нанесіть на графік суму квадратів відстаней від кожної точки до її призначеного центроїду кластера як функцію K. Шукайте "ліктьову" точку, де швидкість зменшення різко змінюється, що вказує на підходящу кількість кластерів. +- **Метод Ліктя**: Нанесіть на графік суму квадратів відстаней від кожної точки до її призначеного центроїду кластера як функцію K. Шукайте точку "ліктя", де швидкість зменшення різко змінюється, що вказує на підходящу кількість кластерів. - **Оцінка Силуету**: Обчисліть оцінку силуету для різних значень K. Вища оцінка силуету вказує на краще визначені кластери. #### Припущення та обмеження -K-Середніх припускає, що **кластери є сферичними та однакового розміру**, що може не відповідати всім наборам даних. Він чутливий до початкового розміщення центроїдів і може сходитися до локальних мінімумів. Крім того, K-Середніх не підходить для наборів даних з різною щільністю або не глобулярними формами та ознаками з різними масштабами. Кроки попередньої обробки, такі як нормалізація або стандартизація, можуть бути необхідні, щоб забезпечити рівний внесок усіх ознак у обчислення відстаней. +K-Середніх припускає, що **кластери є сферичними та однакового розміру**, що може не відповідати всім наборам даних. Він чутливий до початкового розміщення центроїдів і може сходитися до локальних мінімумів. Крім того, K-Середніх не підходить для наборів даних з різною щільністю або не глобулярними формами та ознаками з різними масштабами. Кроки попередньої обробки, такі як нормалізація або стандартизація, можуть бути необхідні для забезпечення того, щоб усі ознаки однаково впливали на обчислення відстані.
Приклад -- Кластеризація мережевих подій @@ -57,15 +57,16 @@ for idx, center in enumerate(kmeans.cluster_centers_): print(f" Cluster {idx}: {center}") ``` У цьому прикладі K-Means має знайти 4 кластери. Малий кластер атак (з незвично високою тривалістю ~200) ідеально сформує свій власний кластер, враховуючи його відстань від нормальних кластерів. Ми виводимо розміри кластерів і центри, щоб інтерпретувати результати. У реальному сценарії можна було б позначити кластер з кількома точками як потенційні аномалії або перевірити його учасників на наявність шкідливої активності. +
### Ієрархічна кластеризація Ієрархічна кластеризація будує ієрархію кластерів, використовуючи або підхід знизу-вгору (агломеративний), або зверху-вниз (дискретний): -1. **Агломеративний (Знизу-вгору)**: Починаємо з кожної точки даних як окремого кластера і ітеративно об'єднуємо найближчі кластери, поки не залишиться один кластер або не буде досягнуто критерію зупинки. -2. **Дискретний (Зверху-вниз)**: Починаємо з усіх точок даних в одному кластері і ітеративно розділяємо кластери, поки кожна точка даних не стане своїм власним кластером або не буде досягнуто критерію зупинки. +1. **Агломеративний (знизу-вгору)**: Починайте з кожної точки даних як окремого кластера і ітеративно об'єднуйте найближчі кластери, поки не залишиться один кластер або не буде досягнуто критерію зупинки. +2. **Дискретний (зверху-вниз)**: Починайте з усіх точок даних в одному кластері і ітеративно розділяйте кластери, поки кожна точка даних не стане своїм власним кластером або не буде досягнуто критерію зупинки. -Агломеративна кластеризація вимагає визначення відстані між кластерами та критерію зв'язку для вирішення, які кластери об'єднувати. Загальні методи зв'язку включають одиничний зв'язок (відстань найближчих точок між двома кластерами), повний зв'язок (відстань найвіддаленіших точок), середній зв'язок тощо, а метрика відстані часто є евклідичною. Вибір зв'язку впливає на форму отриманих кластерів. Немає необхідності заздалегідь визначати кількість кластерів K; ви можете "перерізати" дендрограму на обраному рівні, щоб отримати бажану кількість кластерів. +Агломеративна кластеризація вимагає визначення відстані між кластерами та критерію зв'язку для вирішення, які кластери об'єднувати. Загальні методи зв'язку включають одиночний зв'язок (відстань найближчих точок між двома кластерами), повний зв'язок (відстань найвіддаленіших точок), середній зв'язок тощо, а метрика відстані часто є евклідичною. Вибір зв'язку впливає на форму отриманих кластерів. Немає необхідності заздалегідь вказувати кількість кластерів K; ви можете "перерізати" дендрограму на обраному рівні, щоб отримати бажану кількість кластерів. Ієрархічна кластеризація виробляє дендрограму, деревоподібну структуру, яка показує відносини між кластерами на різних рівнях деталізації. Дендрограму можна перерізати на бажаному рівні, щоб отримати певну кількість кластерів. @@ -74,13 +75,13 @@ print(f" Cluster {idx}: {center}") #### Припущення та обмеження -Ієрархічна кластеризація не припускає певної форми кластера і може захоплювати вкладені кластери. Вона корисна для виявлення таксономії або відносин між групами (наприклад, групування шкідливого ПЗ за підгрупами сімей). Вона детермінована (немає проблем з випадковою ініціалізацією). Ключовою перевагою є дендрограма, яка надає уявлення про структуру кластеризації даних на всіх масштабах – аналітики безпеки можуть вирішити, де провести відповідний розподіл для виявлення значущих кластерів. Однак вона є обчислювально витратною (зазвичай $O(n^2)$ часу або гірше для наївних реалізацій) і не є доцільною для дуже великих наборів даних. Це також жадібна процедура – після об'єднання або розділення це не може бути скасовано, що може призвести до субоптимальних кластерів, якщо помилка сталася на ранньому етапі. Викиди також можуть впливати на деякі стратегії зв'язку (одиничний зв'язок може викликати ефект "ланцюгового" зв'язку, коли кластери з'єднуються через викиди). +Ієрархічна кластеризація не припускає певної форми кластера і може захоплювати вкладені кластери. Вона корисна для виявлення таксономії або відносин між групами (наприклад, групування шкідливого ПЗ за сімейними підгрупами). Вона детермінована (немає проблем з випадковою ініціалізацією). Ключовою перевагою є дендрограма, яка надає уявлення про структуру кластеризації даних на всіх масштабах – аналітики безпеки можуть вирішити, де провести відповідний розподіл для виявлення значущих кластерів. Однак вона є обчислювально витратною (зазвичай $O(n^2)$ часу або гірше для наївних реалізацій) і не є доцільною для дуже великих наборів даних. Це також жадібна процедура – після об'єднання або розділення це не може бути скасовано, що може призвести до субоптимальних кластерів, якщо помилка сталася на ранньому етапі. Викиди також можуть впливати на деякі стратегії зв'язку (одиночний зв'язок може викликати ефект "ланцюга", коли кластери з'єднуються через викиди).
Приклад -- Агломеративна кластеризація подій -Ми повторно використаємо синтетичні дані з прикладу K-Means (3 нормальні кластери + 1 кластер атак) і застосуємо агломеративну кластеризацію. Потім ми ілюструємо, як отримати дендрограму та мітки кластерів. +Ми повторно використаємо синтетичні дані з прикладу K-Means (3 нормальних кластери + 1 кластер атак) і застосуємо агломеративну кластеризацію. Потім ми ілюструємо, як отримати дендрограму та мітки кластерів. ```python from sklearn.cluster import AgglomerativeClustering from scipy.cluster.hierarchy import linkage, dendrogram @@ -113,14 +114,14 @@ DBSCAN ідентифікує основні точки, граничні точ - **Гранична точка**: Точка, яка знаходиться в межах відстані ε від основної точки, але має менше ніж MinPts сусідів. - **Точка шуму**: Точка, яка не є ні основною, ні граничною. -Кластеризація відбувається шляхом вибору невідвіданої основної точки, позначення її як нового кластеру, а потім рекурсивного додавання всіх точок, що досяжні за щільністю (основні точки та їх сусіди тощо). Граничні точки додаються до кластеру сусідньої основної точки. Після розширення всіх досяжних точок DBSCAN переходить до іншої невідвіданої основної точки, щоб почати новий кластер. Точки, які не були досягнуті жодною основною точкою, залишаються позначеними як шум. +Кластеризація відбувається шляхом вибору невідвіданої основної точки, позначення її як нового кластеру, а потім рекурсивного додавання всіх точок, які можна досягти за щільністю (основні точки та їх сусіди тощо). Граничні точки додаються до кластеру сусідньої основної точки. Після розширення всіх досяжних точок DBSCAN переходить до іншої невідвіданої основної точки, щоб почати новий кластер. Точки, які не були досягнуті жодною основною точкою, залишаються позначеними як шум. > [!TIP] -> *Випадки використання в кібербезпеці:* DBSCAN корисний для виявлення аномалій у мережевому трафіку. Наприклад, нормальна активність користувачів може формувати один або кілька щільних кластерів у просторі ознак, тоді як нові атаки можуть з'являтися як розсіяні точки, які DBSCAN позначить як шум (викиди). Його використовували для кластеризації записів мережевого потоку, де він може виявляти сканування портів або трафік відмови в обслуговуванні як рідкісні регіони точок. Інша програма - групування варіантів шкідливого ПЗ: якщо більшість зразків кластеризуються за родинами, але кілька не підходять ніде, ці кілька можуть бути нульовими днями шкідливого ПЗ. Здатність позначати шум означає, що команди безпеки можуть зосередитися на розслідуванні цих викидів. +> *Випадки використання в кібербезпеці:* DBSCAN корисний для виявлення аномалій у мережевому трафіку. Наприклад, нормальна активність користувачів може формувати один або кілька щільних кластерів у просторі ознак, тоді як нові атаки можуть з'являтися як розсіяні точки, які DBSCAN позначить як шум (викиди). Його використовували для кластеризації записів мережевого потоку, де він може виявляти сканування портів або трафік відмови в обслуговуванні як рідкісні регіони точок. Інша програма - групування варіантів шкідливого ПЗ: якщо більшість зразків кластеризуються за родинами, але кілька не підходять ніде, ці кілька можуть бути нульовими днями. Здатність позначати шум означає, що команди безпеки можуть зосередитися на розслідуванні цих викидів. #### Припущення та обмеження -**Припущення та сильні сторони:** DBSCAN не припускає сферичних кластерів - він може знаходити кластери довільної форми (навіть ланцюгоподібні або сусідні кластери). Він автоматично визначає кількість кластерів на основі щільності даних і може ефективно ідентифікувати викиди як шум. Це робить його потужним для реальних даних з нерегулярними формами та шумом. Він стійкий до викидів (на відміну від K-Means, який змушує їх потрапляти в кластери). Він добре працює, коли кластери мають приблизно рівномірну щільність. +**Припущення та переваги:** DBSCAN не припускає сферичні кластери - він може знаходити кластери довільної форми (навіть ланцюгоподібні або сусідні кластери). Він автоматично визначає кількість кластерів на основі щільності даних і може ефективно ідентифікувати викиди як шум. Це робить його потужним для реальних даних з нерегулярними формами та шумом. Він стійкий до викидів (на відміну від K-Means, який примушує їх до кластерів). Він добре працює, коли кластери мають приблизно рівномірну щільність. **Обмеження:** Продуктивність DBSCAN залежить від вибору відповідних значень ε та MinPts. Він може мати труднощі з даними, які мають різну щільність - одне ε не може вмістити як щільні, так і рідкісні кластери. Якщо ε занадто мале, він позначає більшість точок як шум; занадто велике, і кластери можуть неправильно зливатися. Крім того, DBSCAN може бути неефективним на дуже великих наборах даних (наївно $O(n^2)$, хоча просторове індексування може допомогти). У високорозмірних просторах ознак концепція "відстані в межах ε" може стати менш значущою (прокляття вимірності), і DBSCAN може вимагати ретельного налаштування параметрів або може не знайти інтуїтивні кластери. Незважаючи на це, розширення, такі як HDBSCAN, вирішують деякі проблеми (наприклад, різну щільність). @@ -154,7 +155,7 @@ print("Cluster labels for first 10 points:", labels[:10]) ### Аналіз головних компонент (PCA) -PCA - це техніка для **зменшення розмірності**, яка знаходить новий набір ортогональних осей (головні компоненти), які захоплюють максимальну дисперсію в даних. Простими словами, PCA обертає та проєктує дані на нову координатну систему так, що перша головна компонента (PC1) пояснює найбільшу можливу дисперсію, друга PC (PC2) пояснює найбільшу дисперсію, ортогональну до PC1, і так далі. Математично PCA обчислює власні вектори матриці коваріації даних – ці власні вектори є напрямками головних компонент, а відповідні власні значення вказують на кількість дисперсії, поясненої кожним. Це часто використовується для видобутку ознак, візуалізації та зменшення шуму. +PCA - це техніка для **зменшення розмірності**, яка знаходить новий набір ортогональних осей (головні компоненти), які захоплюють максимальну дисперсію в даних. Простими словами, PCA обертає та проєктує дані на нову координатну систему так, що перша головна компонента (PC1) пояснює найбільшу можливу дисперсію, друга PC (PC2) пояснює найбільшу дисперсію, ортогональну до PC1, і так далі. Математично PCA обчислює власні вектори матриці коваріації даних – ці власні вектори є напрямками головних компонент, а відповідні власні значення вказують на кількість дисперсії, поясненої кожною з них. Це часто використовується для видобутку ознак, візуалізації та зменшення шуму. Зверніть увагу, що це корисно, якщо розміри набору даних містять **значні лінійні залежності або кореляції**. @@ -186,17 +187,17 @@ PCA широко використовується для візуалізаці - Зверніть увагу, що коваріація між двома змінними (пікселями в даному випадку) вказує на те, наскільки вони змінюються разом, тому ідея полягає в тому, щоб з'ясувати, які пікселі, як правило, збільшуються або зменшуються разом з лінійною залежністю. - Наприклад, якщо піксель 1 і піксель 2, як правило, збільшуються разом, коваріація між ними буде позитивною. - Матриця коваріації буде матрицею 10,000x10,000, де кожен елемент представляє коваріацію між двома пікселями. -3. **Розв'язання рівняння власних значень**: Рівняння власних значень, яке потрібно розв'язати, є `C * v = λ * v`, де C - матриця коваріації, v - власний вектор, а λ - власне значення. Його можна розв'язати за допомогою методів, таких як: +3. **Розв'язання рівняння власних значень**: Рівняння власних значень, яке потрібно розв'язати, - це `C * v = λ * v`, де C - матриця коваріації, v - власний вектор, а λ - власне значення. Його можна розв'язати за допомогою методів, таких як: - **Декомпозиція власних значень**: Виконайте декомпозицію власних значень на матриці коваріації, щоб отримати власні значення та власні вектори. - **Сингулярна декомпозиція (SVD)**: Альтернативно, ви можете використовувати SVD для розкладання матриці даних на сингулярні значення та вектори, що також може дати головні компоненти. 4. **Вибір головних компонент**: Відсортуйте власні значення у спадному порядку та виберіть верхні K власних векторів, що відповідають найбільшим власним значенням. Ці власні вектори представляють напрямки максимальної дисперсії в даних. > [!TIP] -> *Випадки використання в кібербезпеці:* Загальне використання PCA в безпеці - це зменшення ознак для виявлення аномалій. Наприклад, система виявлення вторгнень з 40+ мережевими метриками (як-от ознаки NSL-KDD) може використовувати PCA для зменшення до кількох компонент, підсумовуючи дані для візуалізації або подачі в алгоритми кластеризації. Аналітики можуть відображати мережевий трафік у просторі перших двох головних компонент, щоб побачити, чи відокремлюються атаки від нормального трафіку. PCA також може допомогти усунути надлишкові ознаки (як-от байти, надіслані проти байтів, отриманих, якщо вони корельовані), щоб зробити алгоритми виявлення більш надійними та швидкими. +> *Випадки використання в кібербезпеці:* Загальне використання PCA в безпеці - це зменшення ознак для виявлення аномалій. Наприклад, система виявлення вторгнень з 40+ мережевими метриками (такими як ознаки NSL-KDD) може використовувати PCA для зменшення до кількох компонент, підсумовуючи дані для візуалізації або подачі в алгоритми кластеризації. Аналітики можуть відображати мережевий трафік у просторі перших двох головних компонент, щоб побачити, чи відокремлюються атаки від нормального трафіку. PCA також може допомогти усунути надлишкові ознаки (наприклад, байти, надіслані проти байтів, отриманих, якщо вони корельовані), щоб зробити алгоритми виявлення більш надійними та швидкими. #### Припущення та обмеження -PCA припускає, що **головні осі дисперсії є значущими** – це лінійний метод, тому він захоплює лінійні кореляції в даних. Це некероване навчання, оскільки воно використовує лише коваріацію ознак. Переваги PCA включають зменшення шуму (компоненти з малою дисперсією часто відповідають шуму) та декореляцію ознак. Це обчислювально ефективно для помірно високих розмірностей і часто є корисним етапом попередньої обробки для інших алгоритмів (щоб пом'якшити прокляття розмірності). Одне з обмежень полягає в тому, що PCA обмежена лінійними зв'язками – вона не захоплює складну нелінійну структуру (тоді як автоенкодери або t-SNE можуть). Крім того, компоненти PCA можуть бути важкими для інтерпретації з точки зору оригінальних ознак (вони є комбінаціями оригінальних ознак). У кібербезпеці потрібно бути обережним: атака, яка викликає лише незначну зміну в ознаці з низькою дисперсією, може не з'явитися в верхніх ПК (оскільки PCA пріоритизує дисперсію, а не обов'язково "цікавість"). +PCA припускає, що **головні осі дисперсії є значущими** – це лінійний метод, тому він захоплює лінійні кореляції в даних. Це некероване навчання, оскільки воно використовує лише коваріацію ознак. Переваги PCA включають зменшення шуму (компоненти з малою дисперсією часто відповідають шуму) та декореляцію ознак. Це обчислювально ефективно для помірно високих розмірностей і часто є корисним етапом попередньої обробки для інших алгоритмів (щоб пом'якшити прокляття розмірності). Одне з обмежень полягає в тому, що PCA обмежена лінійними зв'язками – вона не захоплює складну нелінійну структуру (тоді як автоенкодери або t-SNE можуть). Крім того, компоненти PCA можуть бути важкими для інтерпретації з точки зору оригінальних ознак (вони є комбінаціями оригінальних ознак). У кібербезпеці потрібно бути обережним: атака, яка викликає лише незначну зміну в ознаці з низькою дисперсією, може не з'явитися в верхніх ПК (оскільки PCA пріоритезує дисперсію, а не обов'язково "цікавість").
Приклад -- Зменшення розмірності мережевих даних @@ -253,11 +254,11 @@ r_{nk} = \frac{\pi_k \mathcal{N}(x_n | \mu_k, \Sigma_k)}{\sum_{j=1}^{K} \pi_j \m Результатом є набір Гауссових розподілів, які колективно моделюють загальний розподіл даних. Ми можемо використовувати підганяний GMM для кластеризації, призначаючи кожну точку Гауссу з найвищою ймовірністю, або зберігати ймовірності для невизначеності. Також можна оцінити ймовірність нових точок, щоб перевірити, чи підходять вони до моделі (корисно для виявлення аномалій). > [!TIP] -> *Випадки використання в кібербезпеці:* GMM можна використовувати для виявлення аномалій, моделюючи розподіл нормальних даних: будь-яка точка з дуже низькою ймовірністю під навченою сумішшю позначається як аномалія. Наприклад, ви могли б навчити GMM на легітимних ознаках мережевого трафіку; атакуюче з'єднання, яке не нагадує жоден з навчених кластерів, матиме низьку ймовірність. GMM також використовуються для кластеризації активностей, де кластери можуть мати різні форми – наприклад, групування користувачів за профілями поведінки, де ознаки кожного профілю можуть бути подібні до Гауссових, але з власною структурою дисперсії. Інший сценарій: у виявленні фішингу легітимні ознаки електронної пошти можуть формувати один Гауссовий кластер, відомий фішинг – інший, а нові кампанії фішингу можуть з'являтися як окремий Гаусс або як точки з низькою ймовірністю відносно існуючої суміші. +> *Випадки використання в кібербезпеці:* GMM можна використовувати для виявлення аномалій, моделюючи розподіл нормальних даних: будь-яка точка з дуже низькою ймовірністю під навченою сумішшю позначається як аномалія. Наприклад, ви могли б навчити GMM на легітимних ознаках мережевого трафіку; атакуюче з'єднання, яке не нагадує жоден з навчених кластерів, матиме низьку ймовірність. GMM також використовуються для кластеризації активностей, де кластери можуть мати різні форми – наприклад, групування користувачів за профілями поведінки, де ознаки кожного профілю можуть бути подібними до Гауссових, але з власною структурою дисперсії. Інший сценарій: у виявленні фішингу легітимні ознаки електронної пошти можуть формувати один Гауссовий кластер, відомий фішинг – інший, а нові кампанії фішингу можуть з'являтися як окремий Гаусс або як точки з низькою ймовірністю відносно існуючої суміші. #### Припущення та обмеження -GMM є узагальненням K-Means, яке включає коваріацію, тому кластери можуть бути еліпсоїдними (не лише сферичними). Воно обробляє кластери різних розмірів і форм, якщо коваріація повна. М'яка кластеризація є перевагою, коли межі кластерів є нечіткими – наприклад, у кібербезпеці подія може мати риси кількох типів атак; GMM може відобразити цю невизначеність з ймовірностями. GMM також надає ймовірнісну оцінку щільності даних, корисну для виявлення викидів (точок з низькою ймовірністю під усіма компонентами суміші). +GMM є узагальненням K-Means, яке враховує коваріацію, тому кластери можуть бути еліпсоїдними (не лише сферичними). Воно обробляє кластери різних розмірів і форм, якщо коваріація повна. М'яка кластеризація є перевагою, коли межі кластерів є нечіткими – наприклад, у кібербезпеці подія може мати риси кількох типів атак; GMM може відобразити цю невизначеність з ймовірностями. GMM також надає ймовірнісну оцінку щільності даних, корисну для виявлення викидів (точок з низькою ймовірністю під усіма компонентами суміші). З іншого боку, GMM вимагає вказати кількість компонентів K (хоча можна використовувати критерії, такі як BIC/AIC для вибору). EM іноді може повільно сходитися або до локального оптимуму, тому ініціалізація є важливою (часто EM запускається кілька разів). Якщо дані насправді не слідують змішуванню Гауссів, модель може бути поганою. Існує також ризик, що один Гаусс зменшиться, щоб покрити лише викид (хоча регуляризація або мінімальні межі коваріації можуть це пом'якшити). @@ -292,7 +293,7 @@ print("Log-likelihood of sample attack under GMM:", log_likelihood) Виявлення аномалій виконується шляхом спостереження за довжиною шляху кожної точки в цих випадкових деревах – кількість розділень, необхідних для ізоляції точки. Інтуїтивно, аномалії (викиди) зазвичай ізолюються швидше, оскільки випадкове розділення з більшою ймовірністю відокремить викид (який знаходиться в рідкісному регіоні), ніж нормальну точку в щільному кластері. Isolation Forest обчислює бал аномалії на основі середньої довжини шляху по всіх деревах: коротший середній шлях → більш аномальний. Бали зазвичай нормалізуються до [0,1], де 1 означає дуже ймовірну аномалію. > [!TIP] -> *Випадки використання в кібербезпеці:* Isolation Forests успішно використовувалися в системах виявлення вторгнень та виявлення шахрайства. Наприклад, навчіть Isolation Forest на журналах мережевого трафіку, які в основному містять нормальну поведінку; ліс створить короткі шляхи для дивного трафіку (як-от IP, що використовує невідомий порт або незвичний шаблон розміру пакета), позначаючи його для перевірки. Оскільки він не вимагає мічених атак, він підходить для виявлення невідомих типів атак. Його також можна використовувати на даних входу користувачів для виявлення захоплень облікових записів (аномальні часи або місця входу швидко ізолюються). У одному випадку використання Isolation Forest може захистити підприємство, моніторячи системні метрики та генеруючи сповіщення, коли комбінація метрик (ЦП, мережа, зміни файлів) виглядає дуже відмінно (короткі шляхи ізоляції) від історичних шаблонів. +> *Випадки використання в кібербезпеці:* Isolation Forests успішно використовувалися в системах виявлення вторгнень та виявлення шахрайства. Наприклад, навчіть Isolation Forest на журналах мережевого трафіку, які в основному містять нормальну поведінку; ліс створить короткі шляхи для дивного трафіку (як-от IP, який використовує невідомий порт або незвичний шаблон розміру пакета), позначаючи його для перевірки. Оскільки він не вимагає мічених атак, він підходить для виявлення невідомих типів атак. Його також можна використовувати на даних входу користувачів для виявлення захоплень облікових записів (аномальні часи або місця входу швидко ізолюються). У одному випадку використання Isolation Forest може захистити підприємство, моніторячи системні метрики та генеруючи сповіщення, коли комбінація метрик (ЦП, мережа, зміни файлів) виглядає дуже відмінно (короткі шляхи ізоляції) від історичних шаблонів. #### Припущення та обмеження @@ -343,7 +344,7 @@ print("Example anomaly scores (lower means more anomalous):", anomaly_scores[:5] t-SNE чудово підходить для візуального виявлення патернів. Він може виявити кластери, підкластери та аномалії, які інші лінійні методи (такі як PCA) можуть не виявити. Його використовували в дослідженнях кібербезпеки для візуалізації складних даних, таких як профілі поведінки шкідливого ПЗ або патерни мережевого трафіку. Оскільки він зберігає локальну структуру, він добре показує природні групування. -Однак t-SNE є обчислювально важчим (приблизно $O(n^2)$), тому може вимагати вибірки для дуже великих наборів даних. Він також має гіперпараметри (перплексія, швидкість навчання, ітерації), які можуть впливати на вихід – наприклад, різні значення перплексії можуть виявити кластери на різних масштабах. Графіки t-SNE іноді можуть бути неправильно інтерпретовані – відстані на карті не є безпосередньо значущими глобально (він зосереджується на локальному сусідстві, іноді кластери можуть з'являтися штучно добре відокремленими). Також t-SNE в основному призначений для візуалізації; він не забезпечує простий спосіб проекції нових точок даних без повторного обчислення, і його не слід використовувати як попередню обробку для прогнозного моделювання (UMAP є альтернативою, яка вирішує деякі з цих проблем з більшою швидкістю). +Однак t-SNE є обчислювально важчим (приблизно $O(n^2)$), тому може вимагати вибірки для дуже великих наборів даних. Він також має гіперпараметри (перплексія, швидкість навчання, ітерації), які можуть впливати на вихідні дані – наприклад, різні значення перплексії можуть виявити кластери на різних масштабах. Графіки t-SNE іноді можуть бути неправильно інтерпретовані – відстані на карті не є безпосередньо значущими глобально (він зосереджується на локальному сусідстві, іноді кластери можуть з'являтися штучно добре відокремленими). Крім того, t-SNE в основному призначений для візуалізації; він не забезпечує простий спосіб проекції нових точок даних без повторного обчислення, і не призначений для використання як попередня обробка для прогнозного моделювання (UMAP є альтернативою, яка вирішує деякі з цих проблем з більшою швидкістю).
Приклад -- Візуалізація мережевих з'єднань @@ -432,9 +433,101 @@ plt.legend() plt.tight_layout() plt.show() ``` -Тут ми об'єднали наш попередній 4D нормальний набір даних з кількома екстремальними викидами (викиди мають одну ознаку (“тривалість”), встановлену дуже високо тощо, щоб змоделювати дивний шаблон). Ми запускаємо t-SNE з типовою заплутаністю 30. Вихідні дані data_2d мають форму (1505, 2). Ми насправді не будемо малювати в цьому тексті, але якби ми це зробили, ми б очікували побачити, можливо, три щільні кластери, що відповідають 3 нормальним кластерам, а 5 викидів з'являються як ізольовані точки далеко від цих кластерів. У інтерактивному робочому процесі ми могли б пофарбувати точки за їхніми мітками (нормальні або який кластер, проти аномалії), щоб перевірити цю структуру. Навіть без міток аналітик може помітити ці 5 точок, що сидять у порожньому просторі на 2D графіку, і позначити їх. Це показує, як t-SNE може бути потужним допоміжним засобом для візуального виявлення аномалій та перевірки кластерів у даних кібербезпеки, доповнюючи автоматизовані алгоритми вище. +Тут ми об'єднали наш попередній 4D нормальний набір даних з кількома екстремальними викидами (викиди мають одну ознаку (“тривалість”), встановлену дуже високо тощо, щоб змоделювати дивний шаблон). Ми запускаємо t-SNE з типовою перплексією 30. Вихідні дані data_2d мають форму (1505, 2). Ми насправді не будемо малювати в цьому тексті, але якби ми це зробили, ми б очікували побачити, можливо, три щільні кластери, що відповідають 3 нормальним кластерам, а 5 викидів з'являються як ізольовані точки далеко від цих кластерів. У інтерактивному робочому процесі ми могли б пофарбувати точки за їхніми мітками (нормальні або який кластер, проти аномалії), щоб перевірити цю структуру. Навіть без міток аналітик може помітити ці 5 точок, що сидять у порожньому просторі на 2D графіку, і позначити їх. Це показує, як t-SNE може бути потужним допоміжним засобом для візуального виявлення аномалій та перевірки кластерів у даних кібербезпеки, доповнюючи автоматизовані алгоритми вище.
+### HDBSCAN (Ієрархічна щільнісно-орієнтована просторове кластеризація додатків з шумом) + +**HDBSCAN** є розширенням DBSCAN, яке усуває необхідність вибирати одне глобальне значення `eps` і здатне відновлювати кластери **різної щільності**, будуючи ієрархію щільно пов'язаних компонентів, а потім конденсуючи її. У порівнянні з ванільним DBSCAN, зазвичай + +* витягує більш інтуїтивні кластери, коли деякі кластери щільні, а інші рідкісні, +* має лише один реальний гіперпараметр (`min_cluster_size`) і розумне значення за замовчуванням, +* надає кожній точці ймовірність належності до кластера *ймовірність* та **оцінку викиду** (`outlier_scores_`), що є надзвичайно корисним для панелей моніторингу загроз. + +> [!TIP] +> *Випадки використання в кібербезпеці:* HDBSCAN дуже популярний у сучасних трубопроводах виявлення загроз – ви часто будете бачити його в нотатках на основі блокнотів, що постачаються з комерційними XDR наборами. Один практичний рецепт полягає в кластеризації трафіку HTTP beaconing під час IR: user-agent, інтервал і довжина URI часто формують кілька щільних груп легітимних програм оновлення, тоді як C2 бікони залишаються як маленькі кластери з низькою щільністю або як чистий шум. + +
+Приклад – Знаходження каналів C2 з біконінгом +```python +import pandas as pd +from hdbscan import HDBSCAN +from sklearn.preprocessing import StandardScaler + +# df has features extracted from proxy logs +features = [ +"avg_interval", # seconds between requests +"uri_length_mean", # average URI length +"user_agent_entropy" # Shannon entropy of UA string +] +X = StandardScaler().fit_transform(df[features]) + +hdb = HDBSCAN(min_cluster_size=15, # at least 15 similar beacons to be a group +metric="euclidean", +prediction_data=True) +labels = hdb.fit_predict(X) + +df["cluster"] = labels +# Anything with label == -1 is noise → inspect as potential C2 +suspects = df[df["cluster"] == -1] +print("Suspect beacon count:", len(suspects)) +``` +
+ +--- + +### Розгляд надійності та безпеки – Отруєння та Атакуючі дії (2023-2025) + +Недавні дослідження показали, що **неконтрольовані навчальні моделі *не* є імунними до активних атакуючих**: + +* **Отруєння даних проти детекторів аномалій.** Chen *et al.* (IEEE S&P 2024) продемонстрували, що додавання всього 3 % спеціально підготовленого трафіку може змістити межу прийняття рішень Isolation Forest та ECOD так, що реальні атаки виглядають нормально. Автори випустили відкритий PoC (`udo-poison`), який автоматично синтезує отруйні точки. +* **Встановлення бекдорів у моделі кластеризації.** Техніка *BadCME* (BlackHat EU 2023) імплантує маленький тригерний шаблон; коли цей тригер з'являється, детектор на основі K-Means тихо поміщає подію в "доброякісний" кластер. +* **Уникнення DBSCAN/HDBSCAN.** Академічний препринт 2025 року з KU Leuven показав, що атакуючий може створити шаблони маячків, які навмисно потрапляють у щілини щільності, ефективно ховаючись всередині *шумових* міток. + +Заходи, які набирають популярність: + +1. **Санітаризація моделі / TRIM.** Перед кожною епохою повторного навчання відкидайте 1–2 % точок з найвищими втратами (обрізане максимальне правдоподібність), щоб ускладнити отруєння. +2. **Консенсусне об'єднання.** Об'єднайте кілька гетерогенних детекторів (наприклад, Isolation Forest + GMM + ECOD) і підніміть тривогу, якщо *будь-яка* модель позначає точку. Дослідження показують, що це підвищує витрати атакуючого більше ніж у 10 разів. +3. **Захист на основі відстані для кластеризації.** Перераховуйте кластери з `k` різними випадковими насіннями та ігноруйте точки, які постійно стрибають між кластерами. + +--- + +### Сучасні інструменти з відкритим кодом (2024-2025) + +* **PyOD 2.x** (випущено у травні 2024 року) додав *ECOD*, *COPOD* та детектори з прискоренням на GPU *AutoFormer*. Тепер він постачається з підкомандою `benchmark`, яка дозволяє вам порівнювати 30+ алгоритмів на вашому наборі даних за **одним рядком коду**: +```bash +pyod benchmark --input logs.csv --label attack --n_jobs 8 +``` +* **Anomalib v1.5** (лютий 2025) зосереджується на зображеннях, але також містить загальну реалізацію **PatchCore** – зручну для виявлення фішингових сторінок на основі скріншотів. +* **scikit-learn 1.5** (листопад 2024) нарешті відкриває `score_samples` для *HDBSCAN* через новий обгортку `cluster.HDBSCAN`, тому вам не потрібен зовнішній пакет contrib, коли ви використовуєте Python 3.12. + +
+Швидкий приклад PyOD – ансамбль ECOD + Isolation Forest +```python +from pyod.models import ECOD, IForest +from pyod.utils.data import generate_data, evaluate_print +from pyod.utils.example import visualize + +X_train, y_train, X_test, y_test = generate_data( +n_train=5000, n_test=1000, n_features=16, +contamination=0.02, random_state=42) + +models = [ECOD(), IForest()] + +# majority vote – flag if any model thinks it is anomalous +anomaly_scores = sum(m.fit(X_train).decision_function(X_test) for m in models) / len(models) + +evaluate_print("Ensemble", y_test, anomaly_scores) +``` +
+ +## Посилання + +- [HDBSCAN – ієрархічне кластеризація на основі щільності](https://github.com/scikit-learn-contrib/hdbscan) +- Chen, X. *та ін.* “Про вразливість неконтрольованого виявлення аномалій до отруєння даних.” *Симпозіум IEEE з безпеки та конфіденційності*, 2024. + + + {{#include ../banners/hacktricks-training.md}}