Здесь, в компьютерном зрении, мы увидим проблему классификации. Классификатор - это система, которая вводит (обычно) вектор дискретных и / или непрерывных значений признаков и выводит одно дискретное значение - класс. Например, спам-фильтр классифицирует сообщения электронной почты на «спам» или «не спам».

Алгоритм машинного обучения состоит из комбинации всего трех компонентов.

Обучение = представление + оценка + оптимизация

Представление - классификатор должен быть представлен на каком-то формальном языке, с которым может работать компьютер. Итак, как представить ввод, т.е. какие функции использовать.

Оценка - функция оценки (также называемая целевой функцией или функцией оценки) необходима, чтобы отличать хорошие классификаторы от плохих.

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

Компьютер видит изображение как матрицу строк и столбцов с информацией. Каждый номер в строке и столбце - это информация о пикселях в этом конкретном месте. Задача классификации изображений состоит в том, чтобы предсказать одну метку (или распределение по меткам, как показано здесь, чтобы показать нашу уверенность) для данного изображения.

Классификация изображений. Мы видели, что задача классификации изображений состоит в том, чтобы взять массив пикселей, представляющий одно изображение, и присвоить ему метку.

2 способа сравнения изображений - расстояние L1 и расстояние L2.

L1 - Мы сравниваем 2 изображения пиксель за пикселем и складываем разницу. Если 2 изображения являются векторами I1 и I2, то

L2 - Другой распространенный способ вычисления расстояния - L2. Которая имеет геометрическую интерпретацию вычисления евклидова расстояния между двумя векторами. Расстояние принимает вид:

k - Классификатор ближайшего соседа. Идея состоит в том, что вместо поиска единственного ближайшего изображения в обучающем наборе мы найдем k самых близких изображений и попросим их проголосовать за метку тестового изображения. Более высокие значения k имеют эффект сглаживания, что делает классификатор более устойчивым к выбросам:

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

Разделите обучающий набор на обучающий набор и набор для проверки. Используйте набор проверки для настройки всех гиперпараметров. В конце запустите тестовый набор за один раз и сообщите об эффективности.

Перекрестная проверка - если набор данных очень мал, мы используем перекрестную проверку. Это более сложный метод настройки гиперпараметров. Идея состоит в том, что вместо произвольного выбора первых 1000 точек данных в качестве набора для проверки и набора для обучения отдыха, вы можете получить лучшую и менее шумную оценку того, насколько хорошо работает определенное значение k, повторяя различные наборы проверки и усреднение производительности по ним. Например, при 5-кратной перекрестной проверке мы разделим обучающие данные на 5 равных частей, используя 4 из них для обучения и 1 для проверки. Затем мы перебираем, какая кратность является проверочной, оцениваем производительность и, наконец, усредняем производительность для разных складок.

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

Разработка функций. В конце концов, некоторые проекты машинного обучения успешны, а некоторые - нет. В чем разница? Несомненно, наиболее важным фактором являются используемые функции. Если у вас есть много независимых функций, каждая из которых хорошо соотносится с классом, учиться легко. С другой стороны, если класс представляет собой очень сложную функцию функций, вы не сможете его изучить. Часто это также одна из самых интересных частей, где интуиция, креативность и «черное искусство» так же важны, как и технические детали.

Всегда начинайте с простого (например, наивный байесовский метод перед логистической регрессией, k-ближайший сосед перед машинами опорных векторов).

Использованная литература :-