Выбор числа компонент анализа главных компонент: Исследование коэффициента кумулятивной объясненной дисперсии


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

Анализ главных компонент (PCA) — это подход, используемый для уменьшения размерности, который улучшает визуализацию данных, сохраняя при этом максимум информации исходных данных. Потеря информации исследуется по дисперсии между исходными данными и сжатыми (спроецированными) данными, целью которой является максимизация дисперсии.

В машинном обучении РСА влияет на скорость алгоритма обучения, который уменьшает набор признаков высокой размерности (например, 10 000) до более низкой (например, 1 000). Таким образом, РСА позволяет алгоритму работать быстрее.

Алгоритм

Перед началом работы алгоритма PCA требуется предварительная обработка. Целью предварительной обработки является нормализация каждого признака данных, при которой каждый признак в наборе данных будет иметь нулевое среднее и единичную дисперсию. Код показан ниже:

def featureNormalize(X):

  mu = np.mean(X, axis=0) # Mean of each feature

  sigma = np.std(X, axis=0) # Standard deviation of each feature

  X_norm = (X-mu)/sigma # Normalized data (zero mean and unite standard deviation)

  return X_norm
Вход в полноэкранный режим Выход из полноэкранного режима

Чтобы уменьшить данные с n-размеров до k-размеров (эквивалентно количеству компонентов), сначала вычисляется ковариационная матрица, обозначаемая ∑ следующим образом:

=1mXTXsum =frac{1}{m}X^{T}X

=m1XTX

Где X — n-мерные данные, m — количество примеров, а ∑ — ковариационная матрица размером n x n.

Далее вычисляются собственные векторы ковариационной матрицы через разложение по сингулярным значениям или SVD, в результате чего получается унитарная матрица U и вектор с сингулярными значениями S. Выбрав k первых столбцов матрицы U, получаем новую матрицу Ur, которая используется для получения уменьшенных данных Z k-размерности, как показано в уравнении ниже:

Z=XUrZ=XU_{r}

Z=XUr

Код Python для выполнения PCA показан ниже:

def pca(X, k):

  m = np.size(X, axis=0) # Number of examples

  sigma = (1/m)*X.T.dot(X) # Covariance Matrix

  [U, S, V] = np.linalg.svd(sigma) # Singular Decomposition Value

  Ur = U[:, 0:k] # U reduce

  Z = X.dot(Ur) # Projected data of k-dimensions

  return Z, S
Вход в полноэкранный режим Выход из полноэкранного режима

Исходные данные X и число компонент k являются входами функции, а спроецированные данные Z и вектор сингулярных значений являются выходами функции.

Выбор числа главных компонент

Суть PCA заключается в выборе числа компонентов k, которое исследуется с помощью кумулятивного объясненного дисперсионного отношения, оценивая которое мы можем сохранить информацию исходных данных. Коэффициент дисперсии получается из вектора сингулярных значений S, как показано в приведенном ниже уравнении:

i=1kSii=1nSifrac{sum_{i=1}^{k}S_{i}}{sum_{i=1}^{n}S_{i}}

i=1nSii=1kSi

Где k — количество компонентов (k-размеров), а n — количество признаков. Выбор k осуществляется путем отбора наименьших значений k, у которых коэффициент дисперсии выше определенного порога, например, 99%. Код для расчета кумулятивного объясненного коэффициента дисперсии показан ниже:

def cumulativeExplainedVariance(S, k_range):

  variance_ratio = np.zeros(k_range) # Cumulative explained variance ratio

  for i in range(k_range):
      variance_ratio[i] = np.sum(S[0:i+1])/np.sum(S)

  return variance_ratio

Войти в полноэкранный режим Выйти из полноэкранного режима

Входными данными функции являются вектор сингулярных значений S и диапазон исследуемых компонент k. Выходными данными является вектор кумулятивных объясненных коэффициентов дисперсии.

Набор данных по радужной оболочке глаза

Набор данных радужной оболочки глаза используется для анализа выбора количества компонентов в PCA. Краткое описание набора данных и его особенностей приведено в предыдущей статье блога о дискриминанте Фишера.

Исследуя набор данных радужной оболочки глаза для значений k в диапазоне 1-3, мы получаем график числа компонент по кумулятивному коэффициенту объясненной дисперсии, представленный ниже:

Видно, что k = 3 является наименьшим значением k с кумулятивным объясненным коэффициентом дисперсии 0,9948, что выше порогового значения 0,99 (красная пунктирная линия). Таким образом, k = 3 — это наименьшее значение, которое максимизирует дисперсию между исходными данными и спроецированными данными. На рисунке ниже показана трехмерная диаграмма рассеяния спроецированных данных из данных о радужной оболочке глаза с k = 3.

Анализ питательных веществ набора данных пиццы

Теперь исследуется анализ питательных веществ набора данных пиццы. Набор данных доступен на Kaggle и содержит 300 примеров и 7 признаков, распределенных по 10 классам. Некоторые признаки — это количество воды и белка на 100 грамм в образце.

Исследуя питательные вещества набора данных пиццы для значений k в диапазоне 1-6, мы получаем график числа компонент по кумулятивному коэффициенту объясненной дисперсии, представленный ниже:

Проверяя график выше, можно заметить, что k = 4 является наименьшим значением k с кумулятивным объясненным отношением дисперсии 0,9960, что выше порога 0,99 (красная пунктирная линия). Таким образом, k = 4 — это наименьшее значение, которое максимизирует дисперсию между исходными данными и спроецированными данными. На рисунке ниже показан график признака 1 и признака 2 спроецированных данных от питательных веществ пиццы при k = 4.

Вывод

Таким образом, оценка кумулятивного коэффициента объясненной дисперсии является надежным методом выбора количества компонент на PCA, который выполняет снижение размерности, максимизируя дисперсию между исходными и спроецированными данными.


Полный код доступен на Github и Colab. Следите за блогом, если эта статья будет для вас полезной.

Если вас интересует снижение размерности с помощью линейного дискриминанта Фишера, я написал об этом статью в блоге. Если вы хотите ознакомиться с ним: blog post.

Оцените статью
Procodings.ru
Добавить комментарий