Некоторые из наиболее интересных функций, которые можно использовать, из библиотеки SkLearn.
Sk Learn, вероятно, является одним из самых популярных модулей машинного обучения для Python. На это есть веская причина, поскольку у SkLearn есть фантастический каталог используемых моделей, инструментов и даже готового кода! Хотя есть некоторые довольно популярные модели, которые очень хорошо известны, SkLearn - настолько большая библиотека, что можно легко забыть обо всех функциях и классах, которые идут с ней. Хотя документация - это отличное место для старта, но еще один отличный способ расширить ваши возможности с библиотекой - это лучше познакомиться с малоизвестными моделями. Есть много отличных моделей, которые используются крайне редко. Сегодня я хотел представить вашему вниманию некоторые из моих любимых моделей от SkLearn, так что, возможно, в следующий раз, когда вы столкнетесь с уникальной проблемой, вы уже будете знать необходимую модель и примените ее
Данные
Сегодня мы собираемся подбирать модели, чтобы продемонстрировать их использование. Конечно, для этого нам потребуются одномерные массивы, которые нужно передать, чтобы предсказать особенности. Проще говоря,
нам нужны данные для тренировок.
Учитывая, что мы работаем в юпитере, я решил, что он должен быть с открытым исходным кодом, поэтому, вы можете увидеть исходный код здесь:
https://github.com/emmettgb/Emmetts-DS-NoteBooks/blob/master/Python3/15%20sklearn%20models.ipynb
Я собираюсь использовать файл .CSV, который у меня есть, под названием weatherHistory.csv:
А теперь посмотрим !:
Поскольку мы собираемся использовать как классификационные, так и непрерывные модели, мне понадобятся как категориальная, так и непрерывная Y. Для непрерывной функции я решил выбрать температуру. Для классификации я пошел дальше и использовал функцию типа осадков. Для своих функций прогнозирования я собираюсь использовать функцию влажности:
Разделим данные на 2 датасета для тренировок и теста:
Конечно, я не собираюсь много долго эти данные только для того, чтобы соответствовать некоторым моделям из примера. Помните, что эти модели не подходят для данных с пустыми значениями (пропущенными), поэтому давайте получим сумму количества пропущенных значений в нашем фреймворке данных.
что мы видим,
Отбрасываем ненужные данные :
Теперь давайте поместим это в одномерные массивы:
SkLearn часто требует, чтобы эти массивы были преобразованы в вертикальные, так как он предпочитает элементы в столбцах матриц, а не в строках матриц. Давайте изменим форму этих матриц, и тогда мы будем готовы использовать несколько моделей . Для этого нам нужно превратить эти одномерные массивы в массивы NumPy. Это связано с тем, что SkLearn гораздо более интегрирован с NumPy, хотя во многих случаях можно использовать Pandas Series, массивы NumPy намного более динамичны и широко используются:
№1: Изотоническая / монотонная регрессия
Изотоническая или монотонная регрессия - это потрясающая форма регрессии, о которой многие инженеры по машинному обучению даже не слышали. изотоническая регрессия может быть очень точной моделью для прогнозирования непрерывных целей, но также имеет свои ограничения в этом отношении.
В статистике , изотонические регрессии или монотонная регрессия является методом подгонки свободной формы линии к последовательности наблюдений таким образом, что встроенная линия не убывает (или не возрастает) всюду, и ложь как можно ближе к наблюдениям , как это возможно. Изотоническая регрессия - https://ru.qaz.wiki/wiki/Isotonic_regression
Прекрасным примером этого является то, что модель часто склонна к чрезмерной подгонке, и часто для того, чтобы модель работала хорошо, нужно уравновесить смещение и попытаться повысить ее точность.
Другая важная проблема этой модели заключается в том, что данные не должны уменьшаться. Это означает, что типичные приложения этой модели часто будут задействованы в экономических и бизнес-сценариях. Имея это в виду, хотя эта модель может быть очень полезной для тех, кто работает с экономическими данными, для многих научных работ она не обязательно лучшая.
Однако изотоническая регрессия при правильном применении и сбалансированное смещение могут быть невероятно мощной прогностической моделью! Если вы хотите узнать больше об изотонической регрессии, вы можете ознакомиться с этими двумя статьями:
Построение и использование модели изотонической регрессии в C ++ https://towardsdatascience.com/building-and-using-an-isotonic-regression-model-in-c-f6789d46ab07
Изотоническая регрессия - самая крутая модель машинного обучения, о которой вы, возможно, не слышали https://towardsdatascience.com/isotonic-regression-is-the-coolest-machine-learning-model-you-might-not-have-heard-of-3ce14afc6d1e
Чтобы соответствовать этой модели, нам сначала нужно использовать функцию make_regressor, которая построит нам базовую модель регрессии, на которой мы можем построить изотоническую регрессию поверх. Давайте сделаем это:
№2: Orthagonal Matching Pursuit.
Еще один очень полезный инструмент, который применяется только к определенным характеристикам данных, - это Orthagonal Matching Pursuit. Эта модель используется для получения сигналов с разреженных данных и удаления шума. Это означает, что эти алгоритмы машинного обучения используются для исправления определенных ыходных сигналов на основе данных, что, на мой взгляд, является довольно прекрасным приложением для машинного обучения.
Хотя первичное использование Orthagonal Matching Pursuit может быть относительно простым, использование этой модели потенциально может быть куда более широким. Учитывая, что это довольно уникальная модель , как же она работает?
Orthagonal Matching Pursuit - Чтобы проанализировать это определение, давайте рассмотрим слова по отдельности:
- Orthagonal - ортогональный , смотри: http://mathprofi.ru/metod_ortogonalnogo_preobrazovaniya_kf.html
- Matching - объединение наблюдений со значениями.
- Pursuit - Поиск (погоня).
По сути, мы ищем идеальные совпадения с нашими данными в тех случаях, когда они находятся в многомерном диапазон данных, D . Идея состоит в том, чтобы создать приблизительный сигнал (f) из гильбертова пространства (H) в виде взвешенной суммы статистических функций, то есть PDF / CDF / Gamma. Хотя данные, которые у нас есть, определенно не подходят для этой конкретной модели, поэтому вместо этого для этого примера я собираюсь создать несколько разреженных сигналов для передачи в качестве данных:
Теперь искажаем наши целевые данные:
И подходит наша модель:
№3: LARS LASSO
Если вы не новичок в машинном обучение , вероятно, вы слышали о регрессии Лассо. Регрессия лассо - фантастический и довольно стандартизированный инструмент, который часто используется в машинном обучении в течение длительного периода времени. В большинстве случаев при прогнозировании непрерывных целей.
Однако модель лассо LARS не является обычным регрессором лассо. LARS в «модели лассо LARS» является сокращением от регрессии по наименьшему углу. Регрессия по наименьшему углу - это алгоритм машинного обучения для прогнозирования непрерывных функций. Это наиболее полезный инструмент для работы с данными с невероятно большими размерами данных. Эта модель работает с линейным подмножеством ковариат.
Метод наименьших углов (англ. least angle regression, LARS) - алгоритм отбора признаков в задачах линейной регрессии. Алгоритм предложили Бредли Эфрон, Тревор Хасти и Роберт Тибширани [1].
LARS решает следующую задачу. Пусть назначена линейная регрессионная модель. При большом количестве свободных переменных возникает проблема неустойчивого оценивания весов модели. LARS предлагает метод выбора такого набора свободных переменных, который имел бы наиболее значимую статистическую связь с зависимой переменной. Также LARS предлагает метод оценки весов.
Алгоритм LARS похож на алгоритм шаговой регрессии. Различие в том, что алгоритм LARS, вместо последовательного добавления свободных переменных, на каждом шаге изменяет их веса. Веса увеличиваются так, чтобы доставить наибольшую корреляцию с вектором регрессионных остатков. Основным достоинством LARS является то, что он выполняется за число шагов, не превышающее число свободных переменных. Частным случаем алгоритма LARS является алгоритм LASSO.
№4: Регрессия по наименьшему углу
Как обсуждалось в аналогичном применении регрессии наименьшего угла к модели лассо, регрессия наименьшего угла - это модель, используемая для прогнозирования непрерывных функций, которые обычно работают с линейным подмножеством ковариат. Это наиболее существенное различие между регрессией наименьшего угла и регрессией LARS Lasso. Регрессия наименьшего угла будет относиться к линейной версии этой модели.
С вычислительной точки зрения регрессия по наименьшему углу имеет то преимущество, что она такая же быстрая, как и прямой выбор. Хотя это огромное преимущество, его самая большая сила в сценариях, где p >> n. Если две переменные одинаково коррелированы, их коэффициенты должны увеличиваться с одинаковой скоростью.
№5: SGDRegressor
Еще одна замечательная реализация в SkLearn - это стохастический градиентный спуск. Градиентный спуск (https://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA)— метод нахождения локального минимума или максимума функции с помощью движения вдоль градиента. Для минимизации функции в направлении градиента используются методы одномерной оптимизации, например, метод золотого сечения. Также можно искать не наилучшую точку в направлении градиента, а какую-либо лучше текущей.
Наиболее простой в реализации из всех методов локальной оптимизации. Имеет довольно слабые условия сходимости, но при этом скорость сходимости достаточно мала (линейна). Шаг градиентного метода часто используется как часть других методов оптимизации, например, метод Флетчера — Ривса.
Градиент потери при стохастическом градиентном спуске оценивается для каждой выборки за итерацию, и модель обновляется по ходу с графиком убывающей силы, также известным как скорость обучения в терминах машинного обучения.
№6: Регрессия Хубера.
При использовании регрессивных методов обучения в моделях часто могут всплывать недостатки, которые трудно преодолеть. Это, безусловно, можно сказать о линейных моделях, которым может быть трудно идеально соответствовать разреженным данным или данным с несколькими измерениями. К счастью, в SkLearn есть достойная реализация регрессии Хубера. Функция потерь Хьюбера — это функция потерь, используемая в устойчивой регрессии, которая менее чувствительна к выбросам, чем квадратичная ошибка.(https://www.machinelearningmastery.ru/generalized-huber-regression-505afaff24c/)
Эту форму регрессии можно использовать для работы с аутлаерами в выборке и предотвращения ошибок моделирования, которые можно легко исправить с помощью типичных моделей, доступных в пакете SkLearn. Чрезмерная подгонка и избыточность данных обычно не являются проблемами, которые возникают при работе с этой моделью.
Регрессия Хубера оптимизирует квадрат потерь (среднеквадратичную ошибку) и значительно устойчива к выбросам по сравнению с такими моделями, как простая линейная регрессия. На самом деле существует очень интересная статья, опубликованная Артом Б. Оуэном из Стэнфордского университета, которую, возможно, стоит почитать тем, кто не знаком с этим методом моделирования.
Вот замечание, которое я нашел наиболее подходящим для анализа того, что именно эта модель будет делать с этими данными математически:
«Критерий наименьших квадратов хорошо подходит для yi с распределением Гаусса, но может дать плохую производительность, когда yi имеет более тяжелое хвостовое распределение или что почти то же самое, когда есть выбросы в выборке. Хубер (1981) описывает робастную оценку, использующую функцию потерь, на которую меньше влияют очень большие остаточные значения ».
Что и говорить, эта модель невероятно крутая!
Теперь, когда мы немного знакомы с этой моделью математически, мы можем рассмотреть возможность ее использования в Sklearn (это была шутка).
№7: Полиномиальная регрессия
Хотя эта «модель» может быть более концептуальной для использования с другими моделями, она, безусловно, будет невероятно полезной! Очень распространенный паттерн машинного обучения - использование нелинейных функций для создания линейных прогнозов. Это позволяет сохранить большую скорость модели, не теряя при этом мощности прогнозирования. Отличным примером этого является полиномиальная регрессия по сравнению с простой линейной регрессией.
В примерах, где используется полиномиальная регрессия, она соответствует более точной оценке данных, построенных с помощью функций. Благодаря использованию полиномиальных функций, эта модель может быть легко применена для решения широкого круга непрерывных задач.
Чтобы на самом деле использовать полиномиальную регрессию в sklearn, мы фактически собираемся использовать полиномиальные функции:
№8: Метод наименьших квадратов
Метод наименьших квадратов - еще одна действительно крутая математическая модель машинного обучения для прогнозирования непрерывных функций. Обычный метод наименьших квадратов также является линейной моделью и соответствует коэффициентам, которые созданы для минимизации суммы квадратов между точками в данных.
Веса для обычного метода наименьших квадратов в значительной степени зависят от независимости функций для прогнозирования цели. При этом эта модель невероятно полезна для реализации даже с одной функцией. Кроме того, он может использоваться с несколькими функциями, но, безусловно, потребуется, чтобы функции были хорошо взвешены по отношению к цели прогнозирования. Заглянув в это описание, легко увидеть, какую именно нишу в нашем арсенале машинного обучения займет такая модель, как обычный метод наименьших квадратов.
К сожалению, реализация OLS в SkLearn не так проста, как большинство других. Коэффициенты OLS содержатся под классами LinearRegression как .coef_:
№9-10: NuSVR
Возвращаясь к магии метода опорных векторов, позвольте мне познакомить вас с NuSVR. NuSVR, она конечно же, является той же моделью и машинной реализацией, что и NuSVC. Обе эти модели используют libsvm и параметр nu для управления количеством опорных векторов в моделе. Однако, в отличие от NuSVC, где nu заменяет C, здесь nu заменяет параметр epsilon эпсилон-SVR.
Преимущество использования этой модели заключается в том, что вам доступны параметры для настройки векторной машины, которая используется в помощи оценки проблемы регрессии. При этом эта модель отлично подходит для прогнозирования непрерывных функций с множеством функций, которые могут быть или не быть невероятно важными для нашей модели.
№11: Многозадачное LASSO
Как и в случае с лассо LARS, вероятно, вы слышали о регрессии лассо. Напоминаю, что это фантастическая нелинейная модель для прогнозирования непрерывных функций, которая очень часто используется мл специалистами. Разница в многозадачном lasso состоит в том, что многозадачный лассо будет использовать норму L1 / L2 в качестве регуляризации. (https://ru.coursera.org/lecture/vvedenie-mashinnoe-obuchenie/mietod-lasso-iSyMz)
Чтобы продемонстрировать это, давайте посмотрим на цель оптимизации для регрессии Лассо:
В этом примере || W || _21 будет изменено, чтобы соответствовать этой формуле для многозадачного лассо:
По сути, это означает, что мы получаем суммирование каждой строки.
№12: LinearSVC
LinearSVC - это тип модели опорных векторов. Реализация модели SkLearn была создана с использованием libsvm. Хотя ядро может быть нелинейным, его SMO обычно не очень хорошо масштабируется для большого объема выборок. Здесь пригодится классификатор линейных опорных векторов.
При этом, в Sklearn есть и другие отличные реализации SVC, которые могут быть даже более известными, LinearSVC, безусловно, является моделью, о которой стоит знать! SVC обычно работает в мультиклассовом режиме, в котором один класс взвешивается по сравнению с другим классом. В случае LinearSVC все эти классы сравниваются друг с другом, что делает модель более всеобъемлющей, чем у многих конкурентов SVC.
Что касается класса SkLearn, это отличная и почти безупречная реализация. Он невероятно хорошо поддерживает как плотные, так и разреженные данные и может быть невероятной моделью - на мой взгляд, одной из лучших для линейной классификации в Python!
№13: SGDClassifier
SGDRegressor, стохастический градиентный спуск - это когда каждый параметр модели используется для взвешивания функций на каждой итерации .SGDClassifier, конечно, представляет собой ту же концепцию, которая сейчас применяется к проблеме классификации. SGDClassifier -очень ресурсоемкая модель. Как и SGDRegressor, эта модель представляет собой отличную реализацию, которая может быть полезна, в частности, при работе с большим набором функций. Хотя вы можете получить падение производительности, вам потребуется решить, оправдывают ли полученные прогнозы затраченных мощностей. Установка SGDRegressor довольно проста, и, как и многие другие модели в этом списке, применять ее можно за 3 простых шага:
- импорт
- создание экземпляра
- прогнозирование
№13: Бернулли Наивный Байес Наивную байесовскую
Распределение Bernoulli
Возможно, вы знакомы с этим распределением, поскольку его CDF часто появляется рядом с моделями логистической классификации. Я бы сказал, что использование этой модели очень похоже на использование MultinomialNB. Однако, в то время как MultinomialNB работает значительно быстрее с метриками ивхождениями, BernoulliNB использует распределение Бернулли и предназначено для функций типа bool. Это, конечно, возвращает воспоминания о моем первоначальном заявлении, в котором Бернулли используется для LogisticRegression, при этом, как было сказано, эта модель, по сути, имеет то же самое применение - поэтому имеет смысл, что она использует то же распределение.
Хотя эта модель обычно используется для прогнозирования двоичных функций, сегодня мы просто собираемся передать некоторые типичные категориальные данные, которые могут быть более применимы к MultinomialNB. При этом важно помнить варианты использования для обеих этих моделей, потому что они очень мощные, но должны использоваться для соответствующих типов функций. Нет смысла использовать модель, если вы не понимаете цель, которую пытаетесь предсказать, и я думаю, что разница между этими моделями подчеркивает необходимость для специалистов по данным понимать, что разные модели требуют для работы разных типов функций.
№14: RidgeClassification
Гребневая регрессия или ридж-регрессия (англ. ridge regression) — один из методов понижения размерности. Применяется для борьбы с избыточностью данных, когда независимые переменные коррелируют друг с другом, вследствие чего проявляется неустойчивость оценок коэффициентов многомерной линейной регрессии.()
Если вы работали с моделями машинного обучения, особенно с непрерывными моделями, вероятно, вы слышали о гребневой регрессии. Гребневая регрессия - популярная модель, используемая для прогнозирования непрерывных функций. RidgeClassification, конечно, является классификационным эквивалентом этой точной модели для задач классификации. Классификационная версия модели преобразует цель в {-1, 1}, а затем моделирует ее в задачу регрессии с типичной регрессией . Я думаю, что это действительно крутая концепция, потому что применение регрессии и других непрерывных методов решения проблем к совершенно другой проблеме, такой как классификация, на мой взгляд, действительно круто. К счастью, хотя эта модель действительно потрясающая и кажется продвинутой концепцией, замечательный SkLearn сделал ее невероятно простой в использовании с типичным для библиотеки соглашением:
№15: CalibratedClassifierCV.
Вероятно, одна из самых крутых моделей в этом списке - CalibratedClassifierCV. Эта модель использует перекрестную проверку для оценки параметров классификатора. Модель может использоваться с логистическим регрессором в качестве основы, что сделает ее отличной моделью для классификации логических типов.
Однако, поскольку эта модель фактически может принимать разные базовые оценки, обычно используемая модель фактически является изотонической регрессией. Изотоническая регрессия - действительно крутая модель, но, на мой взгляд, она становится намного круче в сочетании с CalibratedClassifierCV. В этой модели пороговые функции могут привязаны привязаны к классам, а не к произвольным квантилям внутри непрерывных данных.
В отличие от многих других решений для прогнозирования целей в этом списке, это еще одно решение, которое станет дополнением к другим моделям. Другими словами, мы можем откалибровать практически любой классификатор, просто построив его для него. В этом примере я собираюсь построить одну модель, используя Gaussian Naive Bayes, другую модель , похожую на Multinomial Naive Bayes.
«Между прочим, на мой взгляд, это действительно классная методология, я действительно думаю, что SkLearn попал в точку в добавив эту модель».
Заключение
SkLearn - замечательная библиотека, которую инженеры по машинному обучению в наши дни могут принять во многих ситуациях. В библиотеке есть множество совершенно невероятных моделей, которые могут быть упущены мл специалистами. Сколько из этих моделей вы использовали? Я надеюсь, что эти описания и введение в эти удивительные модели были интересными и, возможно, даже полезными при выборе модели для вашего следующего проекта.