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

Уверенный пользователь ЭВМ

Отправить сообщение
ISPmanager действительно не очень удобная панель, вспоминаю как мучался с ней лет 7 назад, когда она была на пике популярности. Странно, что нормальных аналогов до сих пор никто не придумал.
То, что вы показывайте, это всего лишь функция потерь, которая будет минимизироваться. Да она названа неудачно, но поверьте, даже сам Тянки Чен не будет называть классификацию лог. регрессией. Не стоит придавать новый смысл термину, которому уже более 50 лет.

С большой натяжкой его можно здесь употреблять, но так никто не делает, чтобы не вводить людей в заблуждение. Для эксперимента можете поискать статьи на arxiv или просто погуглить употребление logistic regression, а ещё лучше погуглить gbm и LR сразу вместе.
Не встречал такого понятия, как задача логистической регрессии. Есть задача классификации, которая может решаться лог. регрессией.
То что, вы увидели «binary:logistic», совсем не означает что это логистическая регрессия, просто авторы решили это так назвать.
Если мне не изменяет память, то в теории машинного обучения это называется logitboost, где всеголишь используется logistic loss.
Да, здесь есть общие моменты, но смысл совсем разный, никто не называет проблемы классификация с помощью бустинга на деревьях лог. регрессиями.
Не увидел в статье логистической регрессии. Вы путайте понятия.
Дело всё в том, что быстро определить протокол прикладного уровня по шаблону, коих могут быть тысячи — задача очень ресурсоёмкая.

А почему вы считайте Random Forest эффективным? С каждым новым классом сложность будет расти, а точность будет падать. Т.к. используется one vs rest, то считайте что для 100 классов у вас будет 100 отдельных моделей.

К тому же на реальной задаче 27 деревьев это очень мало, вы точность кросс-валидацией проверяли?
Ну и тренировать на данных, которые получены только от одного компьютера — неправильно.
Уверен, что на реальной задаче результаты будут совсем другими.
Сергей, Вы бы лучше рассказали об итогах вашего «гениального» конкурса.
Нормально инфопродукт Ваш стрельнул, после такого пиара? :)
Что я имею в итоге:

За месяц мне не удалось получить никакой информации, после 4х попыток связаться с билайном — везде проигнорировали, на половине разговора. Даже обращение через пресс-службу не помогло.

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

Точность (accuracy) по всем классам:

Class       Accuracy      Samples
0       0.0                 337
1       0.410478128179      1966
2       0.824638233054      15756
3       0.826054009369      14516
4       0.769907181241      10235
5       0.687837586143      5369
6       0.545853926414      1821

То, что мне нарисовали в итоговой таблице — это не моё итоговое решение, я просмотрел все логи и перепроверил 5 последних решений на точность.

Выводы делайте сами.
А разницы нету практически, ваш вариант обычно немного лучше работает, чем dummy. Если увеличивать глубину деревьев, то в итоге получится переобучение.
Спасибо за пост, очень актульно, как раз сейчас на kaggle проходит конкурс по машинному обучению, где нужно спрогнозировать осадки по замерам с датчиков.
Я в нём участвую, возможно после прочтения у меня появятся новые идеи как улучшить мой результат :).
Увидел что билайн все-таки выложил фаил с ответами, вот какие результаты получились, первый столбец это классы:
             precision    recall  f1-score   support
          0       0.00      0.00      0.00       337
          1       0.65      0.41      0.50      1966
          2       0.81      0.82      0.81     15756
          3       0.77      0.83      0.80     14516
          4       0.75      0.77      0.76     10235
          5       0.72      0.69      0.70      5369
          6       0.76      0.55      0.64      1821

avg / total       0.76      0.77      0.76     50000

Сплит по файлам там не указали, точность по всему файлу получилась 0.76716. Попробовал сделать 100 случайных сплитов на 0.3/0.7, точность ниже 0.767 не опускается.

Кто виноват? Я точно помню какой фаил последний загружал :).
Я даже видел таблицу, с надписью финальный рейтинг, где я был первый, но верить ей не стал, учитывая предыдущие проблемы с организацией конкурса.
Кратко, как я лоханулся и поверил публичному лидерборду :). В публичном я находился на отметке в 77.41, т.е. в топ 3 в таблице последнего дня, а в итоговом улетел далеко вниз.

Сделал 3 разных датасета:
1) В первом категориальные поля с большим кол-вом категорий были удалены, остальные были закодированы в бинарные фичи. У числовых переменных удалялись выбросы, а некоторые из них проходили через разнообразные преобразования.
2) Второй набор был оптимизирован для линейных моделей, от большинства которых, в итоге я отказался. На кроссвалидации в 5 проходов обычная логистическая регрессия показывала точность порядка 75.8.
3) В третем датасете все категориальные переменные были прогнаны через лассо регрессию, а их результаты использовались в качестве фичей. Это стандартная практика, т.к. модели на основе деревьев неспособны нормально воспринимать большие категориальные переменные.

На основе 2х xgboost моделей и одной randomforest с помощью первого датасета мне удалось получить 77.11.

Далее я решил попробовать stacking, эту технику давно хотелось изучить, а тут как раз повод появился.
После череды неудачных тестов я почти забросил эту идею, но в конце решил попробовать в качестве мета модели SVM и сразу же получил 77.21. Стандартным выбором для мета моделей обычно является логистическая регрессия, GBM, Knn или нейронная сеть. Все эти методы показывали достаточно неплохие результаты на моей кроссвалидации, но получали 76.7-76.9 в паблик таблице. Knn был очень нестабильный, но в самом конце он смог показать 77.27 на лидерборде. Логика говорила, что svm в качестве мета модели не может быть круче GBM, но я ей не поверил :)

C SVM все было наоборот, на кроссвалидации он показывал себя немного хуже. На этом моменте у меня закралась мысль, что тестовый датасет существенно отличается от того, на котором приходится тренировать модель или промежуточные 30% имеют перекос в сторону какого-то класса. Проверять это мне было лень, т.к. участие в конкурсе уже поднадоело, поэтому я взял запылившийся купон на 300$ для сервиса облачных вычислений и запустил сотни экспериментов на уже имеющемся у меня «фреймворке» :).

После 5 дней работы 16ти ядерного сервера я получи примерно такую модель, которая давала 77.41:


Как я уже писал выше, такой метод называется stacking, это очень популярный подход на kaggle, kddcup и т.д. Суть его достаточно проста, предсказания моделей на предыдущей уровне являются фичами для модели на следующем, в моём случае для SVM. Предсказания используются либо в обычном виде, либо в виде вероятности для каждого класса, я использовал второй подход. Чтобы не переобучить модели на первом уровне я делил обучающую выборку на две части и обучал попеременно (2-fold cv).

Плюс этого метода состоит в том, что те модели, которые слабые сами по себе и в одиночку дают точность ниже 60% могут сильно улучшить итоговые результат, если их использовать при стекинге.

После сотен автоматических экспериментов, о которых я писал выше, мне удалось найти достаточно простое решение, с использованием 4х моделей, которое давало 77.26 без стакинга.

В итоге у меня встала задача, какое решение выбрать, обычно на kaggle можно выбирать два, а тут надо было выбрать всего лишь одно.
Модель со стакингом получилась очень громоздкой и проверять её на локальной 5-fold кросс-валидации у меня не было никакого желания, поэтому решение я принимал, можно сказать, в слепую. В итоге я не устоял соблазну и сделал выбор в пользую сложной модели, хотя на практике сложные модели в итоге ведут себя хуже.

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

Немного стыдно за результат, учитывая то, что у меня есть опыт участия 15+ конкурсах и я нахожусь в топ 100 общего рейтинга kaggle.

p.s. Жду от авторов тестовую выборку, чтобы самому покрутить результаты.
Ничего особенного, stacking разных моделей.
Я был первым — куда-то пропал. Результаты не финальные.
Где русскоязычные конкурсы искать не знаю, но некоторые анонсы мероприятий попадаются на блоге Александра Дьяконова.
В частности, он писал про качество организации этого конкурса: alexanderdyakonov.wordpress.com/2015/09/11/moscow-data-fest

Ну и площадки с мировыми конкурсами, если ещё не знайте о них:
www.kaggle.com
www.crowdanalytix.com
www.drivendata.org
algomost.com/ru (проект Сколково)
Просто ещё никто не начинал всерьёз работать, кроме одно человека, у которого 92%. Чтобы получить 74-75% там достаточно всего лишь несколько столбцов.
С контурами это вы сами придумали? :)
Давно же всё есть, например: https://ru.wikipedia.org/wiki/SSIM.
Мне разные форматы попадались, я сам не был там.
Если хотите быть в курсе таких мероприятий, то подпишитесь на русскоязычные группы о DS в соц. сетях.
Если вы хотите в сформировавшуюся команду работать попасть, то, как мне кажется, через знакомства будет намного проще найти. Ведь на начальном этапе с вас будет очень маленький спрос, нужно будет просто подготавливать данные, и только потом сложность задач будет возрастать.

Если вас кто-то нибудь посоветует небольшой компании, то, как минимум, с вас не будут спрашивать задачки с HackerRank.

Ну а с kaggle, по моему мнению, всё намного проще. Просто нужно играть по его правилам. С мастером мне повезло, я получил его в первом соревновании, над которым решил серьёзно поработать, а не просто пару часов посидеть, как в предыдущих. Это было соревнование по трудоустройство от facebook и я занял там 7е место. Над задачей посидел порядка 40 часов, т.е. полную рабочую неделю.

С тех пор у меня сложилось мнение, что новички на kaggle платят только своим временем. Любой новичок с достаточными навыками программирования может финишировать в топ 100, если выберет хорошее соревнование и потратит нужное количество времени.

Я не помню соревнований, где бы весь топ 10 состоял из очень сложных решений, в основном сложные решения только у призёров. Исключением являются задачи, которые связаны с deep learning. Поэтому, чтобы попасть в топ, не обязательно знать кучу теории и иметь гору опыта. Главное полностью понимать поставленную задачу. Ведь в нормальных соревнованиях, где все поля описаны и не зашифрованы, около 80% от победы зависит от того, какие фичи смогли придумать участники.

Поэтому знаний и опыта у вас точно хватает, нужно просто немного усердия и везения :).

По поводу МГУ и общения, в Москве постоянно митапы проходят, где прошедшие задачки разбирают.

Информация

В рейтинге
Не участвует
Откуда
Тринидад и Тобаго
Работает в
Зарегистрирован
Активность

Специализация

Специалист
Lead