Как правило, заранее нельзя предсказать, какой алгоритм будет работать лучше в данной задаче. Но есть исключения. Одно из них — классификация изображений.
Для этой задачи можно заранее попытаться предсказать, что конволюционные нейронные сети будут рвать всех «на британский флаг». На том же кагле — море примеров. Я не знаю, ни одного соревнования, где в задаче распознавания изображений в топе было что-то иное.
Это я к чему. Прямо из коробки, на этом соревновании однойслойная сеть выдаёт точность 96%, двуслойная нейроная сеть, с dropout уровнем между ними выдаёт точность 97%. Простая конволюционная сеть выдаёт 99%. Дойдут руки, напишу batchIterator, который будет слегка крутить и двигать цифры, отражать 0, 1 и 8 случайным образом во время тренировки модели, возможно, (пока я не проверил на практике — это лишь теоретическая идея) и подкручу параметры модели — точность подскочит ещё выше.
(Клятвенно обещаю, как найду работу, напишу пост на тему этого соревнования, нейронных сетей и их 99% предсказания)
Это я к тому, что различные задачи лучше решаются различными алгоритмами и, на мой взгляд, SVM или Decision Tree для MNIST dataset (Это я не к тому, что эти алгоритмы хуже, я знаю примеры, когда SVM был лучше всех или когда, RF был вне конкуренции), — это не самый правильный выбор, как минимум в силу того, тёмные пиксели образуют компактное подмножество и хотелось бы это как-то учитывать, чего SVM или RF не делают.
(Желание глазами взглянуть на то, как ошибка зависит от числа итераций — это очень, очень правильно, и находит в моей душе сильный отклик. Многие этого не делают. Часто народ запускает GirdSearch для поиска гиперпараметров, и смотрит только на mean(score), std(score), не пытаясь понять, что, где и почему)
Я уверен, что, в принципе, можно и линейную регрессию использовать и она выдаст что-то внятное (Дискретизация предсказаний линейной регресси — это отдельная тема.), но зачем?
Вы не могли бы указать, точность, которую удаётся получить на Public LeaderBoard используя RF и SVM?
Мастера, наверно, взять можно, но непросто. Вот так сходу, прищурившись посмотреть на данные и сделать победный(ну или хотя бы топ 10) сабмишн у меня знаний/навыка не хватает. Для того, чтобы вылезти в топ10 долгим и кропотливым трудом, нужно время: чтение статей и книг на тему, анализ решений из похожих по духу/метрике соревнований, просмотр лекций на edX, Coursera, Youtube, да и просто написание кода и проверка хороших и не очень идей на cross validation — всё это требует уйму времни. Всё это можно сильно ускорить, если есть команда единомышленников, которые тоже работают над этой задачей и вы обмениваетесь идеями о том, что работает, но, что чаще, о том, что не работает. Например, на кагле в топе много ребят с МГУ, и выступают они замечательно. Есть у меня подозрение, что они на тему кагла хоть иногда, но общаются. Я поначалу пытался аспирантов со своего факультета в UC Davis, Physics раскрутить на командную работу — но толком не пошло, система обучения в аспирантуре в США построена так, что ты должен, не разгибаясь, как негр на плантации двигать науку в какую-нибудь сторону 24 часа в сутки, плюс за время обучения ты привыкаешь, что статья в резенцизруемом журнале — это достижение всей твоей жизни (по сути, чуть ни единственный критерий оценки тебя в качестве двигателя науки), поэтому все пытаются что-нибудь опубликовать, и это тоже не добавляет мотивации найти время на кагл. (Публикуются они тоже плохо. В силу того, что с данными в физике работают крайне неэффективно. Вот тут бы опыт кагла им сильно помог, как минимум с точки зрения exploratory analysis.)
Поэтому, после неудачной попытки командной работы, я сам ковырялся с совревнованиями, параллельно дописывая диссертацию, а потом пытась найти работу.
В SF Bay Area, где я сейчас обитаю, море очень серьёзных людей и в машинном обучении, и в частоности в кагле, но, чтобы с ними познакомится, нужно время, а время в данный момент уходит на прорешивание задач с Glassdoor и HackerRank, которые могут попасться на интервью.
В общем Kaggle Master помог бы найти работу, но чтобы его получить, мне сначала нужно найти работу, чтобы хоть какое-то свободное время появилось. Кстати, вопрос денег тоже как-то, но стоит. Многие задачи мой лаптоп не потянет, а AWS стоит хоть и небольших, но денег.
Кагл штука замечательная. Я из него вынес море знаний о машинном обучении, различных библиотекахи и алгоритмах.
Проблема в том, что твои результаты на нём не котируются при приёме на работу. Среди тех, кто работает в Data Science, но кагл видел только на картинке, а сам ни одного сабмишена никогда не сделал(а таких 100% среди тех, с кем у меня было интервью), бытует мнение, что кагл — это набор искуственных данных, работа над которыми никак не связана с REAL Data Science. Я согласен, что у кагла своя специфика, и многие допущения, которые позволяют важать из данных всё, что можно, чтобы получить заоблачную точность, на практике не будут применимы, например в силу того, что решение должно быть масштабируемо. Но тем не менее, feature engineering, feature extraction точно такой же. Ньансы работы с различными метриками, проблемы cross validation, всё ровно то же.
Хотя, скорее всего, я что-то делаю неправильно. Народ, кто разибрается, как мне кагловские результаты правильно вставить в резюме? https://www.kaggle.com/iglovikov
У меня сложилось такое же впечатление. В этом отношении мне гугл понравился. После технического интервью позвонили и сказали, что не смотря на впечатляющие технические навыки они предпочли более сильного кандидата. И несмотря на то, что с ними не срослось и что они просто пытались сделать пилюлю отказа чуть менее горькой, общее впечатление от взаимодействия с их рекрутером и представителями их Data Science team было очень положительное. Чувствовалось, что к тебе относятся как к человеку. А тут такое неуважение к моему времени, причём со стороны достаточно большого стартапа. Я даже имя компании скажу вслух, чтобы те, кто будут пытаться к ним устроиться — это Pivotal. Индус, про которого я упоминал в начале поста, в своё время оказался в похожей ситуации так он написал им, что при таком отношении к кандидатам, работать в такой компании он не хочет.
Кстати, если кто-то увидит этот комментарий и кто работает в какой-нибудь компании в San Francisco Bay Area или New York и у них есть свободная вакансия на позицию Data Scientist'a, я буду премного благодарен, если вы перешлёте моё резюме вашему Job Recruiter'у.
На данный момент — я как тот кот, которого пытался отравить Шрёдингер.
Мутная какая-то контора в том смысле, что тянут и кормят отговорками вроде: «I am so sorry it is taking a little longer I will know more by Monday. » И в понедельник тишина.
Я написал письмо, с напоминанием о том, что я существую. И получаю:
"The team was supposed to debrief yesterday and I am still waiting for an answer. Let me check again."
И опять тишина.
Видимо, не судьба. Буду подавать в другие компании.
Мне вот тоже интересно, а почему не использовать нейронную сеть для оценки вероятности того, понравилось вам платье или нет? Что PCA, что логистическая регрессия сильно завязаны на линейность данных. Нейронная сеть таких ограниечений не имеет.(Там своих заморочек хватает, правда с линейностью они не связаны), но, вцелом, я бы, в этой задаче, пожалуй, поставил на нейронную сеть против логистичской регрессии + метода главных компонент.
Нам не ясно, что значит «неправильно», и какой эксперимент это показывает. Вычислительные мощности, очевидно, не зависят от порядка применения операций (далее вы сами, противореча себе, написали "… и по времени то же самое"). Размер профита в нашем случае опубликован, статья ровно об этом. Какая цифра вам показалась слишком маленькой?
Прошу прощения, я неточно выразился. Имелось в виду вот что:
Пусть мы хотим увеличить точность нашей модели. И у нас есть исходные данные размера X. Мы хотим увеличить размер данных, добавив правильного шума. И тут, как я понимаю, есть два подхода:
Давайте слегка повернём каждую цифру. Скажем, градусов на 1-10 по и против часовой стрелки. Итого, теперь у нас не X, а X * 21. А давайте теперь каждую из полученных цифр сдвинем влево, вправо, вверх, вниз, пикселей на 1-5. И рамер наших данных сразу X * 21(повороты) * 21(трансляция). Точность нейронной сети, да и любого алгоритма натренированных на этих данных выше, чем натренированных на исходных X. Но в силу того, что размер увеличился более, чем в 400 раз, то и время тренировки существенно увеличится. А ведь можно ещё эти цифры порастягивать, поотражать. Поворачивать на большие или на нецелые углы. Посдвигать не на 5, а на большее число пикселей. Добавить отражений. Поиграть с контрастом. И т.д. В общем мощность множества группы преобразований, а месте с ней и размер обучающих данных очень быстро растёт./li>
Но можно сделать так: на каждой тренировочной итерации для нейронной сети для каждой(или для случайно выбранной) цифры мы будем применять случайное преобразование из этой группы преобразований, описанных в первом пункте. То есть, с одной стороны наша обучающая выборка не раздувается в миллион раз, её размер остаётся прежним, но на каждой обучающей итерации мы добавляем шум, который увеличивает точность нейронной сети, а заодно слегка помогает от переобучаения. Да, время тренировки также увеличивается, всилу того, что эти преобразования надо осуществлять в реальном времени, но это занимает не так много времени.
Хотя если задача правильно увеличить выборку, не раскрывая алгоритм, то, конечно, кроме как применения различных преобразований, ничего и не придумаешь.
Его курс замечателен, но уж больно оторван от реальности. Там толком не поднимаются проблемы точности и масштабируемости. Я прекрасно помню чувство, когда я, просмотрев его лекции, будучу магистром физики, с несколькоми публикациями в мировых научнх журанлах, с зашкаливающим ЧСВ попробовал применить свои занния на практике, И тут же получил по эмоциональный щелбан по носу, а для того, кто от груди жмёт лёжа 100 кг, это достаточно необычное чувство. Это я к тому, что теория — теорией (Теория это очень важно, а практика практикой. ) Мой эмоциональный щелбан состоял в том, что моя первая попытка предсказания на Титанике… дала мне нижние 5%. То есть, показала мне, что я не «без пяти минут кандитдат наук», а так, «лошара» с завышенным самомнением. После этого «линия партии изменилась», я стал участвовать в каждом соревновании на kaggle.com. Причём если я не попадаю в топ 10% — что-то я упустил. Если я не попадаю в топ 25% — это значит, что я вообще потерялся в этой задаче. Сейас я 233 из 352971, но это, во-многом, благодаря тому, что ты не просто блеешь над проблемой, как многие и в нашей, и в заграничной науке, а что работа над задачами, которые предосталвяет kaggle.com в режиме, когда проотив тебя и те, кто работают в real Data Science, и аспиранты Stanford, и аспиранты МГУ(Есть один серьёзный профессор в МГУ — Алекксандр Дьяконов + его студенты), и девятилетние азиаты(что, бы ты не делал, какой бы ты навык не тренировал, всегда найдётся девятилетний азиат, который делает это лучше(как минимум на youtue.com)), это вопрос, который надо ответить. Как — это твои проблемыы. Какие инструемнты использовать, опять же, зависит от твоего выбора. Все красивые слова и научные титулы — это в пользу бедных.
SVN замечательная штука, особенно мне импонирует математическая постановка задачи, из которой SVM ногами произрастает. Я даже знаю пример, где, по моему опыту, SVM рвал, другие алгоритмы на британский флаг. А именно сравнение поискового запроса и поисковой выдачи. Но есть у нелинейного SVM одна проблема… сложность тренировки от числа объектов O(n^3) — и, сразу, для более-менее внятных задач SVM становится неприменим… И на первое место выходят всякого рода леса и нейронные сети.
nolearn, который, упоминается в посте сильно повзрслел за поледнее время. Так что интерфейс, упомянутый выше и точность предсказаний сильно изенились.
В комментариях выше упоминались «деревья решений» для этой задачи, это один из моих любимых алгоритмов, но для изображений, на данный момент, никто ничего лучше cNN не придумал, особенноо всилу того, что существуют достойные пакеты, для работы с ними, такие как nolearn и keras. Это я тому, что а данной проблеме XBGoost или RandomForest с аугументацией данных выдал мне 97%, простая нейроннная сеть 98%, а cNN — 99%.
Мне всегда нравилось в качестве одного из преобразований использовать отражение, для симметричных объектов. Типа цифры 8 или 0.
Как показывает эксперимент, радувать обучающую выборку саму по себе неправильно. В том смысле, что вычиcлительных мощностей сразу требуется много, а вот профит маленький. C тем же результатом можно заниматься аугументацией данных прямо во время тренировки модели. И точность повышается и помогает боросться с переобучаемостью, и по времени то же самое. (На одной итерации подаётся изображение, а на следующей это изображение уже повёрнуто, отражено или растянуто.) Примеры:
Замечательный туториал с кодом на питоне тут не цифры, а лица, в одной из версий представленного кода во время тренировки нейронной сети лица случайным образом отражались от вертикальной оси.
Описание решения задачи классификации планктона на kaggle.com Ну это решение на уровне «Advanced Research Problem». На мой взгляд, как минимум, заслуживет публикации в серьёзном научном журнале, а не просто разделить $175000 с другими призёрами.
Аугементация данных — это, безусловно, важно. Но распознавание изображений, это одна из областей, где алгоритмы, сами по себе, уже круты неимоверно. Вы бы не могли бы проверить, ваш подход, на Digit recognizer. Тут надо распознать цифры с широко известного в узких кругах data set MNIST. Прямо их коробки, простенькая cNN мне выдала точность 99%. Достаточно много статей про различные подходу к этим данным, и модель, котора обладает максимальной точностью, что-то в районе 98.8%. Это я к тому, что во многих задачах Нейронные сети со сложной архитекторой замечательно справляются и без дополнительных ухищрений.
Меня всегда интересовало, как можно делать аугументирвоание исходных данных, на задачах, которые к изображениям не относятся, пусть будут данные, которые предостваляет страхования компания, чтобы предсказать, кого надо страховать, а кого невыгодно(набор численных и категорийных данных). Не подскажите ссылку на книжку/ссылку/статью?
Про изображения и признаки: В тексте, я немного неаккуратно выразился, я привёл ссылку на одно из топовых решений в другом соревновании, не про погоду и продажи, а про то, где надо было определять степень болезни по изображениям. Я тоже пытался участвовать в этом сореновании, и почитав литературу, занимался обработкой изображений, пытался извлечь из них какие-то признаки. А вышеупомянутый товарищ не мудрствуя лукаво сфокусировался не на создании признаков, а на сложности модели. Конволюционная нейронная сеть нетривиальной архитерктуры и правильная аугументация данных. Так вот его предсказание в разы точнее моего. Это я к тому, что признаки — это признаки, а модель — это модель. В большинстве случаев правильные признаки сильнее улучшают точность предсказания, чем зубодробительные модели. Но есть области, в которых существующие алгоритмы достаточно продвинуты, чтобы самим разобраться что, где и как.
Вы правильно заметили, что есть такая порочная практика, но я добавил кусок текста в конце, в котором попытался пояснить, что все не так плохо, как кажется.
Для этой задачи можно заранее попытаться предсказать, что конволюционные нейронные сети будут рвать всех «на британский флаг». На том же кагле — море примеров. Я не знаю, ни одного соревнования, где в задаче распознавания изображений в топе было что-то иное.
Это я к чему. Прямо из коробки, на этом соревновании однойслойная сеть выдаёт точность 96%, двуслойная нейроная сеть, с dropout уровнем между ними выдаёт точность 97%. Простая конволюционная сеть выдаёт 99%. Дойдут руки, напишу batchIterator, который будет слегка крутить и двигать цифры, отражать 0, 1 и 8 случайным образом во время тренировки модели, возможно, (пока я не проверил на практике — это лишь теоретическая идея) и подкручу параметры модели — точность подскочит ещё выше.
(Клятвенно обещаю, как найду работу, напишу пост на тему этого соревнования, нейронных сетей и их 99% предсказания)
Это я к тому, что различные задачи лучше решаются различными алгоритмами и, на мой взгляд, SVM или Decision Tree для MNIST dataset (Это я не к тому, что эти алгоритмы хуже, я знаю примеры, когда SVM был лучше всех или когда, RF был вне конкуренции), — это не самый правильный выбор, как минимум в силу того, тёмные пиксели образуют компактное подмножество и хотелось бы это как-то учитывать, чего SVM или RF не делают.
(Желание глазами взглянуть на то, как ошибка зависит от числа итераций — это очень, очень правильно, и находит в моей душе сильный отклик. Многие этого не делают. Часто народ запускает GirdSearch для поиска гиперпараметров, и смотрит только на mean(score), std(score), не пытаясь понять, что, где и почему)
Я уверен, что, в принципе, можно и линейную регрессию использовать и она выдаст что-то внятное (Дискретизация предсказаний линейной регресси — это отдельная тема.), но зачем?
Вы не могли бы указать, точность, которую удаётся получить на Public LeaderBoard используя RF и SVM?
Поэтому, после неудачной попытки командной работы, я сам ковырялся с совревнованиями, параллельно дописывая диссертацию, а потом пытась найти работу.
В SF Bay Area, где я сейчас обитаю, море очень серьёзных людей и в машинном обучении, и в частоности в кагле, но, чтобы с ними познакомится, нужно время, а время в данный момент уходит на прорешивание задач с Glassdoor и HackerRank, которые могут попасться на интервью.
В общем Kaggle Master помог бы найти работу, но чтобы его получить, мне сначала нужно найти работу, чтобы хоть какое-то свободное время появилось. Кстати, вопрос денег тоже как-то, но стоит. Многие задачи мой лаптоп не потянет, а AWS стоит хоть и небольших, но денег.
Проблема в том, что твои результаты на нём не котируются при приёме на работу. Среди тех, кто работает в Data Science, но кагл видел только на картинке, а сам ни одного сабмишена никогда не сделал(а таких 100% среди тех, с кем у меня было интервью), бытует мнение, что кагл — это набор искуственных данных, работа над которыми никак не связана с REAL Data Science. Я согласен, что у кагла своя специфика, и многие допущения, которые позволяют важать из данных всё, что можно, чтобы получить заоблачную точность, на практике не будут применимы, например в силу того, что решение должно быть масштабируемо. Но тем не менее, feature engineering, feature extraction точно такой же. Ньансы работы с различными метриками, проблемы cross validation, всё ровно то же.
Хотя, скорее всего, я что-то делаю неправильно. Народ, кто разибрается, как мне кагловские результаты правильно вставить в резюме? https://www.kaggle.com/iglovikov
Кстати, если кто-то увидит этот комментарий и кто работает в какой-нибудь компании в San Francisco Bay Area или New York и у них есть свободная вакансия на позицию Data Scientist'a, я буду премного благодарен, если вы перешлёте моё резюме вашему Job Recruiter'у.
Мутная какая-то контора в том смысле, что тянут и кормят отговорками вроде:
«I am so sorry it is taking a little longer I will know more by Monday. » И в понедельник тишина.
Я написал письмо, с напоминанием о том, что я существую. И получаю:
"The team was supposed to debrief yesterday and I am still waiting for an answer. Let me check again."
И опять тишина.
Видимо, не судьба. Буду подавать в другие компании.
Прошу прощения, я неточно выразился. Имелось в виду вот что:
Пусть мы хотим увеличить точность нашей модели. И у нас есть исходные данные размера X. Мы хотим увеличить размер данных, добавив правильного шума. И тут, как я понимаю, есть два подхода:
Но можно сделать так: на каждой тренировочной итерации для нейронной сети для каждой(или для случайно выбранной) цифры мы будем применять случайное преобразование из этой группы преобразований, описанных в первом пункте. То есть, с одной стороны наша обучающая выборка не раздувается в миллион раз, её размер остаётся прежним, но на каждой обучающей итерации мы добавляем шум, который увеличивает точность нейронной сети, а заодно слегка помогает от переобучаения. Да, время тренировки также увеличивается, всилу того, что эти преобразования надо осуществлять в реальном времени, но это занимает не так много времени.
Хотя если задача правильно увеличить выборку, не раскрывая алгоритм, то, конечно, кроме как применения различных преобразований, ничего и не придумаешь.
Твой результат превыше всего.
"