Стратегия Титаник для рулетки 31.05.2020

Топ-2 честных онлайн казино за 2020 год:

Стратегия «Титаник» для рулетки 31.05.2020

Если оригинальный «Титаник» позиционировался как непотопляемый лайнер, то «Титаник II» можно назвать нерушимым. Идея воссоздать легендарное судно принадлежит австралийскому бизнесмену Клайву Палмеру, основателю круизной компании Blue Star Line, названной по аналогии с судоходной компанией White Star Line, построившей роковой корабль.

Палмер выступил с объявлением о строительстве копии «Титаника» в 2020 году — в память о погибших и выживших в крушении 1912 года. Предполагалось, что корабль спустят на воду уже в 2020 году, но сроки сдвинулись до 2020, а затем и 2020 года. В итоге Blue Star Line сообщила, что в 2022 году лайнер отправится в Нью-Йорк, а затем совершит кругосветное путешествие.

Пока австралийский «Титаник II» выглядит наиболее живым и многообещающим проектом — несмотря на затянутые сроки строительства.

Проект Сарела Гуса

Концепция копии «Титаника» разрабатывалась несколько раз. Особенно интерес к ней возрос после выхода одноименного фильма Джеймса Кэмерона в 1997 году. Наиболее известная инициатива принадлежит южноафриканскому бизнесмену Сарелу Гусу, который принялся возводить судно в 1998 году. Он допускал функциональные изменения в дизайне лайнера, необходимые для обеспечения безопасности и экономической жизнеспособности будущего судна. Так, например, вместо паровых двигателей планировались дизель-электрические, вместо заклепок на обшивке — более надежная сварка. На проект требовалось до $600 млн.

В 2000 году Гус представил свою концепцию на суд городского совета в Белфасте и поручил разработать дизайн корабля студии Olsen Designs, а проектирование интерьера — компании Callcott Anderson. Тогда же Гус принялся активно привлекать к проекту капитал, в том числе через государственные гранты. Строительство планировали вести в течение девяти месяцев на верфях Harland and Wolff в Северной Ирландии, где появился на свет и первый корабль. В проект неоднократно вносили изменения в целях экономии и оптимизации бюджета, пытаясь сохранить статус «Титаника» как «крупнейшего лайнера в мире» вместимостью 2600 пассажиров. В 2006 году строительство закрыли, сославшись на нехватку инвестиций.

Проект Seven Star Energy Investment

Компания Seven Star Energy Investment занимается строительством копии лайнера в провинции Сычуань. Пока это единственный наиболее успешный проект, правда, не лишенный существенного недостатка перед инициативами южноафриканского и австралийского бизнесменов — он никогда никуда не поплывет.

Китайский «Титаник», который будет представлять собой неотличимую от оригинала копию, станет главной достопримечательностью курортной зоны в провинции Сычуань. Корабль будет стоять на реке Цицзян. Церемония закладки киля состоялась в ноябре 2020 года, а первые гости посетят неподвижный лайнер уже в 2020 году. Пусть он никогда не совершит кругосветное путешествие или плавание из Саутгемптона в Нью-Йорк, авторы проекта уверены в его успехе. Эта копия «Титаника» станет чем-то вроде торгово-развлекательного центра для туристов в интерьерах оригинального лайнера. Парадная лестница, бальный зал, театр, каюты трех классов, бассейн — все, чем был знаменит «Титаник», вошло в его реплику.

Проект Клайва Палмера

Лучшие онлайн казино на русском языке:

Через шесть лет после неудачи Сарела Гуса «титанический» проект решил осуществить австралиец Палмер. Он признавался, что воссоздание лайнера было его давней мечтой, а потому «Титаник II» будет не просто дорогостоящей туристической забавой. Точная реконструкция эпохи коснется не только интерьеров и маршрута через Атлантику, но и самих пассажиров. Близко знакомить с айсбергом их не будут — не позволит современное технологическое оснащение, — но костюмы начала XX века выдадут. Развлечения на корабле, разумеется, также повторят все увеселения, которым предавались пассажиры оригинального «Титаника».

«Корабль проследует оригинальным маршрутом и перевезет пассажиров из Саутгемптона в Нью-Йорк, а также совершит кругосветное плавание, вдохновляя и очаровывая людей по всему миру, — рассказывает Палмер. — Миллионы мечтали проплыть на этом корабле, увидеть его в порту и почувствовать его уникальное величие. «Титаник II» сможет осуществить эти мечты».

В 2020 году строительство лайнера было практически заморожено, а обещанный спуск на воду не просматривался на горизонте 2020 года. Остановка произошла из-за платежных споров между компаниями Палмера и китайской Citic. Только в 2020 году Верховный суд Западной Англии обязал Citic выплатить компаниям Палмера сотни миллионов долларов. Постановление прояснило судьбу «Титаника II».

Теперь, несмотря на объявления о первом рейсе лайнера в 2022 году, представители Blue Star Line не спешат раскрывать точных дат, пока не заключены контракты с судостроительными компаниями и корабль существует лишь в анимационных роликах и проектных изображениях.

Объявление о плавании в 2022 году позабавило пользователей соцсетей, которые, ожидаемо, вспомнили фильм Кэмерона и начали задавать вопросы о количестве спасательных шлюпок на «Титанике II» (Blue Star Line ответила, что более 2000 штук — хватит на всех пассажиров) и желать Джеку Доусону удачи.

Скепсис вокруг того, что лайнер все-таки выйдет в море, не исчезает с момента объявления о запуске проекта. Особенно сильно сомневаются в его успехе те, кто знаком с предыдущими бизнес-инициативами Палмера. К примеру, туристы, побывавшие в его парке динозавров Palmersaurus в штате Квинсленд, называют это место не иначе как ужасным.

Кроме того, обещанные Палмером 60 тысяч рабочих мест для австралийцев за счет реконструкции и модернизации «Титаника II», скорее всего, так и не появятся: не исключено, что строительство будет проходить в Великобритании или Ирландии.

Почему проект по воссозданию «Титаника» так сложно осуществить? Отчасти из-за огромных финансовых затрат, не подкрепленных перспективами успеха такого аттракциона. Отчасти из-за печальной судьбы оригинального лайнера, который, находясь не на первом месте в списке крупнейших морских крушений, обладает трагическим шлейфом. Сычуаньский «Титаник», строительство которого продвигается гораздо быстрее, в этом случае обгоняет австралийский за счет своей неподвижности.

Стратегия «Титаник» для рулетки 31.05.2020

Сайт функционирует поддержке Федерального агентства коммуникациям.

Зарегистрировано Федеральной службой связи, информационных технологий коммуникаций. Свидетельства о регистрации ЭЛ № ФС 77 — 76208 от 8 июля 2020 года, ЭЛ № ФС 77 — 72003 от 26 декабря 2020 года

Все права защищены

30 января 2020

22 января 2020

22 августа 2020

10 мая 2020

24 октября 2020

27 сентября 2020

5 сентября 2020

24 апреля 2020

22 апреля 2020

31 марта 2020

1 декабря 2020

27 ноября 2020

22 октября 2020

Авторское право на систему визуализации содержимого портала iz.ru, а также на исходные данные, включая тексты, фотографии, аудио- и видеоматериалы, графические изображения, иные произведения и товарные знаки принадлежит ООО «МИЦ «Известия». Указанная информация охраняется в соответствии с законодательством РФ и международными соглашениями.

Частичное цитирование возможно только при условии гиперссылки на iz.ru.

АО «АБ «РОССИЯ» — партнер рубрики «Экономика»

Сайт функционирует поддержке Федерального агентства коммуникациям.

Ответственность за содержание любых рекламных материалов, размещенных на портале, несет рекламодатель.

Новости, аналитика, прогнозы и другие материалы, представленные на данном сайте, не являются офертой или рекомендацией к покупке или продаже каких-либо активов.

Зарегистрировано Федеральной службой по надзору в сфере связи, информационных технологий и массовых коммуникаций. Свидетельства о регистрации ЭЛ № ФС 77 — 76208 от 8 июля 2020 года, ЭЛ № ФС 77 — 72003 от 26 декабря 2020 года

Все права защищены © ООО «МИЦ «Известия», 2020

Kaggle и Titanic — еще одно решение задачи с помощью Python

Хочу поделиться опытом работы с задачей известного конкурса по машинному обучению от Kaggle. Этот конкурс позиционируется как конкурс для начинающих, а у меня как раз не было почти никакого практического опыта в этой области. Я немного знал теорию, но с реальными данными дела почти не имел и с питоном плотно не работал. В итоге, потратив пару предновогодних вечеров, набрал 0.80383 (первая четверть рейтинга).

Включаем подходящую для работы музыку и начинаем исследование.

Конкурс «по титанику» был уже неоднократно отмечен на Хабре. Особенно хотелось бы отметить последнюю статью из списка — оказывается, что исследование данных может быть не менее интригующим чем хороший детективный роман, а отличный результат (0.81340) можно получить не только Random Forest классификатором.

  • habrahabr.ru/company/microsoft/blog/268039 — Предсказание выживания пассажиров Титаника при помощи Azure Machine Learning
  • habrahabr.ru/post/165001 — Data Mining: Первичная обработка данных при помощи СУБД
  • habrahabr.ru/company/mlclass/blog/248779 — Когда данных действительно много: Vowpal Wabbit
  • habrahabr.ru/post/272201 — Устойчивая красота неприличных моделей
  • habrahabr.ru/post/202090 — Основы анализа данных на python с использованием pandas+sklearn
  • habrahabr.ru/company/mlclass/blog/270973 — Титаник на Kaggle: вы не дочитаете этот пост до конца

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

  • habrahabr.ru/post/270367 — Как я победил в конкурсе BigData от Beeline

Инструментарий

Для решения задачи я использую Python-стек технологий. Этот подход не является единственно возможным: существуют R, Matlab, Mathematica, Azure Machine Learning, Apache Weka, Java-ML и я думаю список можно еще долго продолжать. Использование Python имеет ряд преимуществ: библиотек действительно много и они отличного качества, а поскольку большинство из них представляют собой обертки над C-кодом они еще и достаточно быстрые. К тому же построенная модель может быть легко запущена в эксплуатацию.

Должен признаться, что я не очень большой поклонник скриптовых нестрого-типизированных языков, но богатство библиотек для python не позволяет его как-либо игнорировать.

Запускать все будем под Linux (Ubuntu 14.04). Понадобятся: python 2.7, seaborn, matplotlib, sklearn, xgboost, pandas. Вообще обязательны только pandas и sklearn, а остальные нужны для иллюстрации.

Под Linux библиотеки для Python можно устанавливать двумя способами: штатным пакетным (deb) менеджером или через питоновскую утилиту pip.

Установка deb-пакетами проще и быстрее, но зачастую библиотеки там устаревшие (стабильность превыше всего).

Установка пакетов через pip дольше (будет произведена компиляция), но с ней можно рассчитывать на получение свежих версий пакетов.

Так каким именно образом лучше устанавливать пакеты? Я использую компромисс: массивные и требующие множества зависимостей для сборки NumPy и SciPy ставлю из DEB-пакетов.

А остальные, более легкие пакеты, устанавливаю через pip.

Если я что-то забыл — то все нужные пакеты как правило легко вычисляются и устанавливаются аналогичным способом.

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

Данные

Скачаем исходные данные для задачи и посмотрим что же нам выдали.

Данных прямо скажем не очень много — всего 891 пассажир в train-выборке, и 418 в test-выборке (одна строчка идет на заголовок со списком полей).

Откроем train.csv в любом табличном процессоре (я использую LibreOffice Calc) чтобы визуально посмотреть данные.

Видим следующее:

  • Возраст заполнен не у всех
  • Билеты имеют какой-то странный и неконсистентный формат
  • В именах есть титул (мисс, мистер, миссис и т.д.)
  • Номера кают прописаны мало у кого (тут есть леденящая душу история почему)
  • В существующих номерах кают видимо прописан код палубы (так и есть, как оказалось)
  • Также, согласно статье, в номере каюты зашифрована сторона
  • Сортируем по имени. Видно, что многие путешествовали семьями, и виден масштаб трагедии — часто семьи оказались разделены, выжила лишь часть
  • Сортируем по билету. Видно, что по одному коду билета путешествовало сразу несколько людей, причем часто — с разными фамилиями. Беглый взгляд вроде бы показывает, что люди с одинаковым номером билета часто разделяют одну и ту же участь.
  • У части пассажиров не проставлен порт посадки

Вроде приблизительно все ясно, переходим непостредственно к работе с данными.

Загрузка данных

Чтобы не зашумлять дальшейший код сразу приведу все используемые импорты:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import xgboost as xgb
import re
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.grid_search import GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.svm import SVC
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.cross_validation import StratifiedKFold
from sklearn.cross_validation import KFold
from sklearn.cross_validation import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn import metrics

Наверное большая часть моей мотивации к написанию этой статьи вызвана восторгом от работы с пакетом pandas. Я знал о существовании этой технологии, но не мог даже представить насколько приятно с ней работать. Pandas — это Excel в командной строке с удобной функциональностью по вводу/выводу и обработке табличных данных.

Загружаем обе выборки.

Собираем обе выборки (train-выборку и test-выборку) в одну суммарную all-выборку.

Зачем это делать, ведь в test-выборке отсутствует поле с результатирующим флагом выживаемости? Полная выборка полезна для вычисления статистики по всем остальным полям (средние, медианы, квантили, минимумы и максимумы), а также связи между этими полями. То есть, считая статистику только по train-выборке, мы фактически игнорируем часть очень полезной для нас информации.

Анализ данных

Анализ данных в Python можно осуществлять сразу несколькими способами, например:

  • Вручную готовить данные и выводить через matplotlib
  • Использовать все готовое в seaborn
  • Использовать текстовый вывод с группировкой в pandas

Мы попробуем все три, но сначала запустим самый простой текстовый вариант. Выведем статистику выживаемости в зависимости от класса и пола.

Видим, что в шлюпки действительно сажали сначала женщин — шанс женщины на выживаемость составляет 96.8%, 92.1% и 50% в зависимости от класса билета. Шанс на выживание мужчины гораздно ниже и составляет соответственно 36.9%, 15.7% и 13.5%.

С помощью pandas быстро посчитаем сводку по всем числовым полям обеих выборок — отдельно по мужчинам и по женщинам.

Видно, что по средним и перцентилям все в целом ровненько. Но у мужчин по выборкам отличаются максимумы по возрасту и по стоимости билета. У женщин в обеих выборках также есть различие в максимуме возраста.

Сборка дайджеста по данным

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

Небольшое пояснение по полям дайджеста:

  • ages — справочник медиан возрастов в зависимости от пола;
  • fares — справочник медиан стоимости билетов в зависимости от класса билета;
  • titles — справочник титулов;
  • families — справочник идентификаторов семейств (фамилия + количество членов семьи);
  • cabins — справочник идентификаторов кают;
  • tickets — справочник идентификаторов билетов.

Справочники для восстановления отсутствующих данных (медианы) мы строим по комбинированной выборке. А вот справочники для перевода категориальных признаков — только по тестовым данным. Идея заключалась в следующем: допустим в train-наборе у нас есть фамилия «Иванов», а в test-наборе этой фамилии нет. Знание внутри классификатора о том что «Иванов» выжил (или не выжил) никак не поможет в оценке test-набора, поскольку в test-наборе этой фамилии все равно нет. Поэтому в справочник добавляем только те фамилии которые есть в test-наборе. Еще более правильным способом будет добавлять в справочник только переcечение признаков (только те признаки которые есть в обоих наборах) — я попробовал, но результат верификации ухудшился на 3 процента.

Выделяем признаки

Теперь нам нужно выделить признаки. Как уже было сказано — многие классификаторы умеют работать только с числами, поэтому нам нужно:

  • Перевести категории в числовое представление
  • Выделить неявные признаки, то есть те которые явно не заданы (титул, палуба)
  • Что-то сделать с отсутствующими значениями

Есть два способа преобразования категориального признака в числовой. Можем рассмотреть задачу на примере пола пассажира.

В первом варианте мы просто меняем пол на некоторое число, например мы можем заменить female на 0, а male на 1 (кругляшок и палочка — очень удобно запоминать). Такой вариант не увеличивает число признаков, однако внутри признака для его значений теперь появляется отношение «больше» и «меньше». В случае когда значений много, такое неожиданное свойство признака не всегда желательно и может привести к проблемам в геометрических классификаторах.

Второй вариант преобразования — завести две колонки «sex_male» и «sex_female». В случае мужского пола мы будем присваивать sex_male=1, sex_female=0. В случае женского пола наоборот: sex_male=0, sex_female=1. Отношений «больше»/«меньше» мы теперь избегаем, однако теперь у нас стало больше признаков, а чем больше признаков тем больше данных для тренировки классификатора нам нужно — эта проблема известна как «проклятие размерности». Особенно сложной становится ситуация когда значений признаков очень много, например идентификаторы билетов, в таких случаях можно например откинуть редко встречающиеся значения подставив вместо них какой-нибудь специальный тег — таким образом уменьшив итоговое количество признаков после расширения.

Небольшой спойлер: мы делаем ставки в первую очередь на классификатор Random Forest. Во-первых все так делают, а во-вторых он не требует расширения признаков, устойчив к масштабу значений признаков и рассчитывается быстро. Несмотря на это, признаки мы готовим в общем универсальном виде поскольку главная поставленная перед собой цель — исследовать принципы работы с sklearn и возможности.

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

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

Создаем метод для преобразования наборов данных.

Небольшое пояснение по добавлению новых признаков:

  • добавляем собственный индекс каюты
  • добавляем собственный индекс палубы (вырезаем из номера каюты)
  • добавляем собственный индекс билета
  • добавляем собственный индекс титула (вырезаем из имени)
  • добавляем собственный индекс идентификатора семьи (формируем из фамилии и численности семейства)

В общем, мы добавляем в признаки вообще все что приходит в голову. Видно что некоторые признаки дублируют друг друга (например расширение и замена пола), некоторые явно коррелируют друг с другом (класс билета и стоимость билета), некоторые явно бессмысленны (вряд ли порт посадки влияет на выживаемость). Разбираться со всем этим будем позже — когда будем производить отбор признаков для обучения.

Преобразуем оба имеющихся набора и также опять создаем объединенный набор.

Хотя мы нацелились на использование Random Forest хочется попробовать и другие классификаторы. А с ними есть следующеая проблема: многие классификаторы чувствительны к масштабу признаков. Другими словами если у нас есть один признак со значениями от [-10,5] и второй признак со значениями [0,10000] то одинаковая в процентном отношении ошибка на обоих признаках будет приводить к большому отличию в абсолютном значении и классификатор будет трактовать второй признак как более важный.

Чтобы избежать этого мы приводим все числовые (а других у нас уже нет) признаки к одинаковой шкале [-1,1] и нулевому среднему значению. Сделать это в sklearn можно очень просто.

Сначала мы вычисляем коэффициенты масштабирования (снова пригодился полный набор), а затем масштабируем оба набора индивидуально.

Выбор признаков

Ну и пришел момент когда мы можем отобрать те признаки, с которыми будем работать дальше.

Просто ставим комментарий на ненужных и запускаем обучение. Какие именно не нужны — решать вам.

Еще раз анализ

Поскольку теперь у нас появилась колонка в которой прописан диапазон в который попадает возраст пассажира — оценим выживаемость в зависимости от возраста (диапазона).

Видим, что шансы на выживание велики у детей до 5 лет, а уже в пожилом возрасте шанс выжить падает с возрастом. Но это не относится к женщинам — у женщины шанс на выживаемость велик в любом возрасте.

Попробуем визуализацию от seaborn — уж очень красивые картинки она дает, хотя я больше привык к тексту.

Красиво, но например корреляция в паре «класс-пол» не очень наглядна.

Оценим важность наших признаков алгоритмом SelectKBest.

Вот вам статья с описанием того как именно он это делает. В параметрах SelectKBest можно указать и другие стратегии.

В принципе, мы и так уже все знаем — очень важен пол. Титулы важны — но у них сильная коррелляция с полом. Важен класс билета и каким-то образом палуба «F».

Оценка классификации

Перед тем как начинать запуск какой-либо классификации, нам нужно понять каким образом мы будем ее оценивать. В случае с конкурсами Kaggle все очень просто: мы просто читаем их правила. В случае Титаника оценкой будет служить отношение правильных оценок классификатора к общему числу пассажиров. Иными словами эта оценка называется accuracy.

Но прежде чем отправлять результат классификации по test-выборке на оценку в Kaggle, нам неплохо бы сначала самим понять хотя бы приблизительное качество работы нашего классификатора. Понять это мы сможем только используя train-выборку, поскольку только она содержит промаркированные данные. Но остается вопрос — как именно?

Часто в примерах можно увидеть нечто подобное:

То есть мы обучаем классификатор на train-наборе, после чего на нем же его и проверяем. Несомненно в какой-то степени это дает некую оценку качества работы классификатора, но в целом этот подход неверен. Классификатор должен описывать не данные на котором его тренировали, а некую модель которая эти данные сгенерировала. В противном случае классификатор отлично подстраивается под train-выборку, при проверке на ней же показывает отличные результаты, однако при проверке на неком другом наборе данных с треском сливается. Что и называется overfitting.

Правильным подходом будет разделение имеющегося train-набора на некоторое количество кусков. Мы можем взять несколько из них, натренировать на них классификатор, после чего проверить его работу на оставшихся. Производить этот процесс можно несколько раз просто тасуя куски. В sklearn этот процесс называется кросс-валидацией.

Можно уже представить в голове циклы которые будут разделять данные, производить обучение и оценивание, но фишка в том, что все что нужно для реализации этого в sklearn — это определить стратегию.

Здесь мы определяем достаточно сложный процесс: тренировочные данные будут разделены на три куска, причем записи будут попадать в каждый кусок случайным образом (чтобы нивелировать возможную зависимость от порядка), кроме того стратегия отследит чтобы отношение классов в каждом куске было приблизительно равным. Таким образом мы будем производить три измерения по кускам 1+2 vs 3, 1+3 vs 2, 2+3 vs 1 — после этого сможем получить среднюю оценку аккуратности классификатора (что будет характеризовать качество работы), а также дисперсию оценки (что будет характеризовать стабильность его работы).

Классификация

Теперь протестируем работу различных классификаторов.

Метод linear_scorer нужен поскольку LinearRegression — это регрессия возвращающая любое вещественное число. Соответственно мы разделяем шкалу границей 0.5 и приводим любые числа к двум классам — 0 и 1.

Алгоритм Random Forest победил и дисперсия у него неплохая — кажется он стабилен.

Еще лучше

Вроде все хорошо и можно отправлять результат, но остался один мутный момент: у каждого классификатора есть свои параметры — как нам понять что мы выбрали наилучший вариант? Без сомнения можно долго сидеть и перебирать параметры вручную — но что если поручить эту работу компьютеру?

Подбор можно сделать еще тоньше при наличии времени и желания — либо изменив параметры, либо используя другую стратегию подбора, например RandomizedSearchCV.

Пробуем xgboost

Все хвалят xgboost — давайте попробуем и его.

Почему-то тренировка зависала при использовании всех ядер, поэтому я ограничился одним потоком (n_jobs=1), но и в однопоточном режиме тренировка и классификация в xgboost работает очень быстро.

Результат

Классификатор выбран, параметры рассчитаны — осталось сформировать результат и отправить на проверку в Kaggle.

Вообще стоит отметить несколько моментов в подобных соревнованиях, которые показались мне интересными:

  • Борьба в топе идет на сотые доли процентов — поэтому решает даже одна правильная или неправильная классификация из верификационного набора. Также на результат влияют случайные модификации параметров и алгоритма;
  • Лучший результат при локальной кросс-валидации не гарантирует лучшего результата при проверке верификационного набора. Бывает что реализация вроде бы разумной гипотезы улучшает локальный результат кросс-валидации и ухудшает результат проверки на Kaggle;
  • Вышеперечисленный два пункта приводят к третьему — скрипт и набор для отправки на верификацию должны находится под управлением любой системы управления версиями — в случае прорыва в счете нужно обязательно коммититься с указанием полученного результата в описании коммита;
  • Само соревнование несколько искусственно. В реальном мире у вас нет верификационного набора — только размеченная выборка на которой можно проводить кросс-валидацию, окончательное качество работы алгоритма оценивается как правило косвенно, например, по количеству жалоб пользователей;
  • Не очень понятна максимальная степень качества оценки которую можно получить машинным обучением на задаче — размер обучающего набора не очень высок, а сам процесс неочевиден. На самом деле — что такое процесс в случае бегства пассажиров с гибнущего корабля? Вполне вероятно, что не все усаженные в лодки выжили, также как вполне вероятно что не все неусаженные в лодки погибли — часть процесса должна быть очень хаотична и должна сопротивляться какому-либо моделированию.

Глава, в которой автор одновременно испытал удивление и просветление

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

На ум приходит следующий вариант: кто-то зарегистрировал учетку с которой начал перебором подбирать (позволяется не более 10 попыток в день) правильные ответы. Если я правильно понимаю это является разновидностью задач о взвешивании.

Однако подумав еще немного, нельзя не улыбнуться своей догадке: мы говорим о задаче, ответы по которой уже давно известны! В самом деле, гибель Титаника была потрясением для современников, и этому событию были посвящены фильмы, книги и документалистика. И скорее всего где-то есть полный поименный перечень пассажиров Титаника с описанием их судьбы. Но к машинному обучению это уже не относится.

Однако из этого можно и нужно сделать вывод, который я собираюсь применить в следующих конкурсах — необязательно (если это не запрещено правилами конкурса) ограничиваться только данными которые выдал организатор. Например по известному времени и месту можно выявить погодные условия, состояние рынков ценных бумаг, курсы валют, является ли день праздничным — другими словами можно поженить данные от организаторов с любыми доступными наборами публичных данных которые могут помочь в описании характеристик модели.

Полный код скрипта есть тут. Не забудьте выбрать признаки для обучения.

Рейтинг казино по бонусам и размеру Джекпотов:
Добавить комментарий