Pull to refresh

Comments 12

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

Можно пожалуйста подробнее о том как работать имея небольшое количество размеченных данных и большое количество неразмеченных данных?
И второй вопрос который пришел сегодня в голову. Как быть и можно ли что-то придумать если данные размечены некачественно. Положим требования к параметрам для попадания в какую-либо категорию менялись из года в год с ростом бизнеса и изменением внешних факторов.
Можно пожалуйста подробнее о том как работать имея небольшое количество размеченных данных и большое количество неразмеченных данных?

Смысл в том что бы использовать понижение размерности.
Можно использовать классический PCA, но лучше использовать автокодировщики. Автоэнкодеры умеют улавливать нелинейность в данных, а не просто удалять компоненты с минимальной дисперсией.
Как это работает.
Берём большой набор неразмеченных данных. Строим автоенкодер. Автоенкодер принимает на вход вектор всех ваших фич и даёт вектор небольшой размерности 10-30. Результат работы автокодировщика добавляется к фичам.
Автокодировщик можно строить разными способами. Тут сложно дать какие то универсальные рекомендации.
Я обычно использую автокодировщики с 4-мя скрытыми слоями. Что-то вроде такого:


Input -> H1 -> relu -> H2  ->  tanh ->
H3 -> tanh H4  -> relu -> Output

Функции активации могут быть другими. Всегда есть relu, а его расположение может меняться.
Вторую половину выкидываю и выход после H2 -> tanh беру как выход автокодировщика.
Можно понижать размерность в несколько этапов.
Допустим так 3000 -> 2100 -> 1000 -> 15
Причина поэтапного понижения размерности в том, что из-за затухания градиентов, вы не можете сделать автокодировщик сразу слишком глубоким.
Какие-то универсальных рекомендаций дать не могу. Нужно экспериментировать.


При использовании автоэнкодера нужно учитывать следующие нюансы:
1) Автокодировщик находит внутренние закономерности. Его выход невозможно объяснить. Это просто какой-то вектор. Как его интерпретировать не понятно.
2) Автокодировщик теряет информацию. Поэтому строить прогноз только на его выводе нельзя. Чем сильнее понижается размерность, тем больше информации он теряет.
3) Если понижать размерность поэтапно, то каждый следующий автокодировщик будет иметь намного меньшую ёмкость по сравнению с предыдущим.
Рассчитывать этапы понижения нужно с учётом ёмкости каждого автокодировщика и объёма имеющихся неразмеченных данных.


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


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

Вот это сложный для меня вопрос. Реальные данные часто грязные. Как быть не знаю. Пытаться исправить качество разметки, разве что. Самому интересно, есть ли какие то рецепты на этот счёт.

Вот один из моих примеров понижения размерности автокодировщиком:
3039 -> 213 -> 56 -> 15
Если в конец добавить ещё 15 -> 3 то можно визуализировать результат и посмотреть распределение.


Что-то такое
Спасибо за столь развернутый ответ, было интересно.
В целом осталось непонятно(простите может еще просто не проснулся) как это помогает с неразмеченными данными?
Ну, то есть, да, мы понизили размерность. А что дальше?
То есть, у нас есть, предположим, 1000 примеров с ответами и еще 100к примеров без ответов. Я могу натравить автоэнкодер на все и получить доп фичи, это понятно.
То есть, у нас есть, предположим, 1000 примеров с ответами и еще 100к примеров без ответов. Я могу натравить автоэнкодер на все и получить доп фичи, это понятно.


Полагаю, нужно выкинуть немалую часть старых фич и использовать извлечённые автоэнкодером.
Тогда действия выходят следующими:
  • обучае автоэнкодер на неразмеченной части выборки
  • применяем его к размеченной
  • пытаемся в обучение с учителем уже не на, например, 10000 исходных признаков, а на, условно говоря, сотне извлечённых энкодером


Но это моё мнение дилетанта, который даже не особо учится :-)
Если у вас большие разбросы в диапазоне значений, обязательно логарифмируйте параметры.

Вот это очень хороший совет. Можете еще что-нибудь посоветовать по этому поводу? Т.е. интересно было бы знать, какие фичи нужно использовать при анализе данных.
какие фичи нужно использовать при анализе данных

Собственно, статья об этом.
Логарифм хорошо использовать, когда значения переменной отличаются на порядки. В этом случае, логарифм будет характеристикой порядка.
Если есть периодичность, тригонометрические функции. Можно использовать преобразование Фурье, вейвлеты, дискретное косинусное преобразование и т.п.
Иногда данные можно представить в виде дерева. Обработка деревьев — это вообще отдельная тема. На деревьях много фич появляется. Про них можно отдельную статью писать.
Если есть какой-то текст, то тоже можно много дополнительной информации вытащить. По частотам, по группам слов и т.п.

Спасибо большое, будем изучать
Для меня самым интересным и наглядным общедоступным примером feature engeneiring является задача Титаника. Можно просто почитать готовые работы на кегле и понять всю суть этого процесса — сколько всего полезного можно извлечь из простых, казалось бы, данных + заполнить пропуски одних параметров на основании других.
А можно чуть подробнее? либо ссылочку:)
Sign up to leave a comment.

Articles