Анализ основных компонентов (PCA) — это один из наиболее часто используемых алгоритмов машинного обучения без учителя в различных приложениях: исследовательский анализ данных, уменьшение размерности, сжатие информации, удаление шума из данных и многое другое
Общие процессы PCA:
1.PCA находит новое начало данных, взяв среднее значение горизонтального и вертикального диапазона всех точек данных (обратите внимание, что PCA проецирует данные на 2D-плоскость).
2.PCA устанавливает новую ось (называемую первой главной составляющей), которая максимизирует инерцию (дисперсию) всех точек данных. Другими словами, эта новая линия или ось имеет наибольшее комбинированное расстояние от точек данных (сумму квадратов расстояний можно найти по теореме Пифагора).
3.PCA устанавливает последующую ось ортогонально первой, а также максимизирует оставшуюся инерцию.
=================================================
Карты PCA и их интерпретации:
После проецирования всех точек данных на новую плоскость PCA исследует отношения в данных как между наблюдениями (строки), так и между переменными (столбцы). Используя различную интерпретацию, основные компоненты помогают объяснить эти отношения.
Карта наблюдений PCA называется факторными оценками. Мы можем интерпретировать карту оценок факторов, оценивая расстояния между точками данных строки, используя такие методы, как поиск средних значений группы, интервалы допуска, интервалы начальной загрузки и кластеризацию. Расстояние между точками представляет собой сходство между ними, точки, расположенные близко друг к другу, являются окрестностями с аналогичными профилями, а точки, расположенные далеко друг от друга, имеют разные профили.
Карта переменных PCA называется нагрузкой. Мы можем интерпретировать карту нагрузки, оценивая углы между ними (лучше всего делать это на круговой карте загрузки, где эффекты переменных стандартизированы). Угол между векторами является аппроксимацией корреляции между переменными. Небольшой угол указывает, что переменные имеют положительную корреляцию, угол 90 градусов указывает, что переменные не коррелированы, а угол, близкий к 180 градусам, указывает на то, что переменные имеют отрицательную корреляцию.
================================================
(.env) boris@boris-All-Series:~/VOTING/PCA$ cat plottingPCA2.py
import pandas as pd
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
# Get the iris dataset
sns.set_style("white")
df = sns.load_dataset('iris')
# create figure
my_dpi=96
plt.figure(figsize=(480/my_dpi, 480/my_dpi), dpi=my_dpi)
# Keep the 'species' column appart + make it numeric for coloring
df['species']=pd.Categorical(df['species'])
my_color=df['species'].cat.codes
df = df.drop('species', 1)
# Run The PCA
pca = PCA(n_components=3)
pca.fit(df)
# Store results of PCA in a data frame
result=pd.DataFrame(pca.transform(df), columns=['PCA%i' % i for i in range(3)], index=df.index)
# Plot initialisation
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(result['PCA0'], result['PCA1'], result['PCA2'], \
c=my_color, cmap="Set2_r", s=60)
# make simple, bare axis lines through space:
xAxisLine = ((min(result['PCA0']), max(result['PCA0'])), (0, 0), (0,0))
ax.plot(xAxisLine[0], xAxisLine[1], xAxisLine[2], 'r')
yAxisLine = ((0, 0), (min(result['PCA1']), max(result['PCA1'])), (0,0))
ax.plot(yAxisLine[0], yAxisLine[1], yAxisLine[2], 'r')
zAxisLine = ((0, 0), (0,0), (min(result['PCA2']), max(result['PCA2'])))
ax.plot(zAxisLine[0], zAxisLine[1], zAxisLine[2], 'r')
# label the axes
ax.set_xlabel("PC1")
ax.set_ylabel("PC2")
ax.set_zlabel("PC3")
ax.set_title("PCA on the iris data set")
plt.show()
No comments:
Post a Comment