Menu
CoddyTech

PCA

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 26 из 51.

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

Масштабированные винные близнецы в виде облака, поднимающегося вправо, с двумя красными стрелками из центра: длинная — компонента 1 — направлена вдоль облака, а короткая — компонента 2 — поперёк него

Тени каждой строки на первых нескольких компонентах становятся её новыми признаками:

from sklearn.decomposition import PCA
scaled = StandardScaler().fit_transform(X)
points = PCA(n_components=2).fit_transform(scaled)
print(X.shape, points.shape)

Для всех 13 показателей вина это выводит (178, 13) (178, 2).

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

Две карты PCA для 178 вин. Слева — без масштабирования: три сорта перекрываются и сливаются в одно пятно. Справа — сначала выполнено масштабирование: три чёткие группы

challenge icon

Задание

Средне

В лаборатории исследуют бутылки с водой из трёх источников: по 8 измерений для каждой. Может ли карта в 2D различить источники? draw_springs(ax, points) окрашивает любые точки в 2D в зависимости от источника.

  1. Масштабируй X, затем сократи его до 2 компонентов с помощью PCA, получив points.
  2. Выведи количество признаков до и после преобразования.
  3. Нарисуй точки с помощью draw_springs и покажи график.

Для другой лаборатории, где проводят 6 измерений:

From 6 features to 2

График с заголовком «Воды из источников в 2D»: первый компонент по горизонтали, второй — по вертикали; бутылки из альпийского источника внизу слева, из вулканического — внизу справа, из прибрежного — вверху; показана легенда

Coddy описывает твою карту.

Попробуйте сами

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

# Лаборатория анализа воды: 8 измерений для каждой из 120 бутылок из трёх источников
waters = pd.read_csv("waters.csv")
X = waters.drop(columns="spring")


# Отображает точки в 2D, по одной группе для каждого источника, с легендой
def draw_springs(ax, points):
    for spring in ["alpine", "volcanic", "coastal"]:
        rows = (waters["spring"] == spring).to_numpy()
        ax.scatter(points[rows, 0], points[rows, 1], s=16, label=spring)
    ax.legend()


fig, ax = plt.subplots()
ax.set_title("Spring Waters in 2D")
ax.set_xlabel("First component")
ax.set_ylabel("Second component")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python