logo

Аналіз основних компонентів (PCA)

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

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

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



У цій статті ми обговоримо один із найпопулярніших методів зменшення розмірності, тобто аналіз головних компонентів (PCA).

Що таке аналіз основних компонентів (PCA)?

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

  • Аналіз основних компонентів (PCA) це статистична процедура, яка використовує ортогональну трансформацію, яка перетворює набір корельованих змінних на набір некорельованих змінних. PCA є найпоширенішим інструментом для дослідницького аналізу даних і машинного навчання для прогнозних моделей. Крім того,
  • Аналіз основних компонентів (PCA) є навчання без контролю метод алгоритму, який використовується для дослідження взаємозв’язків між набором змінних. Він також відомий як загальний факторний аналіз, де регресія визначає лінію найкращого підходу.
  • Основна мета аналізу основних компонентів (PCA) полягає в тому, щоб зменшити розмірність набору даних, зберігаючи найважливіші шаблони або зв’язки між змінними без будь-яких попередніх знань про цільові змінні.

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

Аналіз головних компонентів

  1. Аналіз головних компонентів (PCA) — це техніка зменшення розмірності, яка визначає набір ортогональних осей, які називаються головними компонентами, які фіксують максимальну дисперсію в даних. Головні компоненти є лінійними комбінаціями вихідних змінних у наборі даних і впорядковані в порядку зменшення важливості. Загальна дисперсія, зафіксована всіма основними компонентами, дорівнює загальній дисперсії у вихідному наборі даних.
  2. Перший головний компонент фіксує найбільшу варіацію даних, але другий головний компонент фіксує максимум дисперсія тобто ортогональний до першого головного компонента і так далі.
  3. Аналіз основних компонентів можна використовувати для різних цілей, зокрема для візуалізації даних, вибору функцій і стиснення даних. У візуалізації даних PCA можна використовувати для побудови багатовимірних даних у двох або трьох вимірах, що полегшує їх інтерпретацію. Під час вибору ознак PCA можна використовувати для ідентифікації найважливіших змінних у наборі даних. Під час стиснення даних PCA можна використовувати для зменшення розміру набору даних без втрати важливої ​​інформації.
  4. В аналізі основних компонентів припускається, що інформація передається в дисперсії ознак, тобто чим вище варіація ознаки, тим більше інформації містить ця функція.

Загалом PCA є потужним інструментом для аналізу даних і може допомогти спростити складні набори даних, полегшивши їх розуміння та роботу з ними.

сортувати купу

Покрокове пояснення PCA (аналіз основних компонентів)

Крок 1: Стандартизація

По-перше, нам потрібно стандартизувати наш набір даних, щоб гарантувати, що кожна змінна має середнє значення 0 і стандартне відхилення 1.

Z = frac{X-mu}{sigma}

тут,

Крок 2: Обчислення коваріаційної матриці

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

cov(x1,x2) = frac{sum_{i=1}^{n}(x1_i-ar{x1})(x2_i-ar{x2})}{n-1}

Значення коваріації може бути позитивним, негативним або нульовим.

алгоритм будки
  • Позитивно: зі збільшенням x1 x2 також збільшується.
  • Негативний: зі збільшенням x1 x2 також зменшується.
  • Нулі: немає прямого відношення

Крок 3. Обчисліть власні значення та власні вектори коваріаційної матриці для ідентифікації основних компонентів

Нехай A — квадратна матриця nXn, а X — ненульовий вектор, для якого

AX = lambda X

для деяких скалярних значень лямбда. потім лямбдавідомий як власне значення матриці A і X відомий як власний вектор матриці A для відповідного власного значення.

Його також можна записати так:

egin{вирівняний} AX-lambda X &= 0  (A-lambda I)X &= 0 end{вирівняний}

де I є одиничною матрицею такої ж форми, як матриця A. І наведені вище умови будуть вірними, лише якщо (A - lambda I)буде необоротною (тобто сингулярною матрицею). Це означає,

|A - lambda I| = 0

З наведеного вище рівняння ми можемо знайти власні значення lambda, і тому відповідний власний вектор можна знайти за допомогою рівняння AX = lambda X.

Як працює аналіз основних компонентів (PCA)?

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

Python3

import> pandas as pd> import> numpy as np> # Here we are using inbuilt dataset of scikit learn> from> sklearn.datasets>import> load_breast_cancer> # instantiating> cancer>=> load_breast_cancer(as_frame>=>True>)> # creating dataframe> df>=> cancer.frame> # checking shape> print>(>'Original Dataframe shape :'>,df.shape)> # Input features> X>=> df[cancer[>'feature_names'>]]> print>(>'Inputs Dataframe shape :'>, X.shape)>
>
>

Вихід :

Original Dataframe shape : (569, 31) Inputs Dataframe shape : (569, 30)>

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

Python3

# Mean> X_mean>=> X.mean()> # Standard deviation> X_std>=> X.std()> # Standardization> Z>=> (X>-> X_mean)>/> X_std>
>
>

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

Python3

# covariance> c>=> Z.cov()> # Plot the covariance matrix> import> matplotlib.pyplot as plt> import> seaborn as sns> sns.heatmap(c)> plt.show()>
>
>

Вихід :

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

pvr повна форма

Python3

eigenvalues, eigenvectors>=> np.linalg.eig(c)> print>(>'Eigen values: '>, eigenvalues)> print>(>'Eigen values Shape:'>, eigenvalues.shape)> print>(>'Eigen Vector Shape:'>, eigenvectors.shape)>
>
>

Вихід :

Eigen values:  [1.32816077e+01 5.69135461e+00 2.81794898e+00 1.98064047e+00  1.64873055e+00 1.20735661e+00 6.75220114e-01 4.76617140e-01  4.16894812e-01 3.50693457e-01 2.93915696e-01 2.61161370e-01  2.41357496e-01 1.57009724e-01 9.41349650e-02 7.98628010e-02  5.93990378e-02 5.26187835e-02 4.94775918e-02 1.33044823e-04  7.48803097e-04 1.58933787e-03 6.90046388e-03 8.17763986e-03  1.54812714e-02 1.80550070e-02 2.43408378e-02 2.74394025e-02  3.11594025e-02 2.99728939e-02] Eigen values Shape: (30,) Eigen Vector Shape: (30, 30)>

Відсортуйте власні значення в порядку спадання та відповідно відсортуйте відповідні власні вектори.

Python3

# Index the eigenvalues in descending order> idx>=> eigenvalues.argsort()[::>->1>]> # Sort the eigenvalues in descending order> eigenvalues>=> eigenvalues[idx]> # sort the corresponding eigenvectors accordingly> eigenvectors>=> eigenvectors[:,idx]>
>
>

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

Python3

explained_var>=> np.cumsum(eigenvalues)>/> np.>sum>(eigenvalues)> explained_var>
>
>

Вихід :

array([0.44272026, 0.63243208, 0.72636371, 0.79238506, 0.84734274,  0.88758796, 0.9100953 , 0.92598254, 0.93987903, 0.95156881,  0.961366 , 0.97007138, 0.97811663, 0.98335029, 0.98648812,  0.98915022, 0.99113018, 0.99288414, 0.9945334 , 0.99557204,  0.99657114, 0.99748579, 0.99829715, 0.99889898, 0.99941502,  0.99968761, 0.99991763, 0.99997061, 0.99999557, 1. ])>

Визначте кількість головних компонентів

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

Python3

n_components>=> np.argmax(explained_var>>=> 0.50>)>+> 1> n_components>
>
>

Вихід :

2>

Спроектуйте дані на вибрані основні компоненти

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

Python3

# PCA component or unit matrix> u>=> eigenvectors[:,:n_components]> pca_component>=> pd.DataFrame(u,> >index>=> cancer[>'feature_names'>],> >columns>=> [>'PC1'>,>'PC2'>]> >)> # plotting heatmap> plt.figure(figsize>=>(>5>,>7>))> sns.heatmap(pca_component)> plt.title(>'PCA Component'>)> plt.show()>
>
>

Вихід :

  • Потім ми проектуємо наш набір даних за формулою:

egin{aligned} Proj_{P_i}(u) &= frac{P_icdot u}u  &=P_icdot u end{aligned}

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

Пошук проекції в PCA

Python3

# Matrix multiplication or dot Product> Z_pca>=> Z @ pca_component> # Rename the columns name> Z_pca.rename({>'PC1'>:>'PCA1'>,>'PC2'>:>'PCA2'>}, axis>=>1>, inplace>=>True>)> # Print the Pricipal Component values> print>(Z_pca)>
>
>

Вихід :

 PCA1 PCA2 0 9.184755 1.946870 1 2.385703 -3.764859 2 5.728855 -1.074229 3 7.116691 10.266556 4 3.931842 -1.946359 .. ... ... 564 6.433655 -3.573673 565 3.790048 -3.580897 566 1.255075 -1.900624 567 10.365673 1.670540 568 -5.470430 -0.670047 [569 rows x 2 columns]>

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

PCA з використанням Sklearn

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

Python3

# Importing PCA> from> sklearn.decomposition>import> PCA> # Let's say, components = 2> pca>=> PCA(n_components>=>2>)> pca.fit(Z)> x_pca>=> pca.transform(Z)> # Create the dataframe> df_pca1>=> pd.DataFrame(x_pca,> >columns>=>[>'PC{}'>.> >format>(i>+>1>)> >for> i>in> range>(n_components)])> print>(df_pca1)>
>
>

Вихід:

 PC1 PC2 0 9.184755 1.946870 1 2.385703 -3.764859 2 5.728855 -1.074229 3 7.116691 10.266556 4 3.931842 -1.946359 .. ... ... 564 6.433655 -3.573673 565 3.790048 -3.580897 566 1.255075 -1.900624 567 10.365673 1.670540 568 -5.470430 -0.670047 [569 rows x 2 columns]>

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

Python3

# giving a larger plot> plt.figure(figsize>=>(>8>,>6>))> plt.scatter(x_pca[:,>0>], x_pca[:,>1>],> >c>=>cancer[>'target'>],> >cmap>=>'plasma'>)> # labeling x and y axes> plt.xlabel(>'First Principal Component'>)> plt.ylabel(>'Second Principal Component'>)> plt.show()>
>
>

Вихід:

хеш-таблиця java

Python3

# components> pca.components_>
>
>

Вихід :

array([[ 0.21890244, 0.10372458, 0.22753729, 0.22099499, 0.14258969,  0.23928535, 0.25840048, 0.26085376, 0.13816696, 0.06436335,  0.20597878, 0.01742803, 0.21132592, 0.20286964, 0.01453145,  0.17039345, 0.15358979, 0.1834174 , 0.04249842, 0.10256832,  0.22799663, 0.10446933, 0.23663968, 0.22487053, 0.12795256,  0.21009588, 0.22876753, 0.25088597, 0.12290456, 0.13178394],  [-0.23385713, -0.05970609, -0.21518136, -0.23107671, 0.18611302,  0.15189161, 0.06016536, -0.0347675 , 0.19034877, 0.36657547,  -0.10555215, 0.08997968, -0.08945723, -0.15229263, 0.20443045,  0.2327159 , 0.19720728, 0.13032156, 0.183848 , 0.28009203,  -0.21986638, -0.0454673 , -0.19987843, -0.21935186, 0.17230435,  0.14359317, 0.09796411, -0.00825724, 0.14188335, 0.27533947]])>

Переваги аналізу головних компонент

  1. Зменшення розмірності : Аналіз основних компонентів є популярним методом, який використовується для зменшення розмірності , що є процесом зменшення кількості змінних у наборі даних. Зменшуючи кількість змінних, PCA спрощує аналіз даних, покращує продуктивність і полегшує візуалізацію даних.
  2. Вибір функції : Аналіз основних компонентів можна використовувати для вибір функції , який є процесом вибору найважливіших змінних у наборі даних. Це корисно в машинному навчанні, де кількість змінних може бути дуже великою, і важко ідентифікувати найважливіші змінні.
  3. Візуалізація даних : Аналіз основних компонентів можна використовувати для Мультиколінеарність : Аналіз основних компонентів можна використовувати для вирішення мультиколінеарність , що є поширеною проблемою в регресійному аналізі, де дві або більше незалежних змінних сильно корельовані. PCA може допомогти визначити базову структуру в даних і створити нові, некорельовані змінні, які можна використовувати в регресійній моделі.
  4. Зменшення шуму : Аналіз основних компонентів можна використовувати для зменшення шуму в даних. Видаляючи основні компоненти з низькою дисперсією, які, як передбачається, представляють шум, аналіз головних компонентів може покращити співвідношення сигнал/шум і полегшити ідентифікацію основної структури в даних.
  5. Стиснення даних : Аналіз основних компонентів можна використовувати для стиснення даних. Представляючи дані за допомогою меншої кількості головних компонентів, які охоплюють більшість варіацій у даних, PCA може зменшити вимоги до зберігання та прискорити обробку.
  6. Виявлення викидів : Аналіз основних компонентів можна використовувати для виявлення викидів. Викиди це точки даних, які значно відрізняються від інших точок даних у наборі даних. Аналіз головних компонентів може ідентифікувати ці викиди, шукаючи точки даних, які знаходяться далеко від інших точок у просторі головних компонентів.

Недоліки аналізу головних компонент

  1. Інтерпретація основних компонентів : головні компоненти, створені за допомогою аналізу головних компонентів, є лінійними комбінаціями вихідних змінних, і їх часто важко інтерпретувати в термінах вихідних змінних. Це може ускладнити пояснення результатів PCA іншим.
  2. Масштабування даних : Аналіз головних компонентів чутливий до масштабу даних. Якщо дані неправильно масштабовані, PCA може не працювати належним чином. Тому важливо масштабувати дані перед застосуванням аналізу головних компонентів.
  3. Втрата інформації : Аналіз основних компонентів може призвести до втрати інформації. Хоча аналіз основних компонентів зменшує кількість змінних, він також може призвести до втрати інформації. Ступінь втрати інформації залежить від кількості обраних основних компонентів. Тому важливо ретельно вибрати кількість основних компонентів, які потрібно зберегти.
  4. Нелінійні зв'язки : Аналіз головних компонентів передбачає, що зв’язки між змінними є лінійними. Однак, якщо між змінними існують нелінійні зв’язки, аналіз головних компонентів може не працювати належним чином.
  5. Обчислювальна складність : Обчислення аналізу головних компонентів може бути дорогим у плані обчислень для великих наборів даних. Це особливо вірно, якщо кількість змінних у наборі даних велика.
  6. Переобладнання : Аналіз основних компонентів іноді може призвести до переобладнання , коли модель надто добре відповідає навчальним даним і погано працює на нових даних. Це може статися, якщо використовується занадто багато основних компонентів або якщо модель навчається на невеликому наборі даних.

Часті запитання (FAQ)

1. Що таке аналіз основних компонентів (PCA)?

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

2. Як працює PCA?

Основні компоненти — це лінійні комбінації оригінальних характеристик, які PCA знаходить і використовує для фіксації найбільшої дисперсії в даних. Ці ортогональні компоненти розташовані в порядку величини дисперсії, яку вони пояснюють.

3. Коли слід застосовувати PCA?

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

4. Як інтерпретуються головні компоненти?

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

5. Яке значення мають головні компоненти?

Головні компоненти представляють напрямки, у яких дані найбільше змінюються. Перші кілька компонентів зазвичай охоплюють більшу частину дисперсії даних, дозволяючи більш стисле представлення.