Используйте это, чтобы по-настоящему сделать ваши конвейеры ML четкими.

Когда вы обучаете модели машинного обучения, одним из наиболее важных шагов, которые вы можете предпринять в своих моделях, является выбор правильных протоколов оценки. То, как вы решите оценивать производительность модели, может изменить результаты ваших алгоритмов обучения. Когда дело доходит до регрессии, большинство людей склонны придерживаться либо MSE, либо RMSE. Это отличные алгоритмы, но они не лишены недостатков. Существует также популярный показатель R², который отлично помогает нам сравнивать модели (и скорректированный R², его модифицированный брат). Но это не все. Иногда в машинном обучении вы можете написать свои собственные метрики регрессии.

Многие из них очень похожи друг на друга. Однако такие метрики, как пуассоновское отклонение, — это отдельная тема. И их сравнение может дать вам очень интересные идеи. Я работал с прогонами, в которых у одной модели было лучше R²/MSE, но хуже ошибка Пуассона. Переход с одной ошибкой не рассказал бы вам всю историю.

Обе таблицы были созданы с использованием одного и того же набора данных. Разница только в самих моделях. Глядя на результаты, что бы вы выбрали? Подумайте об этом и поделитесь в комментариях ниже.

Теперь, когда вы видите мир за пределами стандартных MSE/RMSE/R², читайте дальше. В этой статье я поделюсь кодом того, как вы можете создавать такие отчеты. Вы можете скопировать и вставить код, которым я делюсь, но я бы порекомендовал также подумать о том, какую метрику вы должны использовать, когда и как вы можете улучшить основную часть, которой я делюсь здесь.

Настройка основных параметров

Вы, очевидно, хотите начать с настройки основ. Мы делаем это, делая следующее:

names=["RFR","Lasso","ElasticNet","KNR"]
models=[RandomForestRegressor(),Lasso(),ElasticNet(),neighbors.KNeighborsRegressor()]
bestScore=100000
scoring = ['neg_mean_squared_error','explained_variance','max_error','neg_mean_absolute_error',
'neg_root_mean_squared_error',
'neg_mean_squared_log_error',
'neg_median_absolute_error',
'r2',
'neg_mean_poisson_deviance',
'neg_mean_gamma_deviance']

Обратите внимание, что вместо жесткого кодирования значений мы храним их в переменных. Это решает несколько задач. Во-первых, это значительно упрощает изменение кода позже. Хотите добавить новую модель/удалить слабую? Просто настройте модели и список имен. Хотите добавить свои собственные необычные метрики/метрики из других источников? Измените свой рейтинговый список. Во-вторых, это делает ваш код короче. Вместо того, чтобы печатать 20 моделей, я могу обратиться к ним в виде списка. Поскольку вам нужно повторно использовать свой анализ, это удобство действительно складывается.

Напишите свою функцию ошибки

Теперь, когда мы настроили наши компоненты, пришло время написать нашу функцию вычисления ошибки.

def error_metrics(i, train_data, train_targ, kfold):
    """
    Compute all the relevant metrics. 
    @params
    @i-model number
    @train_data: X values (predictors)
    @train_targ: predictions (y vals)
    @kfold: k value for cross val
"""
    
    model=[models[i]]
    error_metrics = pd.DataFrame()
    # define the function used to evaluate a given configuration
    for scor in scoring:
        score = []
        for mod in model:
            result=""
            try: 
              result = model_selection.cross_val_score(estimator= mod, X=train_data, y=train_targ,cv=kfold,scoring=scor )
              score.append(result.mean())
            except Exception:
              score.append("Error not Applicable")
error_metrics[scor] =pd.Series(score)
        
    return error_metrics

Большинство из них относительно просты. Но сейчас у нас нет поддержки пользовательских метрик ошибок. Как мы это делаем? Посмотрите на раздел try-кроме. Наши пользовательские ошибки/ошибки, не относящиеся к scikit, вызовут исключение, когда мы попытаемся выполнить часть перекрестной проверки. Мы могли бы добавить дополнительную проверку. Если оценка является одной из наших специальных метрик, мы добавим непредвиденные обстоятельства для выполнения расчетов. Если вам нужен лучший способ реализовать это, обратитесь ко мне. Но я бы порекомендовал сначала поработать над этим самостоятельно. Это хорошая практика. Вы всегда можете обратиться ко мне за обзором, указателями и обсуждением. Удачного кодирования.

Если вам понравилась эта статья, посмотрите мой другой контент. Я регулярно публикую сообщения на Medium, YouTube, Twitter и Substack (все ссылки ниже). Я занимаюсь искусственным интеллектом, машинным обучением, технологиями и разработкой программного обеспечения. Если вы готовитесь к собеседованиям по кодированию, ознакомьтесь с моим бесплатным еженедельным информационным бюллетенем Coding Interviews Made Simple. Не стесняйтесь обращаться, если у вас есть интересные проекты/идеи для меня.

Для денежной поддержки моей работы следуют мои Venmo и Paypal. Любая сумма приветствуется и очень помогает. Пожертвования открывают доступ к эксклюзивному контенту, например анализу документов, специальному коду, консультациям и льготным тарифам на пробные интервью:

Венмо: https://account.venmo.com/u/FNU-Devansh

Paypal: paypal.me/ISeeThings

Свяжитесь со мной

Если эта статья заставила вас обратиться ко мне, то этот раздел для вас. Вы можете связаться со мной на любой из платформ или ознакомиться с любым другим моим контентом. Если вы хотите обсудить репетиторство, напишите мне в LinkedIn, IG или Twitter. Если вы хотите поддержать мою работу, воспользуйтесь моей бесплатной реферальной ссылкой на Robinhood. Мы оба получаем бесплатный запас, и вы ничем не рискуете. Таким образом, если вы не используете его, вы просто потеряете бесплатные деньги.

Ознакомьтесь с другими моими статьями на Medium. : https://rb.gy/zn1aiu

Мой Ютуб: https://rb.gy/88iwdd

Свяжитесь со мной в LinkedIn. Подключаемся: https://rb.gy/m5ok2y

Мой Инстаграм: https://rb.gy/gmvuy9

Мой Твиттер: https://twitter.com/Machine01776819

Если вы готовитесь к программированию/техническим интервью: https://codinginterviewsmadesimple.substack.com/

Получите бесплатный сток на Robinhood: https://join.robinhood.com/fnud75