Шаги метода анализа основных компонентов (PCA) и детали кода

алгоритм
Шаги метода анализа основных компонентов (PCA) и детали кода

Шаги метода анализа основных компонентов (PCA) и детали кода

предисловие

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

1. Что такое анализ главных компонентов?

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

1.1 Сфера применения PCA
  • Методы уменьшения размерности доступны как для размеченных, так и для неразмеченных данных.
  • Основное внимание уделяется методам уменьшения размерности неразмеченных данных, которые также можно применять к размеченным данным.
1.2 Преимущества и недостатки

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

2. Этапы метода PCA

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

2.1 Объем стандартизированных непрерывных исходных переменных (неструктурированная структура перехода)

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

  • Нормализация линейной функции. Исходные данные линейно преобразуются, так что результат отображается в диапазоне [0, 1], а исходные данные масштабируются пропорционально. Формула нормализации выглядит следующим образом:
Xnorm =XXminXmaxXminX_{\text {norm }}=\frac{X-X_{\min }}{X_{\max }-X_{\min }}
  • Нулевое среднее нормализовано. Он копирует исходные отображения в среднее значение 0 и стандартное отклонение 1 в распределении. В частности, если средние исходные характеристикиμ, стандартное отклонение равноо, то формула нормализации определяется как:
    z=xμо.z=\frac{x-\mu}{\sigma} .

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

  • Порядковое кодирование: Порядковое кодирование обычно используется для работы с данными с отношением размера между категориями. Например, оценки можно разделить на низкие, средние и высокие оценки, и существует отношение сортировки «высокий > средний > низкий». Кодирование серийного номера назначит числовой идентификатор категориальному признаку в соответствии с отношением размера.Например,высокий соответствует 3, средний соответствует 2, а низкий соответствует 1. Соотношение размеров сохраняется после преобразования.

  • Однократное кодирование: Однократное кодирование часто используется для работы с функциями, которые не имеют отношения размера между категориями. Например, группа крови, всего имеется 4 значения (кровь A, кровь B, кровь AB, кровь O), горячее кодирование превратит группу крови в 4-мерный разреженный вектор. представлена ​​как (1, 0 , 0, 0), кровь группы B представлена ​​как (0, 1, 0, 0), группа AB представлена ​​как (0, 0, 1, 0), а кровь группы O представлена ​​как (0, 0, 0, 1). (В случае, когда имеется много значений категории, обратите внимание на использование разреженных векторов для экономии места и сотрудничайте с выбором объектов для уменьшения размеров)

  • Двоичное кодирование: Двоичное кодирование в основном делится на два этапа: сначала используется кодирование серийного номера для присвоения идентификатора категории каждой категории, а затем в качестве результата используется двоичное кодирование, соответствующее идентификатору категории. Взяв в качестве примера группы крови A, B, AB и O, в таблице 1.1 показан процесс двоичного кодирования. Идентификатор крови группы А равен 1, а двоичное представление равно 001; идентификатор крови группы В равен 2, а двоичное представление равно 010; и так далее можно получить двоичное представление крови АВ и крови О. Можно видеть, что двоичное кодирование по существу использует двоичный код для хеширования идентификатора и, наконец, получает вектор признаков 0/1, а количество измерений меньше, чем у горячего кодирования, что экономит место для хранения.

  • Categorical Embedder: Категориальные переменные кодируются нейронной сетью, заинтересованные друзья могут обратиться кэта статья(Это может быть перечислено в отдельной главе в будущем, и это не может занимать слишком много места...)

    Для неструктурированных данных текстового типа в основном используется модель Bag of Words.,TF-IDF, тематическая модель(Тематическая модель), модель вложения слов(встраивание слов), это не буду описывать слишком много, просто опишу вкратце.Для специализацииДруг НЛП** играет большим ножом перед Гуань Гун...

2.2 Вычислите ковариационную матрицу для выявления корреляций

Целью этого шага является наблюдение за тем, коррелируют ли метки данных друг с другом, а также за тем, содержат ли индикаторы избыточную информацию. Использование ковариационной матрицы представляет собойp * pСимметричная матрица (где p — количество измерений), в которой в качестве элементов используются ковариации, связанные со всеми возможными парами исходных переменных. Предположим, три переменныех, у, г3D-набор данных, ковариационная матрица3 * 3Матрица показана ниже:

[Cov(x,x)Cov(x,y)Cov(x,z)Cov(y,x)Cov(y,y)Cov(y,z)Cov(z,x)Cov(z,y)Cov(z,z)]\left[\begin{array}{lll} \operatorname{Cov}(x, x) & \operatorname{Cov}(x, y) & \operatorname{Cov}(x, z) \\ \operatorname{Cov}(y, x) & \operatorname{Cov}(y, y) & \operatorname{Cov}(y, z) \\ \operatorname{Cov}(z, x) & \operatorname{Cov}(z, y) & \operatorname{Cov}(z, z) \end{array}\right]

Самоковариантность — это собственная дисперсия, **(Cov(a,b)=Cov(b,a))** коммутативна, что означает, что верхняя и нижняя треугольные части равны. Если ковариация положительна, две переменные положительно коррелированы, а если ковариация отрицательна, две переменные коррелированы отрицательно.

2.3 Вычислить собственные векторы и собственные значения ковариационной матрицы для определения главных компонентов

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

主成分组件.pngОрганизовав таким образом информацию в основных компонентах, можно уменьшить размерность для создания новых показателей без потери слишком большого количества информации. Новые индикаторы на данный момент не коррелированы и необъяснимы. Они представляют собой линейные комбинации исходных переменных. Основные компоненты представляют направление данных, которое объясняет наибольшую величину дисперсии. Связь между дисперсией и информацией заключается в том, что чем больше дисперсия, переносимая линией, тем выше дисперсия точек данных вдоль линии, и чем больше дисперсия вдоль линии, тем больше информации она содержит. Вычисление собственного значения матрицы ковариации фактически вычисляет максимальную дисперсию, а вычисление соответствующего собственного вектора - лучшее направление проекции.Чтобы вычислить собственное значение матрицы ковариации, ее необходимо диагонализовать, чтобы удовлетворить измененную ковариацию между индикаторов равен 0, а дисперсия индикатора максимально велика, поэтому необходимо решить задачу максимизации, которую можно выразить как:

{max{юTΣю} s.t. юTю=1\left\{\begin{array}{l} \max \left\{\omega^{\mathrm{T}} \Sigma \omega\right\} \\ \text { s.t. } \quad \omega^{\mathrm{T}} \omega=1 \end{array}\right.

В это время метод множителя Лагранжа используется для преобразования проблемы в задачу оптимизации, и производная ω делается равной 0, и в это время может быть получено Σ ω = λ ω:

D(x)=юTΣю=λюTю=λD(\boldsymbol{x})=\boldsymbol{\omega}^{\mathrm{T}} \Sigma \boldsymbol{\omega}=\lambda \boldsymbol{\omega}^{\mathrm{T}} \boldsymbol{\omega}=\lambda

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

2.4 Создайте собственные векторы, чтобы решить, какие главные компоненты оставить

Вычисление собственных векторов и их сортировка в порядке убывания собственных значений позволяет нам найти главные компоненты в порядке их важности. На этом шаге мы решили сохранить все собственные значения или отбросить менее важные собственные значения. А с оставшимися собственными значениями формируем векторную матрицу, которая становится собственными векторами. Собственный вектор — это просто матрица со столбцами собственных векторов, которые мы решили сохранить. Этот шаг определяется в соответствии с нашими потребностями. Обычно перед взятием собственных значенийdсоответствующие собственные векторыω1 ,ω2 ,...,ωd, по следующему отображению будетnмногомерные образцы сопоставляются сdизмерение;

xi'=[ю1Txiю2TxiюdTxi]\boldsymbol{x}_{i}^{\prime}=\left[\begin{array}{c} \boldsymbol{\omega}_{1}^{\mathrm{T}} \boldsymbol{x}_{i} \\ \boldsymbol{\omega}_{2}^{\mathrm{T}} \boldsymbol{x}_{i} \\ \vdots \\ \boldsymbol{\omega}_{d}{ }^{\mathrm{T}} \boldsymbol{x}_{i} \end{array}\right]

новыйсчастье 'ПервыйdразмерностьxiВо-первыхdосновные компонентыωdпроекции в направлении, выбирая наибольшуюdСобственные векторы, соответствующие собственным значениям, мы отбрасываем с малой дисперсией признаков (шумов), так что каждыйnразмерный вектор-столбецxiотображается какdразмерный вектор-столбецсчастье ', доля информации после уменьшения размерности определяется как;

η=i=1dλi2i=1nλi2\eta=\sqrt{\frac{\sum_{i=1}^{d} \lambda_{i}{ }^{2}}{\sum_{i=1}^{n} \lambda_{i}{ }^{2}}}
2.5 Пересчет данных по оси главного компонента

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

2.6 Резюме

В дополнение к использованию целевой функции для решения максимальной дисперсии можно рассмотреть другой анализ мышления, например, минимальную ошибку регрессии для получения новой целевой функции. Фактически соответствующий принцип и метод решения эквивалентны этому методу.PCAЭто метод уменьшения линейной размерности, который имеет определенные ограничения, его можно рассматривать через отображение ядраPCAМеханическая энергия расширена, чтобы получить анализ основных компонентов ядра (KPCA), могут быть сведены методами отображения многообразия, такими как изометрическое отображение, локальное линейное вложение, отображение признаков Лапласа и т. д., к некоторымPCAОперации нелинейного уменьшения размерности выполняются на сложных наборах данных, которые не работают должным образом.

Далее будет использоваться примерPCAуменьшение размерности

3 Углубленный PCA

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

3.1 PCAПодать заявку в раздел визуализации
3.1.1 Реализация кода — теоретическая часть
  • Импорт связанных библиотек
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
  • Анализ главных компонент как быстрый и гибкий метод уменьшения размерности неконтролируемых данных. Его визуализация относительно проста. Случайным образом сгенерируйте 200 очков
rng = np.random.RandomState(1)
X = np.dot(rng.rand(2, 2), rng.randn(2, 200)).T
plt.scatter(X[:, 0], X[:, 1])
plt.axis('equal');

Результат показан ниже:

PCA可视化图.png

  • очевидно,xиyМежду переменными существует почти линейная зависимость. В отличие от проблемы линейной регрессии,PCAпытается понятьxиyотношения между переменными. существуетPCAв, черезscikit-learnбиблиотекаPCAОценщик может количественно определить эту взаимосвязь, вычислив список основных осей данных и представив набор данных с использованием этих осей.
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(X)
print(pca.components_)
print(pca.explained_variance_)

PCA量化结果.png

PCAобъясненная дисперсия;

pca解释方差.png

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

def draw_vector(v0, v1, ax=None):
    ax = ax or plt.gca()
    arrowprops=dict(arrowstyle='->',
                    linewidth=2,
                    shrinkA=0, shrinkB=0)
    ax.annotate('', v1, v0, arrowprops=arrowprops)

# plot data
plt.scatter(X[:, 0], X[:, 1], alpha=0.2)
for length, vector in zip(pca.explained_variance_, pca.components_):
    v = vector * 3 * np.sqrt(length)
    draw_vector(pca.mean_, pca.mean_ + v)
plt.axis('equal');

PCA投影数据.png

Для проецирования данных эти векторы представляют главную ось данных, длина вектора указывает на важность этой оси в описании распределения данных, точнее, это мера дисперсии данных при проецировании на та ось. Проекция каждой точки данных на главную ось является главным компонентом данных. Это преобразование оси данных в главную ось называетсяaffine transformation, который в основном состоит из перемещения, поворота и равномерного масштабирования (приложения, которые имеют смысл).

3.1.2 ВизуализацияPCAДело: рукописные цифры

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

Сначала загрузите данные:

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
digits = load_digits()
digits.data.shape

手写识别数据shape.png

Размерность всех данных определяется выражением8*8пиксельная композиция, всего64измерение. мы можем пройтиPCAСпроецируйте их на более простое в использовании количество измерений:

#将数据投影到2维(可以自主决定投影维度)
pca = PCA(2)  # project from 64 to 2 dimensions
projected = pca.fit_transform(digits.data)
print(digits.data.shape)
print(projected.shape)

pca投影2维.png

Визуализируйте первые два основных компонента каждой точки, чтобы понять данные:

plt.scatter(projected[:, 0], projected[:, 1],
            c=digits.target, edgecolor='none', alpha=0.5,
            cmap=plt.cm.get_cmap('Accent', 10))
plt.xlabel('component 1')
plt.ylabel('component 2')
plt.colorbar();

手写数字pca可视化部分.png

Полные данные представляют собой 64-мерное облако точек, представляющее собой проекцию каждой точки данных в направлении с наибольшей дисперсией. По сути, мы нашли оптимальное растяжение и поворот в 64-мерном пространстве, что позволяет нам видеть цифровой макет в 2-мерном пространстве (без привязки к меткам).

3.1.3 определение компонента

Это значение можно понять с точки зрения комбинации базисных векторов. Например, каждое изображение в обучающем наборе представлено64определение набора значений пикселей, который мы называем векторомx:

x=[X1,X2,X3X64]x=\left[X_{1}, X_{2}, X_{3} \cdots X_{64}\right]

Чтобы построить изображение, мы умножаем каждый элемент вектора на описываемый им пиксель и складываем результаты для построения изображения:

image(x)=x1( pixel 1)+x2( pixel 2)+x3( pixel 3)x64( pixel 64)\begin{array}{c} \operatorname{image}(x)=x_{1} \cdot(\text { pixel } 1)+x_{2} \cdot(\text { pixel } 2)+x_{3} \cdot(\text { pixel } 3) \cdots x_{64} \\ \cdot(\text { pixel } 64) \end{array}

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

def plot_pca_components(x, coefficients=None, mean=0, components=None,
                        imshape=(8, 8), n_components=2, fontsize=12,
                        show_mean=True):
    if coefficients is None:
        coefficients = x
        
    if components is None:
        components = np.eye(len(coefficients), len(x))
        
    mean = np.zeros_like(x) + mean
        

    fig = plt.figure(figsize=(1.2 * (5 + n_components), 1.2 * 2))
    g = plt.GridSpec(2, 4 + bool(show_mean) + n_components, hspace=0.3)

    def show(i, j, x, title=None):
        ax = fig.add_subplot(g[i, j], xticks=[], yticks=[])
        ax.imshow(x.reshape(imshape), interpolation='nearest')
        if title:
            ax.set_title(title, fontsize=fontsize)

    show(slice(2), slice(2), x, "True")
    
    approx = mean.copy()
    
    counter = 2
    if show_mean:
        show(0, 2, np.zeros_like(x) + mean, r'$\mu$')
        show(1, 2, approx, r'$1 \cdot \mu$')
        counter += 1

    for i in range(n_components):
        approx = approx + coefficients[i] * components[i]
        show(0, i + counter, components[i], r'$c_{0}$'.format(i + 1))
        show(1, i + counter, approx,
             r"${0:.2f} \cdot c_{1}$".format(coefficients[i], i + 1))
        if show_mean or i > 0:
            plt.gca().text(0, 1.05, '$+$', ha='right', va='bottom',
                           transform=plt.gca().transAxes, fontsize=fontsize)

    show(slice(2), slice(-2, None), approx, "Approx")
    return fig
    
from sklearn.datasets import load_digits

digits = load_digits()
sns.set_style('white')

fig = plot_pca_components(digits.data[2],
                          show_mean=False)

组件二维投影pca.png

Верхний ряд визуализаций представляет отдельные пиксели, а нижний ряд показывает совокупный вклад этих пикселей в построение изображения. Использование только двух компонентов на основе пикселей явно недостаточно, поскольку создается лишь крошечная часть 64-пиксельного изображения. Пиксельное представление — не единственный базовый выбор, мы также можем использовать другие базовые функции, которые содержат некоторый предопределенный вклад каждого пикселя.

 image (x)=mean+x1( basis 1)+x2( basis 2)+x3( basis 3)\text { image }(x)=\operatorname{mean}+x_{1} \cdot(\text { basis } 1)+x_{2} \cdot(\text { basis } 2)+x_{3} \cdot(\text { basis } 3) \cdots

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

pca = PCA(n_components=2)
Xproj = pca.fit_transform(digits.data)
sns.set_style('white')
fig = plot_pca_components(digits.data[10], Xproj[10],
                          pca.mean_, pca.components_)

Визуализация представлена ​​на следующем рисунке:

重建数字pca.png

В отличие от пиксельной основы,PCAПозволяет использовать среднее значение плюс два компонента для восстановления характерных особенностей входного изображения. Количество пикселей на пиксель в каждом компоненте является выводом об ориентации вектора в нашем 2D-представлении.PCAФормируется набор функций, который проще и эффективнее исходных данных. Так как же выбрать количество компонентов, чтобы сделать всю функцию оптимальной?

3.1.4 Как определить количество компонентов

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

pca = PCA().fit(digits.data)
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance');

Результаты визуализации следующие:

组件数量确定.png

Эта кривая количественно определяет, какая часть 64-мерной дисперсии включена вNкомпонент, например, мы можем видеть, что первые десять компонентов содержат около **75%Дисперсия , требует 50 описаний компонентов99%** дисперсия. Визуализация может помочь нам понять уровень избыточности.

3.2 PCAприменяется для фильтрации шума
3.2.1 Реализация кода — теоретическая часть

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

Сначала обратите внимание на взаимосвязь между числовыми данными.

def plot_digits(data):
    fig, axes = plt.subplots(4, 10, figsize=(10, 4),
                             subplot_kw={'xticks':[], 'yticks':[]},
                             gridspec_kw=dict(hspace=0.1, wspace=0.1))
    for i, ax in enumerate(axes.flat):
        ax.imshow(data[i].reshape(8, 8),
                  cmap='binary', interpolation='nearest',
                  clim=(0, 16))
plot_digits(digits.data)

手写数字输出.png

Добавьте случайный шум, создайте набор данных, перерисуйте.

np.random.seed(42)
noisy = np.random.normal(digits.data, 4)
plot_digits(noisy)

含噪声手写数字.pngТекущий набор данных представляет собой зашумленное распознавание рукописного ввода, содержащее поддельные пиксели, и нам сложно распознавать числа невооруженным глазом. Давайте потренируемся на этом наборе данныхPCA, требуя, чтобы проекция сохраняла 50% дисперсии.

pca = PCA(0.50).fit(noisy)
pca.n_components_

Результат операции -12,50%Устойчивость к истиранию эквивалентна12главный компонент. Теперь мы вычисляем эти компоненты, а затем используем преобразование для восстановления отфильтрованных чисел:

components = pca.transform(noisy)
filtered = pca.inverse_transform(components)
plot_digits(filtered)

含噪重组可视化.png

Визуализируя образ, можно четко обнаружить, что,PCAС характеристиками фильтрации шума, черезPCAДанные уменьшения размерности имеют функцию выбора признаков.

3.2.2PCAПрименительно к уменьшению размерности - маркировка лиц в дикой природе (ссылкаscikit-learnофициальный случай)
  1. Обзор проекта

Labeled Faces in the Wild— общедоступный бенчмарк для проверки лица, выборка содержит 1850 функций, мы используемPCAНаблюдать, можно ли уменьшить размер этих признаков;

  1. Процесс разработки

    1. Загрузите данные: просмотрите этикетки и образцы в наборе данных.

    2. Обратите внимание на образец содержимого этикетки:

Labeled Faces in the Wild.png3. Подготовьте данные, изучите характеристики данных и рассчитайте соответствующее количество компонентов:

```python
from sklearn.datasets import fetch_lfw_people
from sklearn.decomposition import PCA as RandomizedPCA
faces = fetch_lfw_people(min_faces_per_person=60)
print(faces.target_names)
print(faces.images.shape)
pca = RandomizedPCA(150)
pca.fit(faces.data)
```

image-20220105152243031.png

Общее количество выборок составляет 1288, а характеристик выборки — 1850 (без учета очистки данных на первом этапе), а подходящих компонентов — 150.

  1. нарисовать изображение переоценки
```python
fig, axes = plt.subplots(3, 8, figsize=(9, 4),
                         subplot_kw={'xticks':[], 'yticks':[]},
                     gridspec_kw=dict(hspace=0.1, wspace=0.1))
for i, ax in enumerate(axes.flat):
ax.imshow(pca.components_[i].reshape(62, 47), cmap='bone')
```

Постройте кривую компонента:

```
import numpy as np 
plt.plot(np.cumsum(pca.explained_variance_ratio_))
plt.xlabel('number of components')
plt.ylabel('cumulative explained variance');
```

特征脸组件数量.png

Вычислительный компонент реконструирует изображение и визуализирует результат:

В этом случае многомерных данных можно визуализировать изображения, связанные с несколькими первыми основными компонентами, и наблюдать за изменениями изображения (я не знаю, почему это официально называетсяeigenfacesстранное имя). Мы видим, что на компонент 150 приходится более 95% дисперсии. Мы можем восстановить большинство характеристик данных, используя 150 компонентов, сравнивая входное изображение с восстановленным изображением, как показано ниже;

```
# Compute the components and projected faces
pca = RandomizedPCA(150).fit(faces.data)
components = pca.transform(faces.data)
projected = pca.inverse_transform(components)
# Plot the results
fig, ax = plt.subplots(2, 10, figsize=(10, 2.5),
                       subplot_kw={'xticks':[], 'yticks':[]},
                       gridspec_kw=dict(hspace=0.1, wspace=0.1))
for i in range(10):
    ax[0, i].imshow(faces.data[i].reshape(62, 47), cmap='binary_r')
    ax[1, i].imshow(projected[i].reshape(62, 47), cmap='binary_r')
    
```

特征脸重构数据pca.png

Первая строка показывает входное изображение, а вторая строка показывает реконструированное изображение со 150 компонентами из трех тысяч исходных признаков. Хотя размерность данных уменьшается почти в 20 раз, мы все еще можем судить об информации реконструированного изображения невооруженным глазом. Означает, что наш алгоритм классификации достаточно эффективен, чтобы упростить классификацию.

4 Развернуть

В этом разделе мы полностью обсудили от теоретического вывода до анализа кода и анализа конкретных случаев.PCAСоответствующие знания, как выполнить уменьшение размерности, высокоширотную визуализацию, фильтрацию шума, выбор признаков, я считаю, что каждый получит столько же, сколько и я. Для методов обработки уменьшения размерности, помимоPCAСуществуют также некоторые ограничения использования, такие как корреляции более высокого порядка, которые требуют некоторых функций для преобразования нелинейности в линейные корреляции для уменьшения размерности. В проблеме неконтролируемого уменьшения размерности также существуют такие методы, как случайная проекция и агрегация признаков для уменьшения размерности данных.Заинтересованные друзья могут обратиться кscikit-learnОфициальный учебник.

использованная литература

  1. "Машинное обучение"
  2. aces recognition example using eigenfaces and SVMs
  3. A Step-by-Step Explanation of Principal Component Analysis (PCA)
  4. использоватьPCAупростить данные
  5. In Depth: Principal Component Analysis

Рекомендуемое чтение