В предыдущей статье мы узнали о предсказании чисел по изображению 28x28. Мы использовали набор данных mnist, который содержал функции в качестве интенсивности этих 28x28 (784) пикселей и метки в качестве фактического числа, которое они представляют.

У меня есть вопрос. а если изображение 280х280 пикселей? Как вы думаете, наша модель научилась бы так же быстро, как раньше? Или если изображение было 5X5 пикселей? будет ли наша модель так же хороша в прогнозировании?

Давайте рассмотрим простое упражнение. ниже фотография Авраама Линкольна в довольно хорошем разрешении. вы можете рассмотреть каждую его черту в деталях и решить, что да, это действительно Линкольн.

Теперь мы пикселизируем это изображение и удаляем некоторые, ну, многие функции. Изображение размыто AF, но есть одна вещь. Посмотрите на пикселизированное изображение с открытыми глазами, узкими, как щелочка. Бьюсь об заклад, вы можете увидеть Линкольна ниже, несмотря на разрешение, настроенное на кирпичи.

Хлопайте, если опознаете, но почему так?

Что ж, первое изображение содержит множество признаков, очевидно, что большинство из них коррелируют друг с другом или не нужны. Пиксельное изображение отражает суть изображения с высоким разрешением, комбинируя или удаляя ненужные функции до такой степени, что мы, как предсказатели, можем принять решение.

Что произойдет, если мы отбросим все больше и больше функций? Давайте посмотрим, сможете ли вы предсказать, что изображено на изображении ниже.

Здесь мы беззастенчиво пикселизировали одно и то же изображение до такой степени, что важные черты теряются. Теперь это выглядит как снимок из 8-битной игры, и как предсказатели мы можем озадачиться, хотя это одно и то же изображение.

Уменьшение размерности NoBS

Опустив на время технические детали и математику, простое определение уменьшения размерности состоит в том, чтобы увидеть, как наш набор данных может быть представлен некоторой комбинацией исходных функций, чтобы наша модель все еще могла предсказывать результат с требуемой эффективностью. Давайте посмотрим на это на нашем примере распознавания изображений с использованием метода под названием Анализ основных компонентов.

Как и раньше, мы могли получить данные MNIST из этого источника или загрузить их напрямую с помощью следующего кода.

После загрузки давайте посмотрим, как выглядят эти данные.

Здесь кажется, что у нас есть Данные в виде пиксельной матрицы и целевого соответствующего числа.

Мы знаем, что в предыдущем наборе данных было 70 000 изображений и 70 000 меток, причем изображения хранятся в формате 28 x 28 пикселей (784).

Давайте разделим набор данных на тестовые и обучающие наборы:

Следующий шаг — нормализовать наши функции, что совершенно необходимо для PCA.

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

Выполнение PCA для ненормализованных переменных приведет к безумно большим нагрузкам для переменных с высокой дисперсией. В свою очередь, это приведет к зависимости главной компоненты от переменной с высокой дисперсией. Это нежелательно.

(Простите гневный красный текст. Это совершенно безвредно). Обратите внимание, что мы подгоняем скейлер только к тренировочному набору и преобразуем как тестовый, так и тренировочный наборы, используя одно и то же соответствие. Зачем? потому что тестовые данные практически неизвестны модели, и мы не хотим, чтобы какая-либо подгонка имела какое-либо отношение к тесту. Тест должен быть сюрпризом. не так ли?

Теперь перейдем к PCA. Ниже мы настраиваем наш экземпляр PCA, чтобы сохранить как можно больше функций, чтобы общая потеря дисперсии не превышала 10%.

Помните, как наши первоначальные обучающие и тестовые данные имели 784 функции? Давайте посмотрим, сколько функций мы свели.

и вуаля! теперь у нас есть 233 признака вместо 784, что делает наши расчеты намного проще, а нашу модель более эффективной. мы увидим, если это так же эффективно.

Вот краткий обзор финальной тренировки и набора тестов после PCA.

Пришло время протестировать нашу декомпозицию PCA.

Мы будем использовать ту же логистическую регрессию — модель lbgfs, что и в логистической регрессии noBS.

Посмотрим, сможет ли он правильно предсказать. Я могу случайным образом предсказать 303-ю тестовую строку X и сравнить ее с ее меткой Y.

Кажется законным.

Мы почти закончили, но прежде чем делать какие-либо выводы, давайте сравним точность нашей модели и сравним ее с простой логистической регрессией БЕЗ PCA (91,3%)

Что ж, наша модель PCA — логистическая регрессия имеет такую ​​​​же точность, что и только логистическая регрессия, даже после сокращения до 233 функций из 784. Реальное влияние заключается в разнице между временем, затрачиваемым этими двумя подходами.

Для обучения модели только логистической регрессии требуется ~45 секунд, тогда как после применения PCA это заняло примерно 12 секунд без какого-либо влияния на точность.

Прохладный. Не так ли?