Menu
CoddyTech

Сжимаем с помощью PCA

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

64 пикселя — это больше, чем нужно для цифр. Вместо количества компонент PCA может ориентироваться на долю дисперсии:

Растущая кривая доли дисперсии цифр, сохраняемой первыми n компонентами: сначала она круто поднимается, затем выравнивается; пунктирная линия на уровне 90% пересекает её на отметке 21 компонента

n_components=0.9 сохраняет минимальное число компонент, объясняющих 90%:

pca = PCA(n_components=0.9)
X_small = pca.fit_transform(X)
print(pca.n_components_, X_small.shape)

Это выводит 21 (1797, 21): треть чисел, большую часть изображения.

Здесь нет масштабирования: у каждого пикселя одна и та же единица измерения — значение чернил от 0 до 16. Масштабирование увеличило бы почти пустые пиксели по краям до полноценных признаков.

challenge icon

Задание

Средне

Пора уменьшить сканы. Программа считывает долю дисперсии, которую нужно сохранить, например 0.8.

  1. Выведите, сколько компонент PCA требуется для этой доли на необработанных пикселях, а затем на масштабированных пикселях.
  2. Оставьте вариант, которому требуется меньше компонент: выведите его название и форму сокращённых данных.

Для 0.6:

Raw pixels: 7 components
Scaled pixels: 11 components
Keep: raw pixels, shape (1797, 7)

С этого момента проект сохраняет 80% дисперсии.

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

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# Из Look at the Digits: 1,797 изображений по 64 пикселя, интенсивность от 0 до 16
digits = load_digits()
X = digits.data
y = digits.target

# Доля дисперсии, которую нужно сохранить, например 0.8
share = float(input())

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

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

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

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