Преобразование данных с помощью PCA

Что такое PCA?

PCA (Principal Component Analysis) — это метод линейного преобразования данных, который используется для их снижения размерности. Он находит новые переменные (называемые главными компонентами) , которые являются линейными комбинациями исходных переменных, но имеют меньшую размерность и объясняют большую часть дисперсии данных.

PCA широко используется в машинном обучении и статистике для анализа и визуализации данных. Этот метод может использоваться для уменьшения размерности данных до двух или трех компонент, что облегчает их визуализацию, или для сокращения количества переменных до нескольких наиболее важных компонент.

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

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

Как работает PCA?

PCA работает путем нахождения главных компонент, которые являются новыми переменными, объясняющими наибольшую дисперсию данных. Они выбираются таким образом, чтобы первая главная компонента объясняла наибольшую долю дисперсии, вторая — наибольшую долю оставшейся дисперсии и т. д. Главные компоненты также ортогональны друг другу, что означает, что они не коррелируют между собой.

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

PCA также может использоваться для сокращения количества переменных до нескольких наиболее важных компонент. Для этого необходимо выбрать количество компонент, которые объясняют достаточно большую долю дисперсии данных. Обычно выбирают количество компонент, объясняющих не менее 70-80% дисперсии.

После нахождения главных компонент, PCA может применяться для преобразования данных. Для этого исходные данные умножаются на матрицу главных компонент. Это преобразование может уменьшить размерность данных, сохраняя при этом большую часть информации. Кроме того, оно может улучшить качество данных, устраняя шум и устраняя мультиколлинеарность.

Пример применения PCA в Python

Для применения PCA в Python можно использовать библиотеку scikit-learn. В этой библиотеке PCA реализован в классе PCA модуля decomposition. Для использования PCA необходимо создать объект этого класса и вызвать метод fit_transform () для преобразования данных. Метод fit_transform () возвращает преобразованные данные.

Для демонстрации работы PCA в Python рассмотрим пример использования на наборе данных Iris. Набор данных Iris содержит информацию об измерениях цветков трех видов ириса. В наборе данных 4 переменные и 150 наблюдений.

Сначала загрузим данные и выделим их в отдельную переменную:

javascriptCopy codefrom sklearn. datasets import load_iris from sklearn. decomposition import PCA iris = load_iris () X = iris. data

Затем создадим объект PCA и вызовем метод fit_transform () для преобразования данных. В качестве параметра n_components передадим значение 2, так как мы хотим уменьшить размерность данных до 2:

scssCopy codepca = PCA (n_components=2) X_pca = pca. fit_transform (X)

Теперь данные преобразованы и находятся в переменной X_pca. Можно отобразить данные на графике, чтобы визуально убедиться в корректности преобразования:

javascriptCopy codeimport matplotlib. pyplot as plt plt. scatter (X_pca[: , 0], X_pca[: , 1], c=iris. target) plt. xlabel (‘PCA 1’) plt. ylabel (‘PCA 2’) plt. show ()

На графике отображены две главные компоненты, которые объясняют наибольшую долю дисперсии данных. Каждый цвет соответствует одному виду ириса. Можно заметить, что различные виды ириса хорошо разделяются на графике.

javascriptCopy codefrom sklearn. datasets import load_iris from sklearn. decomposition import PCA iris = load_iris () X = iris. data javascriptCopy codefrom sklearn. datasets import load_iris from sklearn. decomposition import PCA iris = load_iris () X = iris. data scssCopy codepca = PCA (n_components=2) X_pca = pca. fit_transform (X) scssCopy codepca = PCA (n_components=2) X_pca = pca. fit_transform (X) javascriptCopy codeimport matplotlib. pyplot as pltplt. scatter (X_pca[: , 0], X_pca[: , 1], c=iris. target) plt. xlabel (‘PCA 1’) plt. ylabel (‘PCA 2’) plt. show () javascriptCopy codeimport matplotlib. pyplot as plt plt. scatter (X_pca[: , 0], X_pca[: , 1], c=iris. target) plt. xlabel (‘PCA 1’) plt. ylabel (‘PCA 2’) plt. show ()