Содержание
Нулевой отчет СЗВ-М в 2020 году: нужно ли сдавать?
Отчет СЗВ-М в 2020 году – сдается ежемесячно работодателями в ПФР. Нужно ли сдавать нулевой отчет в 2020 году? Если да, то как заполнять нулевой отчет?
Также см.:
Сдавать или нет пустой бланк в 2020 году?
Может ли вообще СЗВ-М в 2020 году быть нулевой. В самом отчете написано, что сведения в 2020 году подаются:
- на каждого работника, с которым в месяце, за который представляется СЗВ-М, заключен или продолжает действовать трудовой договор;
- на каждое физлицо, с которым в месяце, за который подается СЗВ-М, заключен/продолжает действовать/ прекращен ГПД на выполнение работ и оказание услуг (договоры авторского заказа, договоры об отчуждении исключительного права на произведения науки и т.п.). На таких лиц подаются сведения, если выплачиваемые им вознаграждения облагаются страховыми взносами в соответствии с законодательством РФ.
Получается, что нулевой отчетности в 2020 году, в принципе, быть не может, т. к. хоть один работник в фирме должен быть – ее директор (он может быть и учредителем).
Нулевая СЗВ-М в 2020 году: генеральный-единственный учредитель
Для подачи в ПФР СЗВ-М не имеет значения, заключен ли с директором трудовой договор или нет (речь идет о ситуации, когда директор и учредитель в одном лице) – организация все равно обязана сдавать СЗВ-М. На этот счет есть целый ряд разъяснений: письма ПФР от от 29.03.2018 № ЛЧ-08-24/5721, от 06.05.2016 № 08-22/6356, Минтруда от 16.03.2018 № 17-4/10/В-1846.
А нужно ли сдавать СЗВ-М в 2020 году на директора, если деятельность фирмой не ведется? Да, в таком случае тоже нужно сдавать отчет!
Нулевая СЗВ-М: должен ли сдавать отчет ИП?
Если ИП использует труд наемных работников или, например, заключал с физлицами ГПД, то в 2020 году он обязан представить сведения в отношении этих лиц по форме СЗВ-М.
Если же ИП работает один (сам на себя), то подавать данную отчетность в ПФР ему не нужно. Пенсионный фонд пишет об этом на своем официальном сайте.
Как заполнять нулевой СЗВ-М в 2020 году
Если организация или ИП не ведет деятельность, не выплачивает своим работникам зарплату и, соответственно, сдает нулевую отчетность, то на обязанность представить СЗВ-М данный факт не влияет. Ведь из-за отсутствия деятельности/невыплаты зарплаты работники не перестают быть застрахованными лицами. А, значит, подача СЗВ-М обязательна.
На единственного директора без зарплаты “нулевой” СЗВ-М в 2020 году может выглядеть так. Образец:
СКАЧАТЬ ОБРАЗЕЦ НУЛЕВОГО СЗВ-М В 2020 ГОДУ
Вывод
Формат сведений, утвержденный постановлением Правления ПФР от 07.12.2016 № 1077п, предусматривает по крайней мере одну заполненную строку в списке застрахованных лиц. Сдать же отчет вовсе без блока «Сведения о застрахованных лицах» нельзя. Обязательно заполните данные хотя бы на единственного учредителя, который получает зарплату и выступает в роли руководителя организации.
Сроки сдачи нулевой СЗВ-М в 2020 году
Нулевой СЗВ-М быть не может. А обычные отчеты сдавайте в общие сроки.
Практическое руководство по интерпретации и визуализации машин опорных векторов | HD
SVM часто называют «черными ящиками». В этой статье мы рассмотрим методы визуализации изученных моделей SVM и их производительности на реальных данных.
Изображение Снято Хьюго Доланом
Об авторе
Хьюго Долан изучает финансовую математику в Университетском колледже Дублина. Это в основном основано и мотивировано недавним опытом анализа данных и машинного обучения в конкурсе NFL Punt Analytics Kaggle, а также участием в команде, выигравшей Citadel Dublin Data Open, а также материалами из Стэнфордского университета CS229.онлайн курс.
Эта статья содержит следующие разделы:
- Введение в линейные модели, SVM и ядра
- Интерпретация многомерных инженерных пространств признаков, использующих ядра SVM…
- Практические варианты работы с большими дисбалансами классов
- Сколько данных нужно для обучения SVM
Некоторые предположения, которые я сделаю:
В этой статье предполагается знакомство с основными моделями машинного обучения, такими как логистическая и линейная регрессия. Это также предполагает, что вы знаете, как рисовать некоторые графики, которые я обсуждаю (у меня есть руководство для этого, если вы застряли!). Мы также предполагаем, что вы знаете, что такое функция решения и функция цели / стоимости, и что у вас есть базовые знания линейной алгебры. Если это все еще не стоит прочтения, вы всегда можете добавить это в закладки и вернуться позже для более глубокого изучения некоторых математических частей этой статьи.
Введение в линейные модели, SVM и ядра
В машинном обучении линейные классификаторы — это любая модель, в которой есть единственная функция гипотезы, которая отображает входные данные модели и прогнозируемые выходные данные.
Многие модели, такие как логистическая регрессия, наивный байесовский анализ и дискриминантный анализ, являются примерами линейных моделей.
Основным преимуществом линейных моделей перед нейронными сетями (нелинейными моделями) является то, что веса признаков напрямую соответствуют важности признака в модели. Таким образом, легко понять, чему модель «научилась».
При обучении модели регуляризованной регрессии L1 сразу становится очевидным, что большинство наших функций в нашем наборе данных совершенно не имеют отношения к прогнозированию нашего результата. Ясно, что признаки 0,1 вносят положительный вклад в модель, в то время как наличие признаков 2,3,4 в данном примере приводит к отрицательному вкладу в результат
. В основе любой линейной модели лежит скалярное произведение между входной пример и вектор параметра/веса. В случае линейной регрессии это вся функция гипотезы. В то время как логистическая регрессия передает точечный продукт через сигмовидную функцию, так что результат находится в диапазоне от 0 до 1 и, следовательно, подходит для задач двоичной классификации.
При рассмотрении задач классификации падение линейных моделей заключается в том, что в конечном итоге граница решения представляет собой прямую линию, плоскость или гиперплоскость с коэффициентами, равными весам/параметрам моделей, и, таким образом, может классифицировать только данные, которые являются линейно разделимыми, что может быть большим ограничение при работе над более сложными задачами аналитики.
Как мы видим, простая линейная модель не может разделить две «шумные гиперболы», поскольку она может соответствовать только «прямой» плоскости/линии через данные. Во втором примере используется нелинейная модель (на самом деле это трюк ядра, мы скоро к этому вернемся)
Машина опорных векторов (SVM) — единственная линейная модель, которая может классифицировать данные, которые не являются линейно разделимыми.
Вы можете спросить, как SVM, являющийся линейной моделью, может подогнать линейный классификатор к нелинейным данным. Интуитивно с помощью простой модели линейной регрессии мы можем вручную спроектировать функции x, x², x³,…, чтобы попытаться добиться соответствия нелинейному набору точек данных.
Хотя функция X является единственной независимой переменной, которую мы должны предсказать для y, которая по своей природе нелинейна по отношению к x, мы можем спроектировать функции x² и x³, чтобы улучшить нашу подгонку к y.
Перенося эту интуицию в нашу SVM, когда мы разрабатываем функцию x², мы, по сути, умножаем функцию x саму по себе. Итак, предположим, что мы проектируем функции из нашего набора данных, перемножая комбинации функций x1,x2,x3… вместе, тогда теоретически мы *могли бы* получить пространство, в котором ваши инженерные функции линейно разделимы. Взяв предыдущий простой пример, посмотрите, как приведенные ниже данные преобразуются в почти линейный тренд в пространстве признаков x³.
В качестве дополнительной интуиции по отношению к предыдущему примеру мы можем увидеть, преобразовав ось x из исходного пространства признаков x в пространство признаков x³, как модель можно рассматривать как линейную связь между x³ и y.
К сожалению, для достижения этого со сложным набором данных требуется создать больше, чем просто трехмерное пространство (признаки x, x²,x³), но на самом деле пространства признаков чрезвычайно высокой размерности, вычисление которых для каждого примера в нашем наборе данных было бы очень затратным в вычислительном отношении. Ниже я покажу пример функции ø(x), которая берет наши исходные функции x и объединяет их для создания множества полиномиальных функций 2-го порядка.
Прежде чем мы продолжим : я буду использовать обозначение x для обозначения точек данных / обучающих примеров с надстрочными индексами для обозначения конкретной точки данных и нижними индексами для обозначения конкретной функции.
Это обычно многомерное пространство, если бы у нас было 100 функций изначально, то эта функция произвела бы 100 * 100 спроектированных функций. Это требует больших вычислительных ресурсов, в данном случае временная сложность Big-O(n²), подумайте о необходимости написать два вложенных цикла for для генерации всех комбинаций, создаваемых ø(x).
К счастью для нас, есть выход из этой загадки вычислительной сложности! Когда мы выводим задачу оптимизации для SVM (сложно выглядящая формула, которая говорит нам, как получить и обновить наши веса для максимизации во время подъема координат), оказывается, что наши векторы признаков для нашего тренировочного входа x появляются только в одном месте в пределах вся формула оптимизации (выделена красным).
Этот скалярный продукт был для нашего исходного пространства признаков, поэтому теперь давайте заменим его нашим пространством признаков инженера, используя нашу функцию ø.
Так как же это помогает снизить вычислительную сложность? По определению скалярного произведения мы берем i-й элемент ø(x(i)) и умножаем его на i-й элемент ø(x(j)) и затем суммируем все это, чтобы получить одиночный скейлер. Применяя это, мы получаем:
Как будто по волшебству мы можем полностью избавиться от необходимости вычислять ø(x) с помощью простых алгебраических манипуляций с помощью трюка с ядром. Теперь у нас есть все преимущества многомерного пространства признаков без дополнительной вычислительной сложности 9j) ):
Простая замена, обратите внимание, что наше ядро использует здесь x и z только для того, чтобы удалить обозначение надстрочного индекса.
Точно так же, когда мы хотим использовать нашу модель для прогнозирования, мы никогда явно не вычисляем веса для нашего многомерного пространства, а вместо этого используем трюк с ядром, чтобы сделать наши прогнозы:
Таким образом, мы можем использовать трюк с ядром для преобразования нелинейного набор данных в набор данных, который является линейно разделимым, только в пространстве более высокой размерности. Sklearn поставляется с несколькими ядрами в реализации SVC, включая Radius Basis Kernel (RBF) и Polynomial Kernels, каждое из которых имеет свои собственные гиперпараметры, которые можно настроить экспериментально с помощью перекрестной проверки для достижения наилучших результатов.
Небольшая заминка, интерпретация многомерного спроектированного пространства признаков…
Итак, помните, как мы говорили, что большое преимущество линейной модели заключается в том, что веса/параметры модели можно интерпретировать как важность признаков. Что ж, это исчезает, как только мы разрабатываем многомерный или бесконечный набор признаков, веса модели неявно соответствуют многомерному пространству, что бесполезно для нашего понимания.
Вместо этого мы можем подобрать модель логистической регрессии, которая оценивает вероятность того, что метка y будет равна 1, с учетом исходных признаков, где f(x) — функция принятия решений SVM:
Если это кажется вам знакомым, подумайте о логистической регрессии!
Мы используем оценку максимального правдоподобия, чтобы соответствовать параметрам этой модели логистической регрессии, метод называется Масштабирование Платта, оригинальную статью [3], безусловно, стоит прочитать, если вам интересно узнать о внутренней работе.
Так как же это поможет нам понять, как работает SVM? Что ж, мы просто подгоняем модель и выбираем точку в нашем наборе данных для ее оценки, затем возмущаем одну функцию за раз через диапазон значений, сохраняя при этом другие функции фиксированными. Мы можем использовать это, чтобы нарисовать график чувствительности модели к каждой функции.
SKlearn поставляется с этой функцией, встроенной в модель SVC, вам просто нужно убедиться, что вероятность = true, при инициализации, а затем использовать clf. predict_proba(X) функция для получения вероятностей.
На практике я обнаружил, что вместо того, чтобы просто оценивать одну точку, часто лучше выбрать набор соответствующих точек, например. 40 отрицательных примеров и усреднить распределение вероятности по признаку, чтобы получить что-то более репрезентативное.
Вот пример, который я сделал, когда работал над соревнованием NFL Punt Analytics Kaggle, изучая влияние различных факторов на сотрясения мозга:
Я взял все отрицательные примеры и усреднил их вероятности, я выделил области красным для каждой функции, где игроки с наибольшей вероятностью могли получить сотрясение мозга. Уловка, если у вас есть куча одной горячей закодированной переменной, такой как роль игрока, состоит в том, чтобы объединить их в гистограмму и просто посмотреть на чистое изменение вероятности между тем, когда функция присутствует и не присутствует.
Также есть отличный пример применения этого к маркетинговым данным [1], который вы можете найти здесь. Я также хотел бы поблагодарить Георгия, который нашел время, чтобы ответить на некоторые из моих вопросов о статье.
Методы оценки производительности
Когда вы имеете дело с многомерными моделями, включающими SVM, было бы неплохо иметь возможность визуализировать, как модель классифицирует точки данных, не полагаясь исключительно на такие показатели, как оценки F1 или ROC AUC.
Хотя некоторые могут использовать такие методы, как анализ основных компонентов, для визуализации классификации, при этом мы теряем размеры нашего пространства признаков и, таким образом, искажаем визуальное представление, которое хотим получить.
Я нашел хороший метод, который называется «Гистограмма проектов» [2]. Он включает в себя графическое распределение выходных данных функции принятия решения SVM для ваших обучающих и тестовых наборов.
Функцию принятия решения легко получить в реализации SKlearn SVC, просто вызвав solution_function(X). Вам потребуется отслеживать метки наборов данных, чтобы можно было раскрасить гистограмму проекций, как показано ниже:
Гистограмму проекций довольно легко интерпретировать. Ось x гистограммы определяет расстояние конкретного обучающего примера от границы решения SVM (обозначенной центральной пунктирной линией).
SVM имеет границу разделения, равную 1 по обе стороны от границы решения, это принудительное ограничение задачи двойной оптимизации («Опорные векторы» — это точки данных, которые лежат вдоль этих границ). Вы заметите, что в приведенной выше модели есть некоторая утечка в области маржи и действительно переход от одного класса к классу на противоположной стороне границы решения. Это связано с тем, что мы установили гиперпараметр регуляризации C > 0 (это позволяет найти компромисс между некоторой неправильной классификацией и минимизацией целевой функции SVM).
Несмотря на работу с многомерными пространствами признаков, эта диаграмма успешно визуализирует область границы решения и всю классификацию без потери размерности. Все показатели, отображаемые в матрице путаницы (т. е. количество истинно положительных, ложноположительных, истинно отрицательных и ложноотрицательных результатов), также можно увидеть на гистограмме. Это также позволяет нам наблюдать, хорошо ли модель обобщает тестовый набор. Если тестовый набор имеет такое же распределение выходных данных функции принятия решений, что и обучающий набор, то мы можем сказать, что модель имеет хорошие характеристики при обобщении. Модель также может использоваться для определения того, является ли набор данных линейно разделимым с учетом выбранных гиперпараметров.
Практические варианты работы с несбалансированными данными
Когда набор данных имеет непропорциональное количество примеров для одного класса по сравнению с другим, мы говорим, что он несбалансирован.
Пример реального набора данных с дисбалансом более 3000:1
Это проблема, если мы хотим построить модель ML для прогнозирования появления меньшинства, поскольку мы можем достичь высокого уровня точности, просто неправильно классифицируя все меньшинство. примеры как класс большинства.
Это обычно происходит в реальных данных, будь то выявление злокачественных тканей, мошенничество с кредитными картами или сотрясения мозга в спорте, из-за относительной редкости инцидентов, которые мы хотим правильно идентифицировать.
Существует два общепринятых метода исправления моделей машинного обучения, работающих с несбалансированными данными:
- Избыточная выборка класса меньшинства / недостаточная выборка класса большинства
- Увеличение веса для примеров меньшинства в функции стоимости
Опция 1 : SMOTE
Существует два способа повторной выборки данных: удаление существующих примеров (недостаточная выборка) или добавление новых примеров (избыточная выборка). Наиболее общепринятым методом является избыточная выборка класса меньшинства с использованием алгоритма, называемого SMOTE (Synthetic Minority Oversampling Technique) [5] 9.0005
Это намного проще, чем следует из названия: для каждой точки меньшинства в наборе данных он выбирает k ближайших других примеров меньшинства (обычно 5) и интерполирует случайно новые примеры меньшинств вдоль линии, «соединяющей» существующие примеры меньшинств.
Это разумно, так как мы просто делаем предположение, что путем интерполяции между похожими существующими примерами мы получим новые примеры того же класса.
Мы видим, как SMOTE создает новые точки данных вдоль линий существующих точек
Это имеет тенденцию значительно улучшать производительность модели и помогает обобщить границу решения для примеров меньшинства.
Вариант 2: Введение весов в целевую функцию
Другая процедура, которую можно использовать, заключается в назначении более высоких весов в целевой функции для неправильной классификации примеров меньшинства. Это «стимулирует» алгоритм правильно классифицировать классы меньшинств.
У меня нет личного опыта использования этого метода, но его можно использовать в сочетании с вариантом 1. Это ссылка на хорошую статью здесь [4], в которой подробно описаны многие подходы к работе с дисбалансом классов
Сколько данных мне нужно для обучения SVM
Разумным эмпирическим правилом является как минимум примерно в 10 раз больше обучающих примеров, чем признаков. Если у вас есть большой объем обучающих данных, лучше всего использовать менее 50 000 обучающих примеров, поскольку реализация SVC в sklearn имеет сложность O (n³), а это означает, что время сходимости к решению растет кубически с количеством обучающих примеров, оно может становятся довольно медленными даже на приличном ноутбуке или контейнере kaggle.
Часто стоит сначала потренироваться на меньшем наборе данных и настроить гиперпараметры вашей модели. Вы можете сохранить небольшой набор тестов перекрестной проверки для выбора модели. Вы можете быть удивлены тем, насколько хорошо ваша модель обобщает, когда вы тестируете оставшийся набор данных, несмотря на небольшую долю фактических данных, которые вы, возможно, использовали.
Примечание. Если вы новичок в этом, совет состоит в том, чтобы использовать разделительный модуль для обучения поездов sklearn и исправить случайное начальное число, чтобы ваши результаты были воспроизводимыми, если вам случится вернуться, чтобы отредактировать какой-то более ранний код и повторно запустить обучение / Процедура выбора модели.
Я надеюсь, что эта статья была полезной, если у вас есть какие-либо комментарии / вопросы, оставьте их ниже, я постараюсь ответить на них, насколько смогу.
Ссылки на документы
[1] Налбантов, Георги и К. Биох, Ян и Гроенен, Патрик. (2005). Решение и интерпретация задач бинарной классификации в маркетинге с помощью SVM. 566–573. 10.1007/3–540–31314–1_69.
[2] Черкасский, Владимир и Дхар, Сауптик. (2010). Простой метод интерпретации многомерных нелинейных моделей классификации SVM.. 267–272.
[3] Платт, Дж. (2019). Вероятностные результаты для машин опорных векторов и сравнения с регуляризованными методами правдоподобия . [онлайн] Citeseer.ist.psu.edu. Доступно по адресу: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.41.1639.
[4] Батувита, Рукшан и Паладе, Василе. (2013). Методы обучения дисбалансу классов для машин опорных векторов. 10.1002/9781118646106.ч5.
[5] Chawla, N.V., et al. «SMOTE: синтетический метод избыточной выборки меньшинств». Журнал исследований искусственного интеллекта , www.jair.org/index.php/jair/article/view/10302.
Машина опорных векторов — все, что вам нужно знать о SVM
Содержание
В каждом алгоритме есть свое волшебство. Спрос на данные заставлял каждого специалиста по данным изучать разные алгоритмы. Большинство отраслей глубоко вовлечены в машинное обучение и заинтересованы в изучении различных алгоритмов. Метод опорных векторов — один из таких алгоритмов. Это считается методом черного ящика, поскольку в нем есть неизвестные параметры, которые не так просто интерпретировать и предположить, как это работает. Это зависит от трех принципов работы:
- Классификаторы максимальной маржи
- Классификаторы опорных векторов
- Машины опорных векторов
Попробуем глубже понять каждый принцип.
1.
Классификатор максимальной маржи
Они часто обобщаются с помощью машин опорных векторов, но SVM имеет гораздо больше параметров по сравнению с ним. Классификатор максимального поля рассматривает гиперплоскость с максимальной шириной разделения для классификации данных. Но в наборе данных можно нарисовать бесконечные гиперплоскости. Действительно важно выбрать идеальную гиперплоскость для классификации. Теперь давайте разберемся, что такое гиперплоскость.
В n-мерном пространстве гиперплоскость является подпространством n-1 измерения. Это означает, что если данные имеют двумерное пространство, то гиперплоскость может быть прямой линией, разделяющей пространство данных пополам. Это происходит по следующему уравнению
Наблюдение, попадающее в гиперплоскость, следует приведенному выше уравнению. Наблюдение, попадающее в область выше или ниже гиперплоскости, соответствует приведенному ниже уравнению:
Классификатор максимального поля часто дает сбой в ситуации неразделимых случаев, когда он не может выделить другую гиперплоскость для классификации неразделимых данных. В таких случаях на помощь приходит классификатор опорных векторов.
Исходя из приведенной выше диаграммы, мы можем предположить наличие бесконечных гиперплоскостей (слева). Классификатор максимальной маржи поставляется с одной гиперплоскостью, которая разделяет данные (справа). Данные, касающиеся положительных и отрицательных гиперплоскостей, называются опорными векторами.
2.
Классификаторы опорных векторов
Этот тип классификатора можно рассматривать как расширенную версию классификатора максимальной маржи, которая также имеет дело с неразделимыми случаями. Когда мы имеем дело с реальными данными, мы обнаруживаем, что большинство наблюдений относятся к перекрывающимся классам. Вот почему мы используем классификаторы опорных векторов.
Рассмотрим параметр настройки C. В этом классификаторе высокое значение C может дать нам надежную модель. Более низкое значение C дает нам гибкую модель. Давайте разберемся со следующей диаграммой.
Давайте посмотрим на схему слева. Мы видим, что чем выше значение C, тем больше ошибок, которые расцениваются как нарушение. Диаграмма справа показывает более низкое значение C и не дает достаточной вероятности нарушения за счет уменьшения ширины поля.
3.
Машина опорных векторов
Метод опорных векторов рассматривается во время нелинейного решения, и данные не могут быть разделены классификатором опорных векторов независимо от функции стоимости.
Кроме того, теперь вы можете изучить курс опорных векторов на хинди
На схеме показаны неразделимые классы в одномерном и двумерном пространстве.
Когда почти трудно разделить нелинейные классы, мы применяем другой трюк, называемый трюком ядра, который помогает обрабатывать данные.
На приведенной выше диаграмме данные, которые были неразделимы в одномерном измерении, были разделены после преобразования в двумерное и после применения полиномиального ядра второй степени. Теперь давайте посмотрим, как обрабатывать двумерные линейно неразделимые данные.
В двумерных данных ядро полинома второй степени применяется с использованием линейной плоскости после ее преобразования в более высокие измерения.
Функции ядра
Функции ядра также можно рассматривать как параметры настройки в модели SVM. Они несут ответственность за устранение вычислительных требований для достижения векторного пространства более высокой размерности и работы с нелинейными разделимыми данными. Давайте обсудим две широко используемые функции ядра:
- Ядро полинома
- Ядро радиальной базисной функции
1 . Полиномиальное ядро
Полиномиальная функция степени 2 используется для разделения нелинейных данных путем преобразования их в более высокие измерения. Взгляните на следующее уравнение:
2.
Ядро радиальной базисной функции
Эта функция ядра также известна как функция ядра Гаусса. Он способен производить бесконечное количество измерений для разделения нелинейных данных. Это зависит от гиперпараметра «γ» (гамма), который необходимо масштабировать при нормализации данных. Чем меньше значение гиперпараметра, тем меньше смещение и выше дисперсия, которую он дает. В то время как более высокое значение гиперпараметра дает более высокое смещение и более низкую дисперсию решений. Это объясняется с помощью следующего уравнения:
Давайте разберем влияние гаммы на примере:
Здесь, как мы видим, большое значение гаммы дает нам более мягкий и широкий выступ по сравнению с малым значением, которое дает нам заостренный выступ в более высоких измерениях.
Преимущества и недостатки
Некоторые из преимуществ SVM:
- Они гибки в отношении неструктурированных, структурированных и полуструктурированных данных.
- Функция ядра упрощает работу практически с любым типом данных.
- Переобучение наблюдается реже по сравнению с другими моделями.
Несмотря на эти преимущества, он также имеет определенные недостатки:
- Время обучения больше при вычислении больших наборов данных.
- Гиперпараметры часто вызывают затруднения при интерпретации их влияния.
- Общая интерпретация затруднена из-за некоторых подходов черного ящика.
Применение опорных векторов
- Здравоохранение
SVM может применяться в сфере здравоохранения для прогнозирования состояния пациента, прогнозирования вероятности возникновения опасных заболеваний. Он также играет большую роль в составе лекарств.
В категории изображений он может легко классифицировать изображения, созданные лабораторными машинами для обнаружения болезней и состояний тела.
2. Банковский сектор
Его можно использовать для прогнозирования характера мошеннических клиентов, а также для прогнозирования кредитного риска. Во время санкции кредита, он может предсказать право клиента.
3. Домен социальной сети
Он может обрабатывать большие объемы неструктурированных данных, таких как текст. Вот почему он используется для классификации типов текстов в социальных сетях.
Практические примеры
SVM на Python
Сначала мы попробуем реализовать модель SVM на Python. Мы возьмем набор данных социальной сети, который содержит такие функции, как возраст и зарплата человека, чтобы предсказать, купили ли они продукт или нет.
Давайте импортируем все необходимые библиотеки —
импортируем numpy как np импортировать matplotlib. pyplot как plt импортировать панд как pd
Импорт библиотек завершен. Теперь пришло время импортировать данные и начать построение модели.
набор данных = pd.read_csv('Social_Network_Ads.csv') набор данных.голова()
Нам не обязательно нужны все столбцы для проведения анализа. Поэтому мы возьмем только столбец возраста и зарплаты в качестве значений признаков.
X = набор данных.iloc[:, [2, 3]].значения у = набор данных.iloc[:, 4].значения
Теперь разделим данные на тренировочные и тестовые. Мы возьмем 75% данных для обучения и протестируем на остальных, что составляет 25%.
из sklearn.model_selection импорта train_test_split X_train, X_test, y_train, y_test = train_test_split (X, y, test_size = 0,25, random_state = 0)
После разделения мы масштабируем функцию, чтобы ожидать нормального распределения данных. В этом случае мы будем использовать Standard Scaler.
из sklearn.preprocessing import StandardScaler sc = Стандартный масштаб() X_train = sc. fit_transform (X_train) X_test = sc.transform(X_test)
На этом предварительная обработка данных завершена. Пришло время построить модель. В этом случае мы применим три трюка с ядром и попробуем их оценить.
из sklearn.svm импорт SVC
Модель для линейного ядра
classifier_linear = SVC (kernel = 'linear', random_state = 0) classifier_linear.fit (X_train, y_train)
Мы построили нашу первую модель. Теперь мы предскажем наши тестовые данные.
y_pred _linear= classifier.predict(X_test)
Модель ядра полинома
классификатор _poly= SVC (kernel = 'poly', random_state = 0) classifier_poly.fit (X_train, y_train) y_pred_poly = classifier_poly.predict(X_test)
Модель ядра RBF
классификатор _rbf= SVC (kernel = 'rbf', random_state = 0) classifier_rbf.fit (X_train, y_train) y_pred _rbf = classifier_rbf.predict (X_test)
Сделали модели на трех ядрах. Производительность будет оцениваться на основе матрицы путаницы и отчета о классификации.
из sklearn.metrics импорта путаницы_матрицы
Матрица путаницы для линейного ядра
Читайте также: Матрица путаницы — с Python и R
Матрица путаницы для полиномиального ядра
cm_poly=confusion_matrix(y_test,y_pred_poly)
Матрица путаницы для ядра RBF
cm_rbf=confusion_matrix(y_test,y_pred_rbf)
Если оценивать модель на основе матрицы путаницы, то можно сделать вывод, что модель с ядром RBF дала нам лучший результат. Но это еще не сделано. Давайте перейдем к результату классификации, чтобы изучить то же самое.
Отчет о классификации
Отчет о классификации представляет собой расширенную метрику матрицы путаницы, которая дает представление о точности и полноте. Он говорит нам, насколько хороша наша модель, и о точной точности нашей модели.
Отчет о классификации линейного ядра
class_report_linear = class_report_linear (y_test, y_pred_linear)
Классификационный отчет по полиномиальному ядру
class_report_poly = классификационный_отчет (y_test,y_pred_poly)
Классификационный отчет по ядру RBF
class_report_rbf=classification_report(y_test,y_pred_rbf)
Даже после оценки, основанной на отчете о классификации, показатель F1 кажется выше в модели с ядром RBF по сравнению с двумя другими моделями. Итак, модель с ядром RBF кажется победителем. Но ранний вызов по-прежнему зависит от обработки и предварительной обработки данных.
SVM в R
Мы будем использовать тот же набор данных, чтобы сравнить, как python отличается от R в получении результатов. Сначала мы импортируем набор данных и закодируем целевую переменную как фактор.
набор данных = read.csv('Social_Network_Ads. csv')
Мы возьмем те же функции, что и для построения модели на Python.
набор данных = набор данных [3:5]
В R очень важно преобразовать целевые объекты в качестве фактора перед построением модели.
# Кодирование целевого признака как фактора dataset$Purchased = коэффициент (dataset$Purchased, уровни = c (0, 1))
Теперь давайте выполним такое же разбиение, как в Python. Мы установим начальное значение, чтобы получить такой же сплит, когда вы попробуете его. Таким образом, в основном вы получите тот же результат, если будете поддерживать одно и то же семя.
install.packages('caTools') библиотека (caTools) сет.сид(123) split = sample.split (набор данных $ Куплено, SplitRatio = 0,75) training_set = подмножество (набор данных, разделение == TRUE) test_set = подмножество (набор данных, разделение == FALSE)
Теперь мы масштабируем данные объектов, чтобы сохранить нормальное распределение и избежать больших вариаций.
training_set[-3] = масштаб(training_set[-3]) test_set[-3] = масштаб(test_set[-3])
Предварительная обработка данных — очень важный этап перед построением модели, и мы его завершили. Теперь мы построим модель на основе трех приемов ядра: линейного, полиномиального и RBF.
установить.пакеты('e1071') библиотека (e1071) библиотека (кернлаб) библиотека (каре)
Вышеупомянутые три библиотеки импортированы для построения нашей модели с тремя ядрами. Пожалуйста, не забудьте импортировать его перед созданием модели.
Модель для линейного ядра
linear_classifier = svm(formula = Purchased ~ ., данные = обучающий_набор, type = 'C-классификация', ядро = 'линейное')
Мы построили модель. Теперь пришло время предсказать тестовые метки.
y_pred_linear = предсказать (linear_classifier, новые данные = test_set[-3])
Модель полиномиального ядра
poly_classifier = ksvm(formula = Purchased ~ ., данные = обучающий_набор, type = 'C-классификация', ядро = 'многоточие') y_pred_poly = предсказать (poly_classifier, новые данные = test_set[-3])
Модель для ядра RBF
rbf_classifier = ksvm(formula = Purchased ~ . , данные = обучающий_набор, type = 'C-классификация', ядро = 'rbfdot') y_pred_rbf = предсказать (rbf_classifier, новые данные = test_set[-3])
Теперь построение модели выполнено на всех трех ядрах. Пришло время оценить модель. В R мы будем оценивать на основе матрицы путаницы. Нет жестких и быстрых правил для импорта отчета о классификации, как мы делали это в Python. Поэтому для анализа пока будет достаточно матрицы путаницы.
Матрица путаницы для линейного ядра
cm_linear = таблица (test_set[ 3], y_pred_linear)
Матрица путаницы для полиномиального ядра
см _poly= таблица (test_set[ 3], y_pred_poly)
Матрица путаницы для ядра RBF
cm_rbf = таблица (test_set[ 3], y_pred_rbf)
Мы оценили нашу модель на основе матрицы путаницы, и мы все еще можем сказать, что наша модель работает не так хорошо по сравнению с моделью в Python. Без сомнения, из этих трех моделей модель с ядром rbf превзошла две другие с использованием R. Но уровень ошибочной классификации по-прежнему высок по сравнению с моделью, построенной на Python. Одной из причин может быть случайность, учитываемая при разбиении. В таких случаях для оценки обоих языков мы можем применить стратифицированную выборку, которая будет одинаковой в обоих случаях.
Несмотря на то, что SVM гибок в отношении любого типа данных, мы все равно должны быть осторожны, играя с такими параметрами, как трюки ядра, а также с гиперпараметром. Состояние бизнеса и связанный с ним риск могут быть фатальными, если модель подвергается огромной неправильной классификации, поэтому необходима настройка параметров. SVM можно использовать для анализа изображений и текста, но точность зависит только от типа и состояния данных. Сферы бизнеса, такие как банковское дело и здравоохранение, где неправильная классификация может быть слишком рискованной, SVM должны быть тщательно протестированы в отношении их параметров.