Pull to refresh
147
0
Yury Kashnitsky @yorko

Staff GenAI Field Solution Architect, Google Cloud

Send message

Короче любой скрипт на Kaggle расскажет вам больше про Xgboost в R. И на более-менее реальных данных, а не избитом Титанике. Если реально полезную статью писать — это надо разобраться, как чудо-зверь работает (в офиц документации неплохо рассказывается), что стоит за всеми этими параметрами в Xgboost и как их настраивать (hyperopt, sacred).
А так по первой же попавшейся ссылке больше узнаешь.

Круговая диаграмма, показывающая, сколько торта осталось.


image

Из того, что я слушал, понятней всего было в курсе "Эконометрика" на курсере — ВШЭ, Борис Демешев. И Andrew Ng, само собой.
А вот пример объяснения градиентного спуска. Хоть и на английском, но все очень наглядно.

Для новичков то как раз это очень нагруженная подача материала.
МНК можно объяснить и без дифференцирования таких сложных матричных выражений. Да и косяки с индексами…
Но интересно посмотреть, что дальше будет.
Не планируете материал сделать в виде тетрадок Jupyter?

У Xgboost есть обертка под R. А сия реализация идей Фридмана плюс десяток эвристик — это лучшее, что существует на сегодняшний день. Раз уж вы на Kaggle ссылаетесь.

Существуют модификации в виде приближенного сингулярного разложения и, соответственно, RandomizedPCA.

Не хотелось бы явно рекламой заниматься :) так что скажу, что этот курс упомянут в конце статьи с примером проекта, на которую я сослался выше.

Мне не приходилось разрабатывать сервисы, в которых надо каждый чих оптимизировать. Но, по «академическим» оценкам, масштабирование — это очень простая операция. Один раз для всей выборки посчитать mean и std по столбцам (O(n+m)), потом для каждого объекта вычесть и поделить (O(m)). При имеющейся выборке это миллисекунды. Но не знаю, может, даже это сказывается.

>>> Я отталкивался от того, что интерес несет именно дельта между ценой в объявлении и предсказанной ценой (выгода) <<
Прогноз остается тот же и при масштабированных признаках.

Насчет свободного члена. Все-таки при масштабированных признаках это будет именно «средняя» машина, для которой значение каждого признака равно среднему по этому признаку (x_i — mean_i = 0). И прогноз цены в ~1.2 млн. руб. выглядит намного разумней, чем прогноз в минус 176 млн. руб для «нулевого» авто :)

Да, у меня тоже обычный лассо лучше RF сработал. Но даже в тех случаях, когда RF лучше работает, понятно, какую модель выбирать, тут к гадалке не ходи :) Но рассказать об этом популярно стоит.
Однако часто в тех случаях, когда нам суперскорости прогноза не нужны и RF работает лучше, все равно выбирают линейные модели из-за «статистической значимости». Мне это не очень понятно. Что лучше на кросс-валидации и holdout-выборке работает, то вроде и нужно выбирать. Интересно будет про это послушать. И если не лень, можно посмотреть еще, как Xgboost и Vowpal Wabbit справится. Хотя на такой маленькой выборке вряд ли будут существенные отличия.
С Вашего позволения дам эти данные для анализа слушателям своего курса. Поанализируют, построят кучу картинок, много моделей сравнят, с помощью кривых обучения разберутся, как модели обобщаются и т.д. Вот пример проекта.
Автор, можно перед публикацией хотя бы заголовок свой перечитать?
Спасибо за классную тему, приложение и теорему Гаусса-Маркова.

Хотел бы указать на пару неточностей.

Данные стоит масштабировать. Тогда коэффициенты модели можно интерпретировать. Свободный член — как средний прогноз (в Вашей модели минус 1.76e+08 — бессмысленно, а с масштабированными переменными — 1201687, то есть прогноз для «средней» машины), а остальные коэффициенты — как значимость переменных. По коэффициентам Вашей модели не видно, например, что признак «mileage» — второй/третий по значимости. А при масштабировании так и получается (простая регрессия year: 73182, engine.power: 55295, mileage: -50211, Lasso, Ridge, случайный лес схожие результаты дают).
Влияние 3 главных признаков на цену в картинках:




И в формуле RMSE у Вас ошибка — число измерений надо бы под корень внести, и тогда все-таки около 120 тыс. руб. в среднем ошибка прогноза.

Кстати, если интересно посравнивать модели, предлагаю сеять random seed для полной воспроизводимости.
Ну в принципе считают, что на практике достаточно 10-20 наблюдений на одну независимую переменную, чтобы делать выводы о значимости влияния переменных на целевую. На cross-validated, конечно, задавался такой вопрос (и не раз).
Но все равно кажется, что это что-то из разряда spurious correlations. Или действительно скрытые факторы есть. Кстати, как авторы этой статьи пишут прямо в аннотации, пропорции лица не зависят от роста.
Но все равно такой вывод авторов «не удовлетворяет». А именно, последняя фраза аннотации «Together, these findings suggest that the sexually dimorphic facial width-to-height ratio may be an ‘honest signal’ of propensity for aggressive behaviour.» — это чисто «correlation doesn't imply causation».
Это уже надо смотреть на возможности API к AWS — boto. Да, цены указаны только за сам инстанс.
По мне, вот самый простой, читаемый и «поддерживаемый» вариант.
def check_answer():

    response = input('Вы уверены? [Д/н (Y/n)]: ').lower()

    if response in ['y', 'д']:
        return "True"
    elif response in ['n', 'н']:
        return "False"
    else:
        return 'Ругань'
Я для этого cloud.sagemath.com использую. Там и ядро Apache Saprk есть, и свои пакеты можно ставить. Но не думаю, что это боевой вариант. Я плачу $7 в месяц, и для серьезных задач этого мало — то ядро отвалится, то памяти не хватает, и все такое… А $49 в месяц им платить — неохота даже пробовать.
Тем не менее, для хостинга своих блокнотов без серьезных вычислений — отличный вариант.
Также неплохо для знакомства с Apache Spark.
Но если прям совсем боевая машина не нужна, посмотрите вариант Databricks Community Edition. 6 Гб они уже бесплатно дают. Можно попытаться грант у них выиграть.
Также надо быть уверенным, что вам именно Spark нужен. Может, сойдет и просто Vowpal Wabbit или Xgboost на одной машине с 30 ядрами?
Вот статья по теме. Тут VW на 2 порядка быстрее Hadoop-кластера.
Изменения не такие большие будут, вот несколько тьюториалов: один, два, три.
Для конфигурации самого Spark можно использовать скрипт spark-ec2, входящий в дистрибутив (в каталоге ec2). Он написан с использованием boto, так что вручную запрашивать инстансы не придется.
Пример:
sudo ./spark-ec2 --key-pair=spark_key_pair --identity-file=spark_key_pair.pem --region=us-west-2 --zone=us-west-2c --instance-type=m4.large --slaves=3 --spot-price=0.02 launch m4largex3-cluster

Главное — не упустить аргумент spot-price. Иначе инстансы по требованию пойдут, и это будет намного дороже.
Но тут немало подводных камней. Если самому скрипт модифицировать, туда добавятся 2-3 костыля. Как руки дойдут, выложу на GitHub.
А какие советы дадите?
Кроме тех предостережений Amazon — про пароли, IAM-пользователей, root-ключи, двухфакторную авторизацию и бережное хранение ключей.
В AWS можно настроить уведомления. Когда счет превышает какой-то порог (скажем, $50), приходит письмо.
Это сам тоже делаю, расписывать пока лень, но в скором времени — возможно.
Все зависит от Ваших потребностей. Вы описали сценарий, когда машина работает круглые сутки. Но если она Вам нужна, скажем, по 4 часа в день в будни для анализа данных, то за те же ~ $20 Вы можете использовать c3.4xlarge. На самом деле даже меньше, поскольку Вы платите по рыночной стоимости инстанса ($0.16-$0.2), а не заявленные $0.25.

Information

Rating
Does not participate
Location
Den Haag, Zuid-Holland, Нидерланды
Works in
Date of birth
Registered
Activity