Как стать автором
Обновить

Комментарии 28

После предыдущих статей очень нужный шаг! А то в соревновании после формирования двух десятков признаков в итоге остался целый один, улучшающий прогноз)

А что насчет Boruta (например) для отбора признаков? Применяли ли вы, как зашло?


Надо понимать, что pytesseract – далеко не панацея:

Что ж делать-то в таком случае? Куда копать?

Boruta не пробовал, посмотрю, спасибо!
Если нужно распознать много текста, можно пробовать или обучать/файнтюнить отдельную сеть под эту задачу, или поискать внешний API с качеством выше, чем у pytesseract.

Еще интересный прием отбирать признаки через xgbfir, анализируя натренированную модель xgboost.

А какие есть эффективные способы выбора/сокращения признаков для high-dimensional sparse данных (bag of words)?

PCA неплохо работает.

PCA ведь построит линейные комбинации слов, что портит интерпретируемость.

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

Из-за большого количества фичей время подбора гиперпараметров даже для простой логистической регрессии и бэггинга становится огромным. Как с этим быть? Вообще под high-dimensional sparse данными я подразумевал не только тексты, а любые варианты bag of something. Любые категориальные фичи имеющие большое количество значений.

Под разреженными уже подразумевают не категориальные, а количественные (или бинарные).
Если и логит долго работает, то надо на vowpal wabbit переходить. Или хотя бы вначале на SGD.
А то что бэггинг долго работает — это само собой.

о каком количестве фичей речь, что это вызывает проблемы даже для лог.регрессии?
в случае с bag of something, можно обрубить длинный хвост совсем редких признаков, качество обычно не страдает.
Скажем, на выходе после кодирования словаря получается 50000 фичей. А что есть редкость признака? По идее редкие признаки, принимающие положительные значения для целевого класса, наоборот могут сильно помогать при классифицировать.
Если слово слишком редкое, есть шанс оверфитнуться. Впрочем, зависит от задачи — например, в поисковом ранжировании рубить хвост нельзя, а в определении тональности текста — скорее можно.

Я не вижу нерешаемой проблемы подобрать оптимальную регуляризацию для логрега на 50к фичей. Впрочем, как уже упоминал yorko, об этом будет отдельный текст.
hashing trick неплох

еще вариант перейти к векторному представлению — просуммировать вектора слов, с весами или без

в-общем, про хэширование, стохастическую оптимизацию и vowpal wabbit скоро будет статья.

> Профессиональный несмешной юмор

Обожаю профессиональный юмор. Он приоткрывает секреты профессии.
Продублирую сюда: похоже в 27 строке скрипта ошибка:
('pets', lambda x: "pets" in x or "pet" in x or "dog" in x or "cats" in x and "no_pets" not in x),
Последний and действует только на or «cats». Возможно нужно взять все or'ы в скобки, чтобы and действовал на все сразу, будет логичнее.
верно, спасибо!

Я заслужил бонусный балл? ;)

Python 2.7 Anaconda.

Не работает tensorflow, пишет что не поддерживается. (без него пример с Keras не работает).
Обязательно ставить 3-й Питон? Если поставлю, не потеряю в работоспособности других библиотек?

Также pytesseract не работает. Выдает ошибку. Хотя сам tesseract установлен.
Можно попробовать использовать Theano в качестве бэкенда для Keras.
Он стоит, но почему-то Keras его не воспринимает.
Может его надо поставить в Анаконде не в root, а в окружение tensorflow??

Кстати, для тех, у кого проблемы тоже, pytesseract заработал после множества попыток — как я понял, после того, как дал ВСЕМ ПОЛНЫЙ доступ к папке tesseract-ocr
Спасибо за статью. Показалось простовато, слишком прямолинейные и интуитивные подходы, хотелось бы что-то поинтереснее. Например, xgboost может работать с пропущенным данными без какой-либо обработки, хотелось бы узнать как он это делает. Или например, что делать, если категориальный признак принимает 10000 значений?
Все-таки первая часть курса рассчитана на тех, кто начинает с нуля. Альтернативные способы кодирования категориальных признаков — интересная тема, но требующая уже какого-то опыта. Надеюсь, во второй части курса доберемся.

Как раз 2 из 3 следующих статей — это vowpal wabbit (что делать, когда у категориального признака 10000 уник значений — хэшировать) и бустинг

Новый запуск курса – 5 февраля 2018 г. Регистрация не требуется, но чтобы мы о вас знали, заполните форму. Главные новости будут в группе ВКонтакте, а жизнь во время курса будет теплиться в Slack OpenDataScience (вступить) в канале #mlcourse_open.

Новый запуск – 1 октября 2018 г., на английском. Подробности – тут.

Теперь курс можно проходить и самостоятельно – появились демо-версии заданий с решениями. Они описываются в конце каждой статьи, но есть и общий cписок. Решения доступны после отправки соотв. веб-формы.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий