Вернуться на страницу brain2net: https://brain2net.ru/post/analiz-glavnyh-komponent-pca/

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

In [66]:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
In [7]:
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
# Загружаем набор данных cancer
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()
In [3]:
# Масштабируем данные
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(cancer.data)
X_scaled = scaler.transform(cancer.data)
In [4]:
from sklearn.decomposition import PCA
# оставляем первые две главные компоненты
pca = PCA(n_components=2)
# подгоняем модель PCA на наборе данных breast cancer
pca.fit(X_scaled)
Out[4]:
PCA(copy=True, iterated_power='auto', n_components=2, random_state=None,
    svd_solver='auto', tol=0.0, whiten=False)
In [5]:
# преобразуем данные к первым двум главным компонентам
X_pca = pca.transform(X_scaled)
print("Форма исходного массива: {}".format(str(X_scaled.shape)))
print("Форма массива после сокращения размерности: {}".format(str(X_pca.shape)))
Форма исходного массива: (569, 30)
Форма массива после сокращения размерности: (569, 2)
In [44]:
df_X = pd.DataFrame(X_scaled)
In [45]:
list_param = list(df_X.columns)
In [46]:
df_X['class'] = cancer.target
In [49]:
df_X0 = df_X[df_X['class'] == 0].copy()
df_X1 = df_X[df_X['class'] == 1].copy()
df_X0.drop(['class'], axis='columns', inplace=True)
df_X1.drop(['class'], axis='columns', inplace=True)
In [52]:
X0_pca = pca.transform(df_X0.values)
X1_pca = pca.transform(df_X1.values)
In [56]:
# строим график первых двух главных компонент, классы выделены цветом
plt.figure(figsize=(8, 8))
plt.plot(X0_pca[:, 0], X0_pca[:, 1],'bo')
plt.plot(X1_pca[:, 0], X1_pca[:, 1],'co')
#plt.plot(X_pca[:, 0], , cancer.target)
plt.legend(cancer.target_names, loc="best")
plt.gca().set_aspect("equal")
plt.xlabel("Первая главная компонента")
plt.ylabel("Вторая главная компонента")
plt.grid()

Главные компоненты могут быть сохранены в атрибуте components_ объекта PCA в ходе подгонки

In [57]:
print("форма главных компонент: {}".format(pca.components_.shape))
форма главных компонент: (2, 30)

Каждая строка в атрибуте components соответствует одной главной компоненте и они отсортированы по важности (первой приводится первая главная компонента и т.д.). Столбцы соответствуют атрибуту исходных признаков для объекта PCA в этом примере, «mean radius», «mean texture» и т.д. Давайте посмотрим на содержимое атрибута components:

In [58]:
print("компоненты PCA:\n{}".format(pca.components_))
компоненты PCA:
[[ 0.21890244  0.10372458  0.22753729  0.22099499  0.14258969  0.23928535
   0.25840048  0.26085376  0.13816696  0.06436335  0.20597878  0.01742803
   0.21132592  0.20286964  0.01453145  0.17039345  0.15358979  0.1834174
   0.04249842  0.10256832  0.22799663  0.10446933  0.23663968  0.22487053
   0.12795256  0.21009588  0.22876753  0.25088597  0.12290456  0.13178394]
 [-0.23385713 -0.05970609 -0.21518136 -0.23107671  0.18611302  0.15189161
   0.06016536 -0.0347675   0.19034877  0.36657547 -0.10555215  0.08997968
  -0.08945723 -0.15229263  0.20443045  0.2327159   0.19720728  0.13032156
   0.183848    0.28009203 -0.21986638 -0.0454673  -0.19987843 -0.21935186
   0.17230435  0.14359317  0.09796411 -0.00825724  0.14188335  0.27533947]]

Построение "тепловой карты" главных компонент

In [59]:
plt.matshow(pca.components_, cmap='viridis')
plt.yticks([0, 1], ["Первая компонента", "Вторая компонента"])
plt.colorbar()
plt.xticks(range(len(cancer.feature_names)),
cancer.feature_names, rotation=60, ha='left')
plt.xlabel("Характеристика")
plt.ylabel("Главные компоненты")
Out[59]:
Text(0, 0.5, 'Главные компоненты')

Вернуться на страницу brain2net: https://brain2net.ru/post/analiz-glavnyh-komponent-pca/

In [ ]: