Menu
CoddyTech

Объяснённая дисперсия

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

Сколько сохранили 2 компоненты? На каждую компоненту приходится доля общего разброса — её объяснённая доля дисперсии. Для всех 13 компонент вина:

Столбцы для 13 компонент вина уменьшаются от 0.36 почти до 0, а оранжевая линия показывает их накопленную сумму, поднимаясь от 0.36 до 1. Она пересекает пунктирную линию 90% на компоненте 8

PCA() без n_components сохраняет их все. np.cumsum возвращает нарастающую сумму:

pca = PCA().fit(scaled)
ratio = pca.explained_variance_ratio_
print(ratio[:3].round(3))
total = np.cumsum(ratio)
print((total < 0.9).sum() + 1)

Это выводит [0.362 0.192 0.111] и 8: сумма всё ещё меньше 0.9, плюс компонент, который пересекает этот порог. Таким образом, двумерная карта вина сохранила 55%.

challenge icon

Задание

Средне

В шоколадной лаборатории измеряют 9 параметров каждой плитки. Сколько компонентов сохраняют 90% разброса? scaled готова.

  1. Обучи PCA() и возьми долю каждого компонента.
  2. Выведи, сколько компонентов достигают 90%.
  3. Нарисуй доли в виде столбцов на позициях 1, 2, 3..., с подписью each component; накопленную сумму — в виде линии с marker="o", с подписью running total; пунктирную серую линию на уровне 0.9; легенду. Покажи график.

Для другой лаборатории:

Components for 90%: 4

График с заголовком «Разброс, сохранённый каждым компонентом» для 7 компонентов: столбцы уменьшаются от 0.42, накопленная сумма растёт до 1 и пересекает пунктирную линию 0.9 на компоненте 4; есть легенда

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

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

# Лаборатория производителя шоколада: 9 измерений для каждой из 150 плиток
bars = pd.read_csv("chocolate.csv")
scaled = StandardScaler().fit_transform(bars)

fig, ax = plt.subplots()
ax.set_title("Spread Kept by Each Component")
ax.set_xlabel("Component")
ax.set_ylabel("Share of spread")

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

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

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

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