Если вы занимаетесь анализом данных или энтузиастом машинного обучения, вы, вероятно, когда-то сталкивались с анализом основных компонентов (АПК). Но сталкивались ли вы с трудностями, пытаясь полностью понять концепцию и ее приложения? PCA может быть мощным инструментом для уменьшения размерности, но его сложность часто может быть препятствием для многих людей. С таким количеством ресурсов, доступных в Интернете, может быть сложно найти четкое и краткое руководство по пониманию и внедрению PCA.

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

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

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

# Generate sample data
x = np.random.normal(0, 1, 100)
y = np.random.normal(0, 1, 100)

# Combine x and y into a feature matrix
X = np.vstack([x, y]).T

# Visualize the original data
plt.scatter(X[:, 0], X[:, 1])
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Original Data')
plt.show()

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

# Perform PCA on the feature matrix
pca = PCA()
pca.fit(X)

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

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

# Get the first principal component
first_pc = pca.components_[0]

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

# Compute the line of best fit for the data
m, b = np.polyfit(X[:, 0], X[:, 1], deg=1)

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

# Plot the data, first principal component, and line of best fit
fig, ax = plt.subplots()
ax.scatter(X[:, 0], X[:, 1], label='Data')
ax.plot([0, first_pc[0]], [0, first_pc[1]], 'r-', linewidth=2, label='PCA')
ax.plot(X[:, 0], m*X[:, 0] + b, 'g-', linewidth=2, label='Line of Best Fit')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('PCA with Line of Best Fit')
ax.legend()
plt.show()

Давайте попробуем разобраться с первым главным компонентом с помощью математики.

Предположим, у нас есть набор данных из n точек данных с p функциями. Мы можем представить этот набор данных в виде матрицы nxp X, где каждая строка представляет точку данных, а каждая столбец представляет функцию. Затем мы можем центрировать данные, вычитая среднее значение каждого столбца из каждого элемента этого столбца. Это дает нам новую матрицу X’, где среднее значение каждого столбца равно 0.

Первый главный компонент X — это направление, которое фиксирует максимальную дисперсию данных. Чтобы найти это направление, мы можем использовать следующие шаги:

  1. Рассчитайте ковариационную матрицу X’:

C = (1/n) *X’^T *X’, где X’^T — транспонирование X’

2. Найдите собственный вектор, соответствующий наибольшему собственному значению C. Этот собственный вектор является первой главной компонентой.

v_1 = первый собственный вектор C

3. Спроецируйте данные на первый главный компонент:

Y = X’ * v_1

где Y — новый вектор nx 1, представляющий проекцию каждой точки данных на первый главный компонент.

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

# Project the data onto the first principal component
X_projected = X.dot(first_pc)

# Print the shape of the original data and the projected data
print("Original shape:", X.shape)
print("Projected shape:", X_projected.shape)
Original shape: (100, 2)
Projected shape: (100,)
# Plot the original data
plt.scatter(X[:, 0], X[:, 1], alpha=0.5)

# Plot the projection onto the first principal component
plt.plot(X_projected, np.zeros_like(X_projected), 'r-', label='Projection')
plt.legend()

plt.show()

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

Важно отметить, что ортогональность является важным требованием в PCA. Если бы главные компоненты не были ортогональны, то паттерны изменчивости, которые они фиксируют, перекрывались бы, и было бы трудно интерпретировать относительную важность каждого компонента.

Чтобы визуализировать эффект PCA, представьте, что каждая точка данных представлена ​​координатой в 2D-пространстве, где ось X представляет одну переменную, а ось Y представляет другую. переменная. Теперь представьте, что точечная диаграмма вращается так, что новая ось X представляет направление первого главного компонента, а новая ось Y представляет направление второго главного компонента. . Это означает, что новая ось X фиксирует направление максимального отклонения данных, а новая ось Y фиксирует направление максимального оставшегося отклонения.

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

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

Просто нажмите на эту ссылку: https://www.kaggle.com/code/anuai23/geometric-intuition-behind-pca

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

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

Приятного чтения! Продолжай учиться!