Влияние масштабирования объекта на точность
Я работаю над классификацией изображений с использованием гауссовых моделей смесей. У меня около 34 000 объектов, принадлежащих к трем классам, все они лежат в 23-мерном пространстве. Я выполнил масштабирование функций как для данных обучения, так и для тестирования, используя различные методы, и я заметил, что точность фактически снижается после выполнения масштабирования. Я выполнил масштабирование объектов, потому что было много различий во многих функциях. Мне любопытно узнать, почему это происходит, я думал, что масштабирование функций повысит точность, особенно с учетом больших различий в функциях.
1 ответ
Я думал, что масштабирование объектов повысит точность, особенно учитывая большие различия в функциях.
Добро пожаловать в настоящий мир, приятель.
В целом, это правда, что вы хотите, чтобы функции были в одном и том же "масштабе", чтобы у вас не было функций, "доминирующих" над другими функциями. Это особенно актуально, если ваш алгоритм машинного обучения по своей природе "геометрический". Под "геометрическим" я подразумеваю, что он рассматривает выборки как точки в пространстве и опирается на расстояния (обычно евклидово /L2, как в вашем случае) между точками при составлении своих прогнозов, т. Е. Пространственные отношения точек имеют значение. GMM и SVM являются алгоритмами такого рода.
Однако масштабирование функций может привести к путанице, особенно если некоторые функции имеют категориальный / порядковый характер, и вы неправильно обработали их, когда добавили их к остальным функциям. Кроме того, в зависимости от метода масштабирования функции, наличие выбросов для конкретной функции также может испортить масштабирование функции для этой функции. Например, масштабирование "мин / макс" или "отклонение единицы" будет чувствительным к выбросам (например, если одна из ваших функций кодирует годовой доход или остаток денежных средств, и в вашем наборе данных есть несколько миль / миллиардеров).
Кроме того, когда вы сталкиваетесь с такой проблемой, причина может быть не очевидна. Это не означает, что вы выполняете масштабирование объектов, результат ухудшается, тогда ошибка масштабирования объектов ошибочна. Может случиться так, что ваш метод был испорчен с самого начала, и результат после масштабирования функции оказался просто более испорченным.
Так что может быть другой причиной (ами) вашей проблемы?
- Я полагаю, что наиболее вероятной причиной является то, что у вас много данных и недостаточно тренировочных образцов. Это связано с тем, что ваш GMM собирается оценивать ковариационные матрицы, используя данные, имеющие размерность 34000. Если у вас нет большого количества данных, скорее всего, одна или несколько ваших ковариационных матриц (по одной для каждого гауссиана) будут близки к единственному или единственному. Это означает, что предсказания вашего GMM бессмысленны с самого начала, потому что ваши гауссиане "взорвались", и / или EM-алгоритм просто отказался после заранее определенного числа итераций.
- Плохая методика тестирования. У вас не было данных, разделенных на надлежащие учебные / проверочные / тестовые наборы, и вы не выполнили тестирование должным образом. Какое "хорошее" выступление у вас в начале было не заслуживающим доверия. На самом деле это очень распространено, поскольку естественной тенденцией является тестирование с использованием обучающих данных, на которых была установлена модель, а не на проверочном или тестовом наборе.
Так что ты можешь сделать?
- Не используйте GMM для категоризации изображений. Используйте надлежащийконтролируемый алгоритм обучения, особенно если у вас есть известные категории изображений в качестве меток. В частности, чтобы избежать масштабирования объекта в целом, используйте случайный лес или его варианты (например, чрезвычайно рандомизированные деревья).
- Получите больше данных обучения. Если вы не классифицируете "простые" (то есть "игрушечные"/ синтетические изображения) или вы классифицируете их по нескольким классам изображений (например, <= 5. Обратите внимание, что это просто случайное небольшое число, которое я вытащил из воздуха). Вы действительно должны иметь много изображений в классе. Хорошей отправной точкой является получение не менее пары сотен на класс или использование более сложного алгоритма для использования структуры в ваших данных для достижения более высокой производительности.
По сути, моя точка зрения заключается в том, чтобы не (просто) относиться к области / алгоритмам машинного обучения как к черным ящикам и кучи трюков, которые вы запоминаете и пробуете наугад. Попробуйте понять алгоритм / математику под капотом. Таким образом, вы сможете лучше диагностировать проблемы, с которыми вы сталкиваетесь.
РЕДАКТИРОВАТЬ (в ответ на запрос о разъяснении @Zee)
Что касается статей, то единственное, что я могу вспомнить, - это "Практическое руководство по классификации опорных векторов" авторов LibSVM. Приведенные здесь примеры показывают важность масштабирования функций для SVM в различных наборах данных. Например, рассмотрим ядро RBF/Gaussian. Это ядро использует квадратную норму L2. Если ваши функции имеют разный масштаб, это повлияет на значение.
Также важно то, как вы представляете свои особенности. Например, изменение переменной, представляющей высоту от метров до сантиметров или дюймов, повлияет на алгоритмы, такие как PCA (поскольку отклонение в направлении для этой функции изменилось.) Обратите внимание, что это отличается от "типичного" масштабирования (например, min/max, Z и т.д.) в том, что это вопрос представительства. Человек все тот же рост, независимо от единицы. Тогда как типичная функция масштабирования "трансформирует" данные, что меняет "рост" человека. Профессор Дэвид Маккей на своей странице Amazon в своей книге " Теория информации для машинного обучения" прокомментировал этот вопрос, когда его спросили, почему он не включил PCA в свою книгу.
Для порядковых и категориальных переменных они кратко упоминаются в Байесовском обосновании машинного обучения, "Элементы статистического обучения". Они упоминают способы их кодирования как функции, например, для замены переменной, которая может представлять 3 категории, на 3 двоичные переменные, причем одна из них установлена на "1", чтобы указать, что образец имеет эту категорию. Это важно для таких методов, как линейная регрессия (или линейные классификаторы). Обратите внимание, что речь идет о кодировании категориальных переменных / функций, а не о масштабировании как таковом, но они являются частью настройки предварительной обработки функций и, следовательно, полезны для понимания. Больше можно найти в книге Hal Duame III ниже.
Книга "Курс машинного обучения " Хала Дуама III. Ищите "масштабирование". Одним из самых ранних примеров в книге является то, как он влияет на KNN (который просто использует расстояние L2, которое использует GMM, SVM и т. Д., Если вы используете ядро RBF/gaussian). Более подробная информация приведена в главе 4 "Машинное обучение на практике". К сожалению, изображения / сюжеты не отображаются в PDF. В этой книге один из самых приятных способов кодирования и масштабирования функций, особенно если вы работаете с Natural Language Processing (NLP). Например, см. Его объяснение применения логарифма к элементам (т. Е. Преобразование журнала). Таким образом, суммы журналов становятся журналом продукта функций, а "эффекты"/"вклады" этих функций сужаются логарифмом.
Обратите внимание, что все вышеперечисленные учебники можно бесплатно загрузить по вышеуказанным ссылкам.