Особенности построения и нормализации в машинном обучении


13

Допустим, я хочу создать классификатор логистики для фильма М. Мои особенности будут примерно такими, как возраст человека, пол, род занятий, местоположение. Так что тренировочный набор будет примерно таким:

  • Возраст Пол Род занятий Расположение Нравится (1) / Не нравится (0)
  • 23 M Software США 1
  • 24 F Doctor UK 0

и так далее ... Теперь у меня вопрос, как мне масштабировать и представлять свои особенности. Один способ, которым я думал: разделите возраст по возрастным группам: 18-25, 25-35, 35 лет и старше, пол как M, F, местоположение как США, Великобритания, другие. Теперь создайте двоичный элемент для всех этих значений, поэтому возраст будет иметь 3 двоичных элемента, каждый из которых соответствует возрастной группе, и так далее. Таким образом, 28-летний мужчина из США будет представлен как 010 10 100 (010-> Возрастная группа 25-35, 10 -> Мужской, 100 -> США)

Что может быть лучшим способом для представления функций здесь? Кроме того, я заметил в некоторых e.gs. из sklearn, что все функции были каким-то образом масштабированы / нормализованы, например, пол представлен двумя значениями, 0,0045 и -0,0045 для мужчин и женщин. Я понятия не имею, как сделать масштабирование / мормализацию, как это?


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

Вы, конечно, не хотите классифицировать возраст. Как измеряется «рейтинг фильма»? Это шкала от 1 до 10, «нравится / не нравится» или как?
Питер Флом - Восстановить Монику

Для простоты предположим, что есть только два класса, Like и Dislike. Как быть 1 и не нравится быть 0. Изменили формулировку проблемы, чтобы отразить это.
снежный барс

Ответы:


15

Двоичный случай

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

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

  • 00001 для США
  • 00010 для Великобритании
  • 00100 для Азии
  • 01000 для Европы
  • 10000 для других

Для кодирования действительного / целочисленного элемента термометра вы должны выбрать длину и пороговые значения. Для вашего примера возраста вы решили разделить возраст в соответствии с пороговыми значениями 18, 25 и 35. Код будет

  • 000 для 0-17
  • 001 для 18-25
  • 011 для 25-34
  • 111 для 35-выше

00010UК01130Yо

Непрерывный случай

00010UК3030Yо

Как сказал BGreene, вам следует нормализовать это значение, чтобы сохранить среднее значение 0 и стандартное отклонение 1, что обеспечивает стабильность многих регрессионных моделей. Чтобы сделать это, просто вычтите эмпирическое среднее и разделите на эмпирическое стандартное отклонение.

Y_normalized = ( Y - mean(Y) ) / std(Y)

(30-25)/10знак равно0,5

00010UК0,530Yо

Круто ... так скажем, у нас есть пример человека следующим образом: Страна: Великобритания, Возрастная группа: 25-34. Это приведет к значениям Страна: 2 , Возрастная группа: 4, если мы используем одну горячую кодировку. Теперь при создании вектора объектов мы должны их нормализовать. Итак, допустим, они равны 0,4 и 0,6, тогда наш вектор входных признаков для модели по существу становится [0,4, 0,6], правильно?
snow_leopard

хм ... если я использую "одну горячую" кодировку, я должен преобразовать значение кодирования в его целочисленное представление как функцию, например, 0010 становится 2. ИЛИ мне следует рассматривать это как набор из 4 функций, из которых только одна будет включена? В первом случае разве не вводится понятие, что 1000 дальше к 0001, а затем к 0100, что, возможно, не является намерением, поскольку мы не хотим, чтобы значение характеристики США было ближе к значению характеристики Великобритании, чем значение Азии или что-то еще?
snow_leopard

Я отредактировал свой ответ, чтобы уточнить эти моменты. Вам не нужно нормализовать двоичные объекты, и вы должны рассматривать их как вектор, а не конвертировать их в целое число.
Эмиль

Действительно полезное и кристально чистое объяснение. Благодарность!
Джордж Лю
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.