@ivodopyanov
NLP, python, numpy, tensorflow

Как правильно задать обучающую выборку для нейронной сети?

К примеру, есть такой набор данных для supervised learning, задача классификации:
Входные данные - это 20 дискретных параметров в диапазоне от 1 до 200. Каждое значение - это некоторый класс. Номера классов никак не связаны, т.е. отношения больше\меньше между ними нет, так что номера по сути ничего не значат. Сами параметры равноправные, разницы между первым и вторым тоже нет.
Выходные данные - это номер одного из этих 20 параметров, которые надо выбрать.
Аналогия - есть несколько игральных карт различного достоинства, и надо выбрать одну из них.

Входные данные
1) Могут быть непосредственно 20 значений в диапазоне 1-200.
2) Или это может быть разбиение по количеству классов среди входных переменных - т.е. это будет 200 параметров в диапазоне 1-20. Большинство из них будут равны 0, некоторые - 1, с очень небольшой вероятностью - 2 и более. Но тогда связей в сети получается куда больше.

И по выходным данным -
1) Это может быть 200 значений, номер выбранного класса. Но такое представление допускает нейронной сети сделать выбор класса, который не представлен во входных значениях.
2) Номер выбранного параметра. Но тогда перестановка входных значений может легко привести к иному результату, наверное.

Как же правильно представить такие данные?
  • Вопрос задан
  • 2941 просмотр
Решения вопроса 1
barmaley_exe
@barmaley_exe
Признаки (фичи) данных нужно представлять правильно. Математика сетей такова, что если Вы представляете признак числом, то наблюдения со значениями признака 5 и 4 будут "ближе", чем, например, 5 и 100. Но если признак — это идентификатор группы (т.н. категориальный признак) пользователя, то их числовая близость ничего не значит.

Аналогично с выходом. Если предсказывать одно число, то это эквивалентно предположению, что предсказать 21 вместо 20 не так страшно, как выдать 1000. Опять же, для категориальных признаков это неправда.

Итого, если вход состоит из 20 категориальных признаков, то каждый признак нужно заменить на множество новых, получаемых one-hot-кодированием (так же известным как dummy variables): для каждого значения такого признака создаётся новый признак-индикатор, равный 1 только если соответствующий признак данного наблюдения равен соответствующему значению.

Аналогично с выходом.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
begemot_sun
@begemot_sun
Программист в душе.
Тренировка НС - это из разряда искусства. Результат может быть лучшим при разных представлениях как входа, так и выхода.

Экспериментируйте.
Ответ написан
Комментировать
2ord
@2ord
Что-то намудрено с кодированием значений. Почитайте Применение нейронных сетей для задач классификации
и 2.2 Постановка задач с категориальными признаками
Да и, в целом, поищите на тему "Методы кодирования информации", про количественные и качественные признаки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы