PCA
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 26 из 51.
PCA находит направление наибольшего разброса, затем лучшее направление под прямым углом к нему и так далее: компоненты. На примере винных близнецов:
Тени каждой строки на первых нескольких компонентах становятся её новыми признаками:
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 ориентируется на разброс, поэтому признак с большими единицами измерения, например содержание пролина, измеряемое сотнями, выигрывает только за счёт масштаба:
Задание
СреднеВ лаборатории исследуют бутылки с водой из трёх источников: по 8 измерений для каждой. Может ли карта в 2D различить источники? draw_springs(ax, points) окрашивает любые точки в 2D в зависимости от источника.
- Масштабируй
X, затем сократи его до 2 компонентов с помощью PCA, получивpoints. - Выведи количество признаков до и после преобразования.
- Нарисуй точки с помощью
draw_springsи покажи график.
Для другой лаборатории, где проводят 6 измерений:
From 6 features to 2Coddy описывает твою карту.
Попробуйте сами
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")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python