@Author : Jasperyang@School : BUPT
Эта статья также размещена в Zhihu~
написать впереди
Соревнования Kaggle по интеллектуальному анализу данных стали очень популярными в последние годы, поэтому в Китае появилось много подобных соревнований, и было проведено два соревнования такого типа.Предсказание покупок товаров пользователями Jdata и точное предсказание местоположения пользователя накопили большой опыт соревнований. Да, хотя оба раза были не особо хороши, 59/4590 и 179/2844. Процедуры этих соревнований в основном одинаковы.Я могу обсудить с вами общую процедуру ответов на вопросы и как получить высокий балл, но, в заключение, это физическая задача и не имеет ничего общего с интеллектом. (Хотя я применил свои практические способности, это значительно укрепило мои навыки в sklearn и pandas...)
ЧАСТЬ 1: Как начать
Во-первых, посмотрите на заголовок, что это за предсказание? возвращение? Две категории? Несколько категорий?
Каждый тип предсказания будет немного отличаться.Я лично считаю, что книгу об арбузах все же нужно читать быстро.Это не обязательно означает, что каждую формулу нужно тщательно выводить (формулы вывода в основном не помогают вам в игре) , вам нужно знать, что является контролируемым, полуконтролируемым, неконтролируемым и т. д.
У меня есть вводный блог о мультикатегориях, который можно быстро просмотреть
Тогда это сложноразработка функцийохватывать
Как правило, в такой игре процесс выглядит следующим образом:
Самое главное, что при разработке функций вы в основном будете проводить здесь 60% своего времени, потому что здесь вам нужно делать очистку данных, обработку исключений, преобразование, создание новых функций и т. д. Этот набор очень подробный. Туториал, выложу два портала для всех (не спешите смотреть первым)
Прочитав эти две статьи, вы сможете легко обращаться с данными.
Однако, прежде чем приступить к проектированию признаков, вам следуетпонимать данные, как понимать данные? Это требует, чтобы вы хорошо владели инструментом pandas.Что касается того, как ознакомиться с этим инструментом, я хотел бы предложить вам следующий процесс обучения.
-
Установите anaconda, это очень просто, просто поищите в Интернете (этот инструмент для научных исследований содержит в основном все, что вам нужно, jupyter, pandas, numpy и т. д.). Конечно, если вы хотите заниматься глубоким обучением, вам нужны tensorflow, pytorch, и т.д.
-
Поскольку позже нам нужно будет использовать артефакт xgboost в качестве модели, лучше всего, чтобы ваша система была ubuntu, потому что для установки xgboost в ubuntu требуется только установка pip, и вы можете побить людей, когда будете устанавливать его в других системах.
-
хорошо, со средой, просто используйте anaconda/bin/jupyter для запуска рабочей среды jupyter, в этой среде вы можете делать все, что хотите... (в основном потому, что jupyter может сохранять результаты вашего предыдущего выполнения, что очень удобно. эксперименты, подробности можно погуглить)
-
Изучение pandas легко, потому что это похоже на операцию базы данных на таблице. Для новичков достаточно посмотреть туториал на официальном сайте:10 min to learn, а потом приходится сливать, объединять, соединять и другие сложные операции, чтобы проверять понемногу, по чуть-чуть. По мере того, как вы к этому привыкаете, вы можете выполнять любое преобразование ваших данных, например, находить данные за определенные годы, которые превышают определенные значения.
-
Зачем нужно понимать данные? Поскольку данные распределены и имеют различное бизнес-значение, вы можете лучше понять значение определенных атрибутов путем организации и сопоставления, а затем создания или извлечения полезных функций.
структурные особенности
На мой взгляд, это та часть фиче-инжиниринга, и самая важная часть, на которую вы потратите много времени! ! (Так называемая функция — это функция, то есть все столбцы в вашем наборе обучающих данных, кроме метки)
Например, в соревновании по прогнозированию продукта вы можете разделить функции на три категории, организовать и проанализировать их с трех точек зрения. (благодарныйРезюме конкурса мобильных алгоритмов рекомендаций Alibabaданные изображения)
Процесс извлечения этой структуры функций отличается для каждого соревнования. Я не буду здесь вдаваться в подробности. Если вам нужно больше вдохновения, я предлагаю вам поискать много информации о том, как другие думают с разных точек зрения.
Здесь упоминается, что вообще вещи, связанные со временем, требуют оформления временного окна, это дело сложное и не сложное, но очень трудозатратное на практике. Проще говоря, вам нужно разделить ваши данные по определенному времени. Например, в моем предыдущем соревновании я использовал данные первых пяти дней, чтобы предсказать следующий день, но общий набор данных составляет два месяца.На этот раз вам нужно разделить свой набор данных на обучающий набор и проверочный набор.
Приведенные выше 1, 2 и 3 — это три тренировочных набора, а маленькая рамка сзади — это проверочный набор, что означает, что вам нужно обучить несколько моделей. При этом можно подумать, что более ранние данные точно окажут меньшее влияние на текущий прогноз, поэтому будет проблема веса, то есть вы получаете десять моделей, ближайшая к дате прогноза модель_0, а самая дальняя рассчитывается model_9, затем присвойте model_0 вес 0,7 и model_9 вес 0,05.
Вам нужно знать, что такое тренировочный набор, проверочный набор, тестовый набор! !
Иногда классы в тренировочном наборе очень несбалансированы
В это время требуется недовыборка или передискретизация.
-
Недостаточная выборка: категория с большим количеством данных случайным образом уменьшает некоторые обучающие данные.
-
Передискретизация Найдите категории с меньшим количеством данных и используйте метод smote для интерполяции и добавления данных.поразил алгоритм
На самом деле обработка дисбаланса данных также является частью разработки признаков.Я просто поместил это здесь, чтобы подчеркнуть, что существует много типов обработки дисбаланса, но они не используются повсеместно.Вы можете получить общее представление.
Вы должны назвать каждую функцию, чтобы избежать путаницы.
Кроме того, из-за необходимости разнообразия функций при объединении моделей вам может потребоваться, чтобы разные кластеры функций вводились в разные модели, поэтому очень важно управлять файлами! ! !
Я рекомендую следующее для вашего файла проекта матча.
В результате нужно также разделить папку на разные результаты, чтобы мы могли использовать устройство для голосования, когда модель будет объединена позже.
Внутри эксперимента находится ваш файл эксперимента Jupyter, потому что вы создадите много таких файлов, поэтому лучше иметь специальную папку для управления.
Очень просто и понятно, когда вы изучаете конвейер в sklearn, вы можете построить инженерный код, который можно легко изменить и показать другим для обсуждения процесса мышления. Но чего не сделаешь, так это сделать фреймворк, который можно будет легко переиспользовать в различных соревнованиях. Потому что статистика для каждой игры сильно отличается. Без слов.
ОК!! Пройдя описанный выше процесс, давайте теперь перейдем к этапу обучения части 2. Этот этап является самым захватывающим, потому что здесь вы встретите недостатки вашей разработки функций и модели, а затем настроите ее, наблюдая за производительностью. медленно Медленно улучшайте ~!
PART 2
На этапе модели здесь нужно иметь четкое представление о различных моделях, лучше всего, если вы сможете вывести формулу, но забудете об этом.
-
Logistic Regression
-
SVM
-
GDBT
-
Naive Bayes
-
Xgboost (возможно, самый полезный)
-
Адабуст и многое другое
Ознакомьтесь с книгой об арбузах. Она позволит вам многое узнать из основ. Лучше всего прочитать статистический метод обучения Ли Ханга. Эта книга относительно тонкая, но содержание очень всеобъемлющее, а вывод прост для понимания.
Плюс этих моделей в том, что их не нужно писать, есть готовые библиотеки, и они в основном сосредоточены в sklearn. Кроме лайтГБМ.
Давайте посмотрим на этот простой вызов:python sklearn часто используемый вызов модели алгоритма классификации, вы обнаружите, что модель проста и удобна в использовании~ Да, но это только начало, не забудьте сохранить модель, и сохраните результат в строгом соответствии с указанным путем к файлу, иначе вы запутаетесь позже.
Метод программирования sklearn обширен и глубок, но API по-прежнему очень прост в использовании. Вам нужно всего лишь потратить некоторое время на его изучение, и вы будете очень опытны.заметки по изучению sklearn в python, это отношениеУчебник на официальном сайтеХорошо понимать, в конце концов, это китайский... Пот~
Потом еще нужно настроить параметры этих алгоритмов.Я не буду о них говорить.Я хочу сосредоточиться на xgboost,это дерево регрессии,которое можно оперировать параллельно.Оно очень часто и эффективно используется в текущих соревнованиях.
-
Принципиальное объяснение официального сайта, которое я перевел:(XGBoost) Введение в усиленные деревья
После того, как вы это поймете, вы поймете, почему эта вещь такая классная.Конечно, предпосылка заключается в том, что вам нужно знать принцип дерева решений и случайного леса.
Опять же очень удобно ставить xgboost на систему ubuntu, а вот другие системы реально неудобны, можете испытать на себе, если не хотите тратить время, то лучше сделать в ubuntu
Эффект от xgboost после запуска в целом очень хороший, но это не окончательный, т.к. у xgboost много параметров, очень важно как настроить параметры, чтобы результат был лучше.
Регулировка параметров — это тоже физическая нагрузка, надеюсь, вы все заботитесь о своем здоровье! ~
Хорошо, это все для части 2. На самом деле, если вы хорошо сделаете первые две части, вы можете добиться хороших результатов.Третья часть является средством для продвижения на более позднем этапе, конечно, она необходима.
PART 3
слияние моделей
Слияние моделей зависит от того, какой прогноз вы делаете, и разные результаты прогнозирования имеют разные методы слияния. Бэггинг, голосование и штабелирование — все это виды сборки.
Вообще говоря, речь идет о регрессии, конкретный метод голосования не упоминается, у меня есть кусок кода, вы можете посмотреть, как сделать голосование.
# 投票器
def file_name(file_dir):
filename = []
for root, dirs, files in os.walk(file_dir):
filename.append(files)
return filename\n",
filename = file_name('./result/all_result/')[0]
'''
* 文件名 * 票数
['result_0.002_no_0.03_8steps_0.8964.csv', 9
'result_TL_ten_0.002_no_0.03_0.9062.csv', 10
'result_0.001_0.8917 .csv', 9
'result_LT_ten__0.001_no_0.03_0.9092.csv', 10
'result_LT_ten_0.0015_no_0.03_0.9051.csv', 10
'result_0.0015_0.9061.csv', 10
'result_AdaB_0.31.csv', 3
'result_feature_delexcep_0.002_tree.csv', 9
'result_rf_0.001_0.03_0.86.csv', 8
'result_lr_0.60.csv', 4
'result_rf_0.87.csv', 8
'result_0.002_no_0.03_6steps_0.8951.csv', 9
'result_0.002_no_0.03_0.9058.csv', 10
'result_gdbt_0.79.csv', 6
'result_xgb_91.csv', 11
'result_0.002__0.9046.csv', 10
]
'''
dic = {}
index = list(re.iloc[:,0])
result = []
voting = [9,10,9,10,10,10,3,9,8,4,8,9,10,6,11,10,9]
for t in list(re.iloc[:,0]):
dic[t] = {}
for i,shop in enumerate(list(re[re.row_id == t].iloc[0,1:])):
# 建立字典
if shop not in dic[t].keys():
dic[t] = {re[re.row_id == t].iloc[0,1] : voting[i]}
else:
dic[t][shop] += voting[i]
# 选出最高票者 , 得票相同的选后者
top = 0
score = 0
for x,y in dic[t].items():
if y > score:
top = x
score = y
result.append(x)
re = pd.DataFrame({'row_id':index,'shop_id':result})"
Что касается слияния моделей, это зависит от того, как вы хотите это сделать.Ограничение классификации с несколькими метками - это устройство голосования.Если вы вернетесь, будет больше трюков, и вы можете сделать это слоями.
Чтобы углубить ваше понимание и использование слияния моделей, мы рекомендуем три другие статьи:
PART 4
Наконец, позвольте мне рассказать о двух трюках. (Это не имеет смысла, иногда работает, иногда нет)
-
Ищу утечку игры, это просто лазейка. Проанализировав некоторые функции тестового набора, чтобы найти золотую функцию (то есть функцию, которая может сразу значительно улучшить производительность), я услышал об этом в сообщении Даниэля, но я не думал об этом, когда я был делать игру, мне стыдно.
-
Использование информации конечных узлов GDBT или XGBoost для создания новых функций в целом может повысить производительность, но обучение идет очень медленно, например, я одолжил несколько компьютеров и распределил обучающий набор на разные компьютеры для запуска. Изношенный...
Суммировать
Некоторые люди говорят, что достаточно один раз следить за ядром на kaggle, я думаю, что это довольно хорошо, но после прочтения этой моей кропотливой статьи я думаю, что ваши знания систематичны! ~
Ну наконец-то это конец.Честно говоря,я пока не хочу участвовать в такого рода соревнованиях.Большой бык из нашей школы только что сыграл 10 игр,а потом дважды выиграл чемпионат.Я в нем участвовал дважды, и результаты. Это нехорошо, но я уже физически и морально истощен, и у меня нет уверенности, чтобы выиграть награду. Кроме того, я думаю, что глубокое обучение — это то, что нужно сейчас, я уже некоторое время играю с распознаванием изображений и подписями к изображениям. Гораздо интереснее.
Пока всем удачи.