Что нужно знать, чтобы отменить штраф за СЗВ-М?
Судебные инстанции начали отменять назначенные Пенсионным фондом штрафы за нарушения при сдаче СЗВ-М. В чем, по мнению судей, оказались неправы инспектора ПФР? Какие советы можно дать работодателям, которым штраф грозит или уже назначен? Ответы — в нашем материале.
Самостоятельное исправление ошибки в СЗВ-М — не повод для штрафа
Компания ошиблась в периоде, указанном в СЗВ-М, самостоятельно обнаружила ошибку и подала уточненный отчет, но позже срока подачи СЗВ-М за корректируемый период (подробно мы рассказывали об этом здесь). В ПФР компанию оштрафовали на кругленькую сумму, суды первых инстанций подержали ПФР.
ВС РФ вынес иное решение. Судьи высокой инстанции отметили тот факт, что инспектора ПФР ошибку сами не заметили и исправить ее сами не требовали. Компания проявила добросовестность, когда самостоятельно обнаружила ошибку и подала верный отчет.
В законодательстве не предусмотрено срока, в течение которого допускается подавать уточнения к отчету СЗВ-М без штрафа. Следовательно, сочли в ВС РФ, в отношении подачи уточненок могут работать общие правила для подачи обязательных отчетов по налогам и взносам (ст. 81 НК РФ). Если сдающий отчет обнаруживает и исправляет ошибку до того, как это сделает контролирующий орган – то такое исправление штрафоваться не должно.
Совет сдающим СЗВ-М: при исправлении ошибок в отчете фиксируйте факт того, что вы выявили и исправили все самостоятельно, без участия инспекторов ПФР. Тогда, в случае судебного оспаривания штрафа, вы сможете ссылаться на мнение ВС РФ по аналогичной ситуации (Определение Судебной коллегии по экономическим спорам ВС от 22.07.2019 № 305-ЭС19-2960).
ПФР должен строго соблюдать порядок наложения штрафа за СЗВ-М
Фирма сдала форму СЗВ-М с опозданием на целый месяц. В ПФР составили соответствующий акт и назначили компании штраф на его основании. Фирма с этим не согласилась и обратилась в суд, требуя признать это решение незаконным.
Судьи двух инстанций поддержали фирму, поскольку ПФР, оформляя штраф, допустил ряд нарушений. Так, акт о пропуске срока сдачи СЗВ-М фирмой должен был рассматриваться 9 августа, но решение о штрафе было вынесено уже 1-го числа, то есть раньше указанной даты на 8 дней.
Фирма, таким образом, не могла присутствовать при вынесении решения и каким-то образом защищаться. Права фирмы оказались нарушенными, и суды отменили штраф ПФР (Постановление АС Северо-Западного округа от 16.07.2019 № А81-9121/2018).
Совет сдающим СЗВ-М: если решение о наложении штрафа уже вынесено — затребуйте остальные документы, которые относятся к данному решению. Возможно, что порядок вынесения решения о штрафе был нарушен ПФР, а это дает хороший повод оспорить санкцию.
Штраф за СЗВ-М можно оспорить даже после уведомления от ПФР об ошибке
ПФР выявил несоответствие между сданными компанией СЗВ-М и ЕРСВ. Компании было направлено уведомление, по итогам которого компания подала уточненную форму СЗВ-М (в СЗВ-М оказались не учтены несколько новых сотрудников).
В ПФР составили акт о неполном предоставлении сведений и назначили компании штраф, который компания оплачивать не стала. Интересно, что в суд в данном случае обратились инспектора ПФР, чтобы все-таки взыскать штраф.
Однако судьи первых инстанций решили, что компания выявила и исправила ошибку самостоятельно, т. к. в уведомлении от инспекторов ПФР было только указано на нестыковку данных двух отчетов. Поэтому, сочли судьи, компания имела право исправить такую ошибку без штрафа.
В кассационном суде решения предыдущих судов отменили и снова присудили штраф компании на основании того, что сведения на новых сотрудников не были исправлением ошибки, а были именно новыми данными, поданными с опозданием.
Верховный суд РФ (дело, в итоге, дошло до него) указал кассации, что в данном случае недопустим формальный подход к вопросу. Поскольку никаких конкретных сроков для внесения в отчетность для ПФР уточнений, в том числе дополнений, законодательство не содержит. При этом обязанность отчитывающегося работодателя уточнять поданные сведения в интересах застрахованных лиц четко прописана в приказе Минтруда и соцзащиты от 21.12.2016 № 766н.
Таким образом, рассудили в ВС РФ, подавая уточненку по СЗВ-М, компания действовала в интересах застрахованных лиц и в интересах государства, которое поощряет страхование и добросовестность страхователей. Значит, штрафовать за подачу уточненного СЗВ-М с данными на новых сотрудников нельзя (Определение ВС РФ от 05.07.2019 № 308-ЭС19-975).
Совет сдающим СЗВ-М: если подаете уточненную форму СЗВ-М со сведениями, дополняющими сданную прежде, а вас пытаются за это оштрафовать, укажите инспекторам, со ссылкой на определение ВС РФ, на недопустимость формального подхода. Разъясните, что уточнения вы подаете в интересах застрахованных лиц в полном соответствии с законодательством РФ. И штрафовать вас за это нельзя.
Подводим итоги
Нарушение порядка сдачи СЗВ-М грозит штрафом. Однако есть возможности его избежать, и суды это подтверждают.
Уведомление о перемещении прослеживаемого товара
Электронный формат уведомления о перемещении прослеживаемых товаров и порядок заполнения отчета записаны в приложениях к письму ФНС РФ от 14.04.2021 № ЕА-4-15/5042 (приложения 5 и 9).
Порядок заполнения отчета следующий.
Сначала проставляют номер документа, дату его заполнения, а также номер корректировки. В первичном отчете пишут номер ноль.
Затем указывают реквизиты продавца, который передает прослеживаемые товары – название организации или предпринимателя, а также ИНН и КПП.
Далее записывают реквизиты покупателя – наименование иностранной стороны, ее юридический адрес, идентификационный код и код государства – участника ЕАЭС.
После этого проставляют вид и реквизиты сопроводительного документа на передачу товаров – дату и номер счета-фактуры, УПД или другого документа, а также адрес назначения, доставки, разгрузки товаров на территории иностранного государства.
В самом конце заполняют таблицу, в которой записывают данные о наименовании, количестве, стоимости товара без НДС, а также о регистрационном номере партии товара (РНПТ).
Наши специалисты составили образец уведомления о перемещении прослеживаемого товара. Скачайте его по ссылке: пример уведомления о перемещении прослеживаемого товара.
Обратите внимание: если покупатель полностью или частично вернет товар, необходимо будет подать корректировочное уведомление. Кроме того, «уточненку» придется подать в случае, если в исходном отчете будут найдены ошибки или какие-либо недочеты.
Крайний срок отправки корректировочного уведомления — следующий рабочий день после возврата товаров или выявления ошибок и недочетов (п. 24 положения, утвержденного Постановлением Правительства РФ от 01.07.2021 № 1108).
В законодательстве не установлены точные правила заполнения корректировочного уведомления. Поэтому для того, чтобы составить «уточненку», запишите в строке 3 отчета номер корректировки. Например, 1, 2 и так далее. В строках и графах проставьте правильные показатели.
Уведомление о ввозе прослеживаемых товаров
Формат и порядок заполнения уведомления о ввозе товаров, которые подлежат прослеживанию, предусмотрены в приложениях к письму ФНС РФ от 14.04.2021 № ЕА-4-15/5042 (приложения 6 и 10).
Порядок заполнения уведомления следующий.
Сначала заполняют номер документа, дату его заполнения, а также номер корректировки. В первичном отчете проставляют номер ноль.
Затем указывают реквизиты покупателя, который импортирует прослеживаемые товары – название организации или предпринимателя, а также ИНН и КПП.
Далее записывают реквизиты продавца – наименование иностранной стороны, ее юридический адрес, идентификационный код и код государства – участника ЕАЭС.
После этого проставляют вид и реквизиты сопроводительного документа на передачу товаров – дату и номер счета-фактуры, УПД или другого документа.
В самом конце заполняют информацию о товаре – код по ТН ВЭД, его количество и стоимость без НДС.
При этом регномер партии товара (РНПТ) проставлять не требуется. Налоговики присвоят соответствующий номер самостоятельно и в срок не позднее следующего дня с даты получения уведомления известят о номере по ТКС (п. 26 положения, утвержденного Постановлением Правительства РФ от 01.07.2021 № 1108, письмо Минфина РФ от 30.03.2021 № 27-01-24/23047).
Наши специалисты составили образец заполненного уведомления о ввозе товаров, которые подлежат прослеживанию. Скачайте его по ссылке: пример уведомления о ввозе импортных товаров.
Обратите внимание: если импортер полностью или частично вернет товар, необходимо будет подать корректировочное уведомление. Кроме того, «уточненку» придется подать в случае, если в исходном отчете будут найдены ошибки или какие-либо недочеты.
Крайний срок отправки корректировочного уведомления — следующий рабочий день после возврата товаров или выявления ошибок и недочетов (п. 27 положения, утвержденного Постановлением Правительства РФ от 01.07.2021 № 1108).
В законодательстве не установлены точные правила заполнения уточненного уведомления. Поэтому для того, чтобы составить «уточненку», запишите в сроке 3 отчета номер уточнения. Например, 1, 2 и так далее. В строках и графах проставьте правильные показатели.
Требуется пояснение для аргумента «штраф» в svm.LinearSVC
Я хочу импортировать этот файл CSV
tweets = pd.read_csv ('/ Users / yoshithKotla / Desktop / canal / Music / wmsrry / wmsrry_only')
печать (твиты)
Но он показывает такую ошибку, файл находится в том же месте, что и упоминалось, и я не могу импортировать файл CSV. Я пробовал это с некоторыми другими файлами CSV на рабочем столе, ошибка все еще отображается. Здесь нет ни дубликатов файлов, ни каких-либо других файлов с тем же именем в разных форматах.Я не могу понять это
FileNotFoundError Traceback (последний вызов последним)
в
----> 1 твит = pd.read_csv ('/ Users / yoshithKotla / Desktop / canal / Music / wmsrry / wmsrry_only')
2
3 печати (твиты)
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py в read_csv (filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix , mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_date_formates, chip_date_date_formates, chip_datetime_formates , десятичное число, указатель строки, quotechar, цитирование, двойные кавычки, escapechar, комментарий, кодировка, диалект, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision, storage_options)
608 кВт.обновление (kwds_defaults)
609
-> 610 return _read (filepath_or_buffer, kwds)
611
612
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py в _read (filepath_or_buffer, kwds)
460
461 # Создайте парсер.
-> 462 parser = TextFileReader (filepath_or_buffer, ** kwds)
463
464, если размер блока или итератор:
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py в __init __ (self, f, engine, ** kwds)
817 сам.параметры ["has_index_names"] = kwds ["has_index_names"]
818
-> 819 self._engine = self._make_engine (самодвигатель)
820
821 def close (self):
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py в _make_engine (сам, движок)
1048)
1049 # error: слишком много аргументов для "ParserBase"
-> 1050 return mapping [engine] (self.f, ** self.options) # тип: игнорировать [call-arg]
1051
1052 def _failover_to_python (сам):
/ Библиотека / Frameworks / Python.framework / Versions / 3.9 / lib / python3.9 / site-packages / pandas / io / parsers.py в __init __ (self, src, ** kwds)
1865 г.
1866 # открытые ручки
-> 1867 self._open_handles (src, kwds)
1868 г. assert self.handles is not None
1869 для ввода ("параметры_хранилища", "кодирование", "карта_памяти", "сжатие"):
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/parsers.py в _open_handles (self, src, kwds)
1360 Позвольте читателям открывать IOH-анлы после того, как они сделают свои потенциальные рейзы.1361 "" "
-> 1362 self.handles = get_handle (
1363 SRC,
1364 "р",
/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pandas/io/common.py в get_handle (path_or_buf, режим, кодирование, сжатие, memory_map, is_text, errors, storage_options)
640 ошибок = "заменить"
641 # Кодировка
-> 642 ручка = открытая (
643 ручка,
644 ioargs.mode,
FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/ Users / yoshithKotla / Desktop / canal / Music / wmsrry / wmsrry_only'
машин опорных векторов — мягкая формулировка маржи и трюк с ядром | от Ришаба Мисры
Изучите некоторые из передовых концепций, которые делают машину опорных векторов мощным линейным классификатором. Методика формулировки мягких полей
SVM в действии.Машина опорных векторов (SVM) — одна из самых популярных методик классификации, которая направлена на минимизацию количества ошибочная классификация ошибок напрямую.Существует множество доступных ресурсов для понимания основ работы машин поддерживающих векторов (SVM), однако почти во всех реальных приложениях (где данные линейно неразделимы, ) SVM используют некоторые продвинутые концепции.
Цель этого поста — объяснить концепции Soft Margin Formulation и Kernel Trick, которые SVM используют для классификации линейно неразделимых данных.
Если вы хотите сначала освежить в памяти основы SVM, я бы порекомендовал прочитать следующий пост.
Прежде чем мы перейдем к концепциям трюка Soft Margin и Kernel, давайте установим необходимость в них. Предположим, у нас есть некоторые данные, и их можно изобразить следующим образом в 2D-пространстве:
Рисунок 1: Представление данных, в котором два класса не могут быть разделены линейноИз рисунка очевидно, что нет конкретной границы линейного решения, которая могла бы идеально разделить данные, т.е. данные линейно неразделимы . У нас может быть аналогичная ситуация и в многомерных представлениях.Это можно объяснить тем фактом, что обычно функции, которые мы получаем из данных, не содержат достаточной информации , чтобы мы могли четко разделить два класса. Обычно это имеет место во многих реальных приложениях. К счастью, исследователи уже разработали методы, позволяющие справляться с подобными ситуациями. Посмотрим, что они из себя представляют и как работают.
Эта идея основана на простой посылке: позволяет SVM делать определенное количество ошибок и сохранять максимально широкий запас, чтобы другие точки можно было классифицировать правильно .Это можно сделать, просто изменив цель SVM.
Мотивация
Давайте кратко рассмотрим мотивацию наличия такой формулировки.
- Как упоминалось ранее, почти все реальные приложения имеют данные, которые линейно неразделимы.
- В редких случаях, когда данные являются линейно разделяемыми, мы можем не захотеть выбирать границу решения, которая идеально разделяет данные, чтобы избежать переобучения. Например, рассмотрим следующую диаграмму:
Здесь красная граница решения
отлично разделяет все тренировочные точки.Однако действительно ли это хорошая идея иметь границу принятия решений с такой меньшей маржой? Как вы думаете, такая граница принятия решений будет хорошо обобщаться на невидимых данных? Ответ: Нет. Граница принятия решения , зеленая,
имеет более широкий запас, что позволило бы ей хорошо обобщать невидимые данные. В этом смысле формулировка мягкой маржи также поможет избежать проблемы переобучения.
Как это работает (математически)?
Давайте посмотрим, как мы можем изменить нашу цель для достижения желаемого поведения.В этой новой обстановке мы стремимся минимизировать следующую цель:
уравнение 1 Это отличается от первоначальной цели во втором члене. Здесь C
— гиперпараметр, который определяет компромисс между максимизацией маржи и минимизацией ошибок. Когда C
является небольшим, ошибкам классификации придается меньшее значение, и основное внимание уделяется максимальному увеличению маржи, тогда как когда C
является большим, основное внимание уделяется предотвращению ошибочной классификации за счет сохранения небольшой маржи.
Здесь, однако, следует отметить, что не все ошибки одинаковы. Точки данных, которые находятся далеко на неправильной стороне границы принятия решения, должны подвергаться большему штрафу по сравнению с теми, которые находятся ближе. Давайте посмотрим, как это можно сделать, с помощью следующей диаграммы.
Рис. 3. Штраф, понесенный точками данных за то, что они находятся на неправильной стороне границы принятия решения Идея такова: для каждой точки данных x_i
мы вводим переменную резерва ξ_i
.Значение ξ_i
— это расстояние x_i
от поля соответствующего класса , если x_i
находится на неправильной стороне поля, в противном случае — ноль. Таким образом, точки, которые находятся далеко от границы на неправильной стороне, будут подвергаться большему штрафу.
С этой идеей каждая точка данных x_i
должна удовлетворять следующему ограничению:
Здесь левую часть неравенства можно рассматривать как достоверность классификации.Оценка достоверности ≥ 1 предполагает, что классификатор правильно классифицировал точку. Однако, если показатель достоверности ≤ 1, это означает, что классификатор неправильно классифицировал точку и понес линейный штраф в размере ξ_i
.
С учетом этих ограничений наша цель — минимизировать следующую функцию:
уравнение 3, где мы использовали концепции множителя Лагранжа для оптимизации функции потерь при ограничениях. Давайте сравним это с целью SVM, которая обрабатывает линейно разделимые случаи (как указано ниже).
уравнение 4 Мы видим, что только ξ_i
являются дополнительными в модифицированной цели, а все остальное остается таким же.
На заметку: в окончательном решении
λ_i
с, соответствующие точкам, которые находятся ближе всего к марже и на изнаночной стороне поля (т.е. имеющие ненулевое значениеξ_i
), не будут -нулю, поскольку они играют ключевую роль в позиционировании границы принятия решений, по сути делая их опорными векторами.
Теперь давайте исследуем второе решение использования «трюка с ядром» для решения проблемы линейной неотделимости. Но сначала мы должны узнать, что такое функции ядра.
Функции ядра
Функции ядра — это обобщенные функции, которые принимают два вектора (любой размерности) в качестве входных и выводят оценку, которая указывает, насколько похожи входные векторы. Простая функция ядра, которую вы уже знаете, — это функция скалярного произведения: если скалярное произведение мало, мы заключаем, что векторы разные, а если скалярное произведение большое, мы заключаем, что векторы более похожи.Если вам интересно узнать о других типах функций ядра, это будет хорошим источником.
«Уловка»
Давайте посмотрим на целевую функцию для линейно разделимого случая:
уравнение 5Это модифицированная форма цели в
уравнении 4
. Здесь мы подставили оптимальное значениеw
иb
. Эти оптимальные значения могут быть вычислены путем дифференцированияуравнения 4
по этим параметрам и приравнивания его к 0.
Из уравнения
видно, что цель зависит от скалярного произведения пар входных векторов ( x_i. X_j
), которое является не чем иным, как функцией ядра. А теперь хороший момент: нам не нужно ограничиваться простой функцией ядра, такой как скалярное произведение . Мы можем использовать любую причудливую функцию ядра вместо скалярного произведения, которая может измерять сходство в более высоких измерениях (где это может быть более точно; подробнее об этом позже), без значительного увеличения вычислительных затрат.Это, по сути, известно как трюк с ядром .
Как это работает (математически)?
Математически функцию ядра можно записать следующим образом:
уравнение 6 Здесь x
и y
— входные векторы, ϕ
— функция преобразования, а <,>
обозначает операция скалярного произведения. В случае функции скалярного произведения ϕ
просто отображает входной вектор на себя.
Функции ядра по существу берут скалярное произведение преобразованных входных векторов.
Теперь давайте рассмотрим случай, изображенный на рис. 4
ниже. Мы видим, что в 2-м пространстве нет линейной границы решения, которая могла бы идеально разделить точки данных. Круговая (или квадратичная) граница принятия решения может сработать, однако линейные классификаторы не могут предложить эти типы границ решения.
P_1
и P_2
. уравнение 7 Если мы рассмотрим окончательную форму функции ядра, то это не что иное, как круг! Это означает, что мы изменили наше представление о подобии: вместо того, чтобы измерять сходство по тому, насколько близко расположены точки (с помощью скалярного произведения), мы измеряем сходство на основе того, находятся ли точки внутри круга.В этом смысле определение такого преобразования позволило нам иметь нелинейную границу решения в 2D-пространстве (она по-прежнему линейна в исходном 3D-пространстве) . Это может быть очень много, поэтому ниже приводится краткое изложение решений, которые мы приняли:
1 - Каждая точка P представлена координатами ( x , y ) в 2D-пространстве. 2 , √2xy ) 3 - Точки с высоким значением x . y будут двигаться вверх по оси z (в данном случае в основном красные кружки). Это видео дает хорошую визуализацию того же самого. 4 - Мы находим гиперплоскость в трехмерном пространстве, которая идеально разделяет классы. 5 - Форма функции ядра указывает, что эта гиперплоскость будет формировать круг в двумерном пространстве, таким образом давая нам нелинейную границу принятия решения.
И главный вывод:
Встраивая данные в многомерное пространство признаков, мы можем продолжать использовать линейный классификатор!
Предостережение: эти преобразования могут резко увеличить пространство функций, а это увеличивает вычислительные затраты.Есть ли способ получить вышеупомянутые преимущества, не увеличивая при этом значительно вычислительные затраты? Оказывается, есть!
Давайте попробуем переписать функцию ядра в уравнении 7
: уравнение
Ух ты! Таким образом, значение функции ядра (таким образом, сходство между точками в трехмерном пространстве) — это просто квадрат скалярного произведения между точками в двухмерном пространстве. Довольно здорово, правда ?! Но как это случилось?
Причина этого в том, что мы мудро выбрали нашу функцию преобразования ϕ
.И пока мы продолжаем это делать, мы можем обойти этап преобразования и вычислить значение функции ядра непосредственно из сходства между точками в 2D-пространстве. Это, в свою очередь, также снизит вычислительные затраты. У нас есть много популярных функций ядра, которые обладают этим замечательным свойством и могут использоваться сразу после установки (нам не нужно искать идеальный ϕ
).
На этом мы подошли к концу этого поста. Надеюсь, подробности, представленные в этой статье, дали вам хорошее представление о том, что делает SVM мощным линейным классификатором.Если у вас есть вопросы или предложения, дайте мне знать в комментариях. Ваше здоровье! 🥂
Экономичный SVM для несбалансированной классификации
Последнее обновление 21 августа 2020 г.
Алгоритм машины опорных векторов эффективен для сбалансированной классификации, но не работает с несбалансированными наборами данных.
Алгоритм SVM находит границу решения гиперплоскости, которая лучше всего разделяет примеры на два класса. Разделение становится мягким за счет использования поля, которое позволяет ошибочно классифицировать некоторые точки.По умолчанию этот запас благоприятствует большинству классов в несбалансированных наборах данных, хотя его можно обновить, чтобы учесть важность каждого класса и значительно улучшить производительность алгоритма в наборах данных с асимметричным распределением классов.
Эту модификацию SVM, которая взвешивает запас, пропорциональный важности класса, часто называют взвешенной SVM или чувствительной к стоимости SVM.
В этом руководстве вы познакомитесь с машинами взвешенных опорных векторов для несбалансированной классификации.
После прохождения этого руководства вы будете знать:
- Как стандартный алгоритм машины опорных векторов ограничен для несбалансированной классификации.
- Как можно модифицировать алгоритм машины опорных векторов для взвешивания штрафа на марже, пропорционального важности класса во время обучения.
- Как настроить вес класса для SVM и как выполнить поиск по сетке для различных конфигураций веса класса.
Начните свой проект с моей новой книги «Несбалансированная классификация с Python», включая пошаговые руководства и файлы исходного кода Python для всех примеров.
Приступим.
Как реализовать машины взвешенных опорных векторов для несбалансированной классификации
Фотография Баса Лендерса, некоторые права защищены.
Обзор учебного пособия
Это руководство разделено на четыре части; их:
- Несбалансированный набор данных классификации
- SVM для несбалансированной классификации
- Взвешенная SVM с Scikit-Learn
- Взвешенный поиск по сетке SVM
Несбалансированный набор данных классификации
Прежде чем мы углубимся в модификацию SVM для несбалансированной классификации, давайте сначала определим несбалансированный набор данных классификации.
Мы можем использовать функцию make_classification () для определения синтетического несбалансированного двухклассового набора данных классификации. Мы сгенерируем 10 000 примеров с приблизительным соотношением меньшинства к большинству 1: 100.
… # определить набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, веса = [0.99], flip_y = 0, random_state = 4)
… # определить набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, weights = [0.99], flip_y = 0, random_state = 4) |
После создания мы можем суммировать распределение классов, чтобы подтвердить, что набор данных был создан, как мы и ожидали.
… # суммировать распределение классов counter = Counter (y) печать (счетчик)
… # обобщить распределение классов counter = Counter (y) print (counter) |
Наконец, мы можем создать диаграмму разброса примеров и раскрасить их по метке класса, чтобы помочь понять проблему классификации примеров из этого набора данных.
… # точечная диаграмма примеров по метке класса для метки _ в counter.items (): row_ix = where (y == label) [0] pyplot.scatter (X [row_ix, 0], X [row_ix, 1], label = str (label)) пиплот.легенда () pyplot.show ()
… # точечная диаграмма примеров по метке класса для метки, _ в counter.items (): row_ix = where (y == label) [0] pyplot.scatter (X [ row_ix, 0], X [row_ix, 1], label = str (label)) pyplot.legend () pyplot.show () |
Полный пример создания синтетического набора данных и построения графиков приведен ниже.
# Создание и построение набора данных синтетической несбалансированной классификации из коллекций счетчик импорта из sklearn.datasets импортировать make_classification из matplotlib import pyplot из импорта numpy, где # определить набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, веса = [0.99], flip_y = 0, random_state = 4) # суммировать распределение классов counter = Counter (y) печать (счетчик) # точечная диаграмма примеров по метке класса для ярлыка _ в счетчике.Предметы(): row_ix = where (y == label) [0] pyplot.scatter (X [row_ix, 0], X [row_ix, 1], label = str (label)) pyplot.legend () pyplot.show ()
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 |
# Сгенерировать и построить набор данных синтетической несбалансированной классификации из коллекции импорта Counter из sklearn.наборы данных импортировать make_classification из matplotlib import pyplot from numpy import, где # определить набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, _classification = 0, _performance = 0, _кластер =, nights_classs = 0, _perclass =], flip_y = 0, random_state = 4) # суммировать распределение классов counter = Counter (y) print (counter) # точечная диаграмма примеров по метке класса для label, _ in counter.items (): row_ix = where (y == label) [0] pyplot.scatter (X [row_ix, 0], X [row_ix, 1], label = str (label)) pyplot.legend () pyplot.show () |
При выполнении примера сначала создается набор данных и резюмируется распределение классов.
Мы видим, что набор данных имеет приблизительное распределение классов 1: 100 с немногим менее 10 000 примеров в классе большинства и 100 в классе меньшинства.
Счетчик ({0: 9900, 1: 100})
Счетчик ({0: 9900, 1: 100}) |
Затем создается диаграмма разброса набора данных, показывающая большое количество примеров для класса большинства (синий) и небольшое количество примеров для класса меньшинства (оранжевый) с некоторым небольшим перекрытием классов.
Точечная диаграмма набора данных двоичной классификации с дисбалансом классов от 1 до 100
Затем мы можем разместить стандартную модель SVM в наборе данных.
SVM можно определить с помощью класса SVC в библиотеке scikit-learn.
… # определить модель модель = SVC (гамма = ‘масштаб’)
… # определить модель модель = SVC (гамма = ‘масштаб’) |
Мы будем использовать повторную перекрестную проверку для оценки модели с тремя повторениями 10-кратной перекрестной проверки.Характеристики режима будут представлены с использованием средней ROC-площади под кривой (ROC AUC), усредненной по повторам и всем складкам.
… # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (модель, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # подвести итоги print (‘Среднее ROC AUC:% .3f’% среднее (баллы))
… # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (model, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # подвести итоги производительности print (‘Среднее ROC AUC:% .3f’% среднее (баллы)) |
Собирая все вместе, ниже приведен полный пример определения и оценки стандартной модели SVM для проблемы несбалансированной классификации.
SVMявляются эффективными моделями для задач двоичной классификации, хотя по умолчанию они не эффективны при несбалансированной классификации.
# поместите svm на несбалансированный набор данных классификации из среднего значения импорта из sklearn.datasets импортировать make_classification из sklearn.model_selection импорт cross_val_score из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm импортировать SVC # создать набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, веса = [0.99], flip_y = 0, random_state = 4) # определить модель модель = SVC (гамма = ‘масштаб’) # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (модель, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # подвести итоги print (‘Среднее ROC AUC:% .3f’% среднее (баллы))
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 |
# поместите svm в несбалансированный набор данных классификации из numpy import mean из sklearn.наборы данных импортировать make_classification из sklearn.model_selection импорт cross_val_score из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm import SVC # сгенерировать набор данных XDUsdatures, n_classFendant = 0, n_clusters_per_class = 1, weights = [0.99], flip_y = 0, random_state = 4) # определить модель model = SVC (gamma = ‘scale’) # определить процедуру оценки cv = RepeatedStratifiedKF (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (model, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # summarize performance отпечаток (‘Среднее значение ROC AUC:%.3f ‘% среднее (баллы)) |
При выполнении примера оценивается стандартная модель SVM на несбалансированном наборе данных и отображается среднее значение ROC AUC.
Примечание : Ваши результаты могут отличаться из-за стохастической природы алгоритма или процедуры оценки или различий в числовой точности. Попробуйте запустить пример несколько раз и сравните средний результат.
Мы видим, что модель обладает навыком, достигающим ROC AUC выше 0,5, в этом случае средний балл равен 0.804.
Это дает основу для сравнения любых модификаций, выполненных в стандартном алгоритме SVM.
Хотите начать работу с классификацией дисбаланса?
Пройдите бесплатный 7-дневный ускоренный курс по электронной почте (с образцом кода).
Нажмите, чтобы зарегистрироваться, а также получите бесплатную электронную версию курса в формате PDF.
Загрузите БЕСПЛАТНЫЙ мини-курс
SVM для несбалансированной классификации
Машины опорных векторов, или сокращенно SVM, представляют собой эффективный алгоритм нелинейного машинного обучения.
Алгоритм обучения SVM ищет линию или гиперплоскость, которая лучше всего разделяет классы. Гиперплоскость определяется полем, которое максимизирует расстояние между границей решения и ближайшими примерами из каждого из двух классов.
Грубо говоря, запас — это расстояние между границей классификации и ближайшей заданной точкой обучения.
— страницы 343-344, Прикладное прогнозное моделирование, 2013.
Данные могут быть преобразованы с использованием ядра, чтобы позволить определять линейные гиперплоскости для разделения классов в преобразованном пространстве признаков, которое соответствует границе нелинейных классов в исходном пространстве признаков.Общие преобразования ядра включают преобразование линейной, полиномиальной и радиальной базисной функции. Это преобразование данных называется «уловкой ядра ».
Обычно классы не разделяются даже при преобразовании данных. Таким образом, запас смягчается, чтобы позволить некоторым точкам появляться не на той стороне границы решения. Это смягчение маржи контролируется гиперпараметром регуляризации, называемым параметром soft-margin, , лямбда, или заглавная буква C (« C »).
… где C обозначает параметр регуляризации, который управляет компромиссом между максимальным запасом разделения между классами и минимизацией количества ошибочно классифицированных экземпляров.
— стр. 125, Обучение на несбалансированных наборах данных, 2018.
Значение C указывает на жесткую границу и отсутствие допуска для нарушений поля. Небольшие положительные значения допускают некоторое нарушение, тогда как большие целые значения, такие как 1, 10 и 100, допускают гораздо более мягкий запас.
… [C] определяет количество и серьезность нарушений допустимого предела (и гиперплоскости). Мы можем думать о C как о бюджете суммы, на которую маржа может быть нарушена n наблюдениями.
— страница 347, Введение в статистическое обучение: с приложениями в R, 2013.
Несмотря на свою эффективность, SVM плохо работают при сильном перекосе в распределении классов. Таким образом, есть много расширений алгоритма, чтобы сделать их более эффективными для несбалансированных наборов данных.
Хотя SVM часто дают эффективные решения для сбалансированных наборов данных, они чувствительны к дисбалансу в наборах данных и создают неоптимальные модели.
— стр. 86, Несбалансированное обучение: основы, алгоритмы и приложения, 2013.
Параметр C используется в качестве штрафа при подборе модели, в частности, при нахождении границы принятия решения. По умолчанию каждый класс имеет одинаковый вес, что означает, что мягкость поля симметрична.
Учитывая, что в классе большинства имеется значительно больше примеров, чем в классе меньшинства, это означает, что мягкая маржа и, в свою очередь, граница принятия решения будет благоприятствовать классу большинства.
… [] алгоритм обучения будет отдавать предпочтение классу большинства, поскольку концентрация на нем приведет к лучшему компромиссу между ошибкой классификации и максимизацией маржи. Это произойдет за счет класса меньшинства, особенно при высоком коэффициенте дисбаланса, поскольку тогда игнорирование класса меньшинства приведет к лучшим результатам оптимизации.
— стр. 126, Уроки несбалансированных наборов данных, 2018.
Возможно, самым простым и наиболее распространенным расширением SVM для несбалансированной классификации является взвешивание значения C пропорционально важности каждого класса.
Чтобы учесть эти факторы в SVM, была предложена взвешенная модификация на уровне экземпляра. […] Значения весов могут быть заданы в зависимости от соотношения дисбаланса между классами или факторов сложности отдельных экземпляров.
— стр. 130, Обучение на несбалансированных наборах данных, 2018.
В частности, каждый пример в наборе обучающих данных имеет свой собственный штрафной член (значение C ), используемый в вычислении запаса при подборе модели SVM. Значение C в примере может быть вычислено как взвешивание глобального значения C-, где вес определяется пропорционально распределению классов.
Для класса меньшинства можно использовать больший вес, позволяющий сделать маржу более мягкой, тогда как меньший вес можно использовать для класса большинства, заставляя маржу быть более жесткой и предотвращая неправильную классификацию примеров.
- Малый вес : Меньшее значение C , больший штраф за неправильно классифицированные примеры.
- Большой вес : большее значение C , меньший штраф за неправильно классифицированные примеры.
Это дает эффект поощрения маржи для содержания класса большинства с меньшей гибкостью, но позволяет классу меньшинства быть гибким с ошибочной классификацией примеров класса большинства на сторону класса меньшинства, если это необходимо.
То есть, модифицированный алгоритм SVM не будет склонять разделяющую гиперплоскость к примерам классов меньшинства, чтобы уменьшить общее количество ошибок классификации, поскольку примеры классов меньшинства теперь назначаются с более высокой стоимостью ошибочной классификации.
— стр. 89, Несбалансированное обучение: основы, алгоритмы и приложения, 2013.
Эта модификация SVM может называться Weighted Support Vector Machine (SVM) или, в более общем смысле, SVM со взвешенным классом, SVM со взвешенными экземплярами или SVM с учетом затрат.
Основная идея состоит в том, чтобы присвоить разные веса разным точкам данных, чтобы алгоритм обучения WSVM изучал поверхность принятия решений в соответствии с относительной важностью точек данных в наборе обучающих данных.
— Машина с взвешенными опорными векторами для классификации данных, 2007.
Взвешенная SVM с Scikit-Learn
Библиотека машинного обучения Python scikit-learn предоставляет реализацию алгоритма SVM, который поддерживает взвешивание классов.
Классы LinearSVC и SVC предоставляют аргумент class_weight , который можно указать как гиперпараметр модели. class_weight — это словарь, который определяет каждую метку класса (например, 0 и 1) и вес, применяемый к значению C при вычислении мягкого запаса.
Например, весовой коэффициент 1 к 1 для каждого класса 0 и 1 можно определить следующим образом:
… # определить модель веса = {0: 1.0, 1: 1.0} model = SVC (гамма = ‘масштаб’, class_weight = вес)
… # определить модель weights = {0: 1.0, 1: 1.0} model = SVC (gamma = ‘scale’, class_weight = weights) |
Классовое взвешивание может быть определено несколькими способами; например:
- Экспертиза в предметной области , определяется путем разговора с экспертами в предметной области.
- Настройка , определяется поиском гиперпараметров, например поиском по сетке.
- Эвристика , определенная в соответствии с общими рекомендациями.
Лучшим способом использования взвешивания классов является использование обратного распределения классов, присутствующего в наборе обучающих данных.
Например, распределение классов в тестовом наборе данных — это соотношение 1: 100 для класса меньшинства к классу большинства. Инверсия этого отношения может использоваться с 1 для класса большинства и 100 для класса меньшинства; например:
… # определить модель веса = {0: 1.0, 1: 100.0} model = SVC (гамма = ‘масштаб’, class_weight = вес)
… # определить модель weights = {0: 1.0, 1: 100.0} model = SVC (gamma = ‘scale’, class_weight = weights) |
Мы могли бы также определить такое же соотношение, используя дроби, и получить тот же результат; например:
… # определить модель веса = {0: 0.01, 1: 1.0} model = SVC (гамма = ‘масштаб’, class_weight = вес)
… # определить модель weights = {0: 0,01, 1: 1.0} model = SVC (gamma = ‘scale’, class_weight = weights) |
Эта эвристика доступна напрямую при установке class_weight на « сбалансированный ». Например:
… # определить модель model = SVC (гамма = ‘масштаб’, class_weight = ‘сбалансированный’)
… # определить модель модель = SVC (гамма = ‘масштаб’, class_weight = ‘сбалансированный’) |
Мы можем оценить алгоритм SVM с помощью взвешивания классов, используя ту же процедуру оценки, которая была определена в предыдущем разделе.
Мы ожидаем, что взвешенная по классам версия SVM будет работать лучше, чем стандартная версия SVM без какого-либо взвешивания классов.
Полный пример приведен ниже.
# svm с весом класса в несбалансированном наборе данных классификации из среднего значения импорта из склеарна.наборы данных импорт make_classification из sklearn.model_selection импорт cross_val_score из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm импортировать SVC # создать набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, веса = [0.99], flip_y = 0, random_state = 4) # определить модель модель = SVC (гамма = ‘масштаб’, class_weight = ‘сбалансированный’) # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (модель, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # подвести итоги print (‘Среднее значение ROC AUC:%.3f ‘% среднее (баллы))
1 2 3 4 5 6 7 8 9 10 11 12 13 140002 |
# svm с весом класса в несбалансированном наборе данных классификации из numpy import mean from sklearn.datasets import make_classification from sklearn.model_selection import cross_val_score из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm import SVC # сгенерировать набор данных X, y = make_classification (n_samples = 10000, n_per_features = 2, n_features = 2 weights = [0.99], flip_y = 0, random_state = 4) # определить модель model = SVC (gamma = ‘scale’, class_weight =’balanced ‘) # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # оценить модель scores = cross_val_score (model, X, y, scoring = ‘roc_auc’, cv = cv, n_jobs = -1) # подвести итоги print (‘Среднее значение ROC AUC:%.3f ‘% среднее (баллы)) |
При выполнении примера подготавливается набор данных синтетической несбалансированной классификации, затем оценивается версия алгоритма SVM, взвешенная по классам, с использованием повторной перекрестной проверки.
Примечание : Ваши результаты могут отличаться из-за стохастической природы алгоритма или процедуры оценки или различий в числовой точности. Попробуйте запустить пример несколько раз и сравните средний результат.
Сообщается средний показатель ROC AUC, в этом случае он показывает лучший результат, чем невзвешенная версия алгоритма SVM, 0.964 по сравнению с 0,804.
Взвешенный поиск по сетке SVM
Использование взвешивания класса, которое является обратным соотношением обучающих данных, является всего лишь эвристикой.
Возможно, что лучшая производительность может быть достигнута с другим весом класса, и это также будет зависеть от выбора метрики производительности, используемой для оценки модели.
В этом разделе мы проведем поиск по сетке по диапазону различных весов классов для взвешенной SVM и выясним, какие результаты дают лучший результат ROC AUC.
Мы попробуем следующие веса для классов 0 и 1:
- Класс 0: 100, Класс 1: 1
- Класс 0: 10, Класс 1: 1
- Класс 0: 1, Класс 1: 1
- Класс 0: 1, Класс 1: 10
- Класс 0: 1, Класс 1: 100
Их можно определить как параметры поиска по сетке для класса GridSearchCV следующим образом:
… # определить сетку баланс = [{0: 100,1: 1}, {0: 10,1: 1}, {0: 1,1: 1}, {0: 1,1: 10}, {0: 1,1: 100}] param_grid = dict (class_weight = баланс)
… # define grid balance = [{0: 100,1: 1}, {0: 10,1: 1}, {0: 1,1: 1}, {0: 1,1: 10 }, {0: 1,1: 100}] param_grid = dict (class_weight = balance) |
Мы можем выполнить поиск по сетке по этим параметрам, используя повторную перекрестную проверку, и оценить производительность модели, используя ROC AUC:
… # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # определить поиск по сетке grid = GridSearchCV (оценка = модель, param_grid = param_grid, n_jobs = -1, cv = cv, scoring = ‘roc_auc’)
… # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # определить поиск по сетке grid = GridSearchCV (оценка = модель, param_grid = param_grid, n_grid = param_grid, n , cv = cv, scoring = ‘roc_auc’) |
После выполнения мы можем суммировать лучшую конфигурацию, а также все результаты следующим образом:
… # сообщить о лучшей конфигурации print («Лучшее:% f с использованием% s»% (grid_result.best_score_, grid_result.best_params_)) # сообщить обо всех конфигурациях означает = grid_result.cv_results _ [‘mean_test_score’] stds = grid_result.cv_results _ [‘std_test_score’] params = grid_result.cv_results _ [‘параметры’] для mean, stdev, param в zip (means, stds, params): print («% f (% f) with:% r»% (mean, stdev, param))
… # сообщить о лучшей конфигурации print («Лучшее:% f с использованием% s»% (grid_result.best_score_, grid_result.best_params_)) # сообщать обо всех конфигурациях means = grid_result.cv_results _ [‘mean_test_score’] stds = grid_result.cv_results _ [‘std_test_score’] 9result_score.для среднего, стандартного отклонения, параметра в ZIP-архиве (означает, стандартное отклонение, параметры): print («% f (% f) с:% r»% (среднее, стандартное отклонение, параметр)) |
Связывая это вместе, в приведенном ниже примере сетки выполняется поиск пяти различных весов классов для алгоритма SVM в несбалансированном наборе данных.
Можно ожидать, что эвристическое взвешивание классов является наиболее производительной конфигурацией.
# поиск по сетке весов классов с помощью svm для классификации дисбаланса из среднего значения импорта из sklearn.datasets импортировать make_classification из sklearn.model_selection import GridSearchCV из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm импортировать SVC # создать набор данных X, y = make_classification (n_samples = 10000, n_features = 2, n_redundant = 0, n_clusters_per_class = 1, веса = [0.99], flip_y = 0, random_state = 4) # определить модель модель = SVC (гамма = ‘масштаб’) # определить сетку баланс = [{0: 100,1: 1}, {0: 10,1: 1}, {0: 1,1: 1}, {0: 1,1: 10}, {0: 1,1: 100}] param_grid = dict (class_weight = баланс) # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # определить поиск по сетке grid = GridSearchCV (оценка = модель, param_grid = param_grid, n_jobs = -1, cv = cv, scoring = ‘roc_auc’) # выполнить поиск по сетке grid_result = сетка.подходят (X, y) # сообщить о лучшей конфигурации print («Лучшее:% f с использованием% s»% (grid_result.best_score_, grid_result.best_params_)) # сообщить обо всех конфигурациях означает = grid_result.cv_results _ [‘mean_test_score’] stds = grid_result.cv_results _ [‘std_test_score’] params = grid_result.cv_results _ [‘параметры’] для mean, stdev, param в zip (means, stds, params): print («% f (% f) with:% r»% (mean, stdev, param))
1 2 3 4 5 6 7 8 9 10 11 12 13 140002
14 18 19 20 21 22 23 24 25 26 27 28 |
# вес классов поиска сетки с svm для классификации дисбаланса из numpy import mean из sklearn.наборы данных импортировать make_classification из sklearn.model_selection import GridSearchCV из sklearn.model_selection import RepeatedStratifiedKFold из sklearn.svm import SVC # generate dataset 10000_classification 0,n_clusters_per_class = 1, weights = [0.99], flip_y = 0, random_state = 4) # определить модель model = SVC (gamma = ‘scale’) # define grid balance = [{ 0: 100,1: 1}, {0: 10,1: 1}, {0: 1,1: 1}, {0: 1,1: 10}, {0: 1,1: 100}] param_grid = dict (class_weight = balance) # определить процедуру оценки cv = RepeatedStratifiedKFold (n_splits = 10, n_repeats = 3, random_state = 1) # определить поиск по сетке grid = GridSearchridCV (param = param_grid, n_jobs = -1, cv = cv, scoring = ‘roc_auc’) # выполнить поиск по сетке grid_result = grid.fit (X, y) # сообщить о лучшей конфигурации print («Best:% f using% s»% (grid_result.best_score_, grid_result.best_params_)) # сообщить обо всех конфигурациях means = grid_result.cv_results_ [‘mean_test_score’] stds = grid_result.cv_results _ [‘std_test_score’] params = grid_result.cv_results _ [‘params’] для среднего, stdev, param в zip (means, stds, params):: print («% f (% f) с:% r»% (среднее, стандартное отклонение, параметр)) |
При выполнении примера оценивается вес каждого класса с использованием повторной k-кратной перекрестной проверки и отображается лучшая конфигурация и соответствующий средний показатель ROC AUC.
Примечание : Ваши результаты могут отличаться из-за стохастической природы алгоритма или процедуры оценки или различий в числовой точности. Попробуйте запустить пример несколько раз и сравните средний результат.
В этом случае мы видим, что соотношение 1: 100 от большинства к классу меньшинства дает лучший средний балл ROC. Это соответствует конфигурации для общей эвристики.
Было бы интересно изучить еще более строгие веса классов, чтобы увидеть их влияние на средний показатель ROC AUC.
Лучшее: 0,966189 при использовании {‘class_weight’: {0: 1, 1: 100}} 0,745249 (0,129002) с: {‘class_weight’: {0: 100, 1: 1}} 0,748407 (0,128049) с: {‘class_weight’: {0: 10, 1: 1}} 0.803727 (0.103536) с: {‘class_weight’: {0: 1, 1: 1}} 0,932620 (0,059869) с: {‘class_weight’: {0: 1, 1: 10}} 0,966189 (0,036310) с: {‘class_weight’: {0: 1, 1: 100}}
Best: 0,966189 с использованием {‘class_weight’: {0: 1, 1: 100}} 0.745249 (0.129002) с: {‘class_weight’: {0: 100, 1: 1}} 0,748407 (0.128049) с: {‘class_weight’: {0: 10, 1: 1}} 0.803727 (0.103536) с: {‘class_weight’: {0: 1, 1: 1}} 0,932620 (0,059869) с: {‘class_weight’: {0: 1, 1: 10}} 0,966189 (0,036310) с: {‘ class_weight ‘: {0: 1, 1: 100}} |
Дополнительная литература
Этот раздел предоставляет дополнительные ресурсы по теме, если вы хотите углубиться.
Документы
Книги
API
Статьи
Сводка
В этом руководстве вы обнаружили машины с взвешенными опорными векторами для несбалансированной классификации.
В частности, вы выучили:
- Как стандартный алгоритм машины опорных векторов ограничен для несбалансированной классификации.
- Как можно модифицировать алгоритм машины опорных векторов для взвешивания штрафа на марже, пропорционального важности класса во время обучения.
- Как настроить вес класса для SVM и как выполнить поиск по сетке для различных конфигураций веса класса.
Есть вопросы?
Задайте свои вопросы в комментариях ниже, и я постараюсь ответить.
Разберитесь с несбалансированной классификацией!
Разработка несбалансированных моделей обучения за считанные минуты
… всего несколькими строками кода Python
Узнайте, как в моей новой электронной книге:
Несбалансированная классификация с Python
Он предоставляет руководств для самообучения и сквозных проектов по:
Метрики производительности , Методы пониженной дискретизации , SMOTE , Смещение порога , Калибровка вероятности , Экономически чувствительные алгоритмы
и многое другое…
Привнесите несбалансированные методы классификации в свои проекты машинного обучения
Посмотрите, что внутри Классификация— как работает машина опорных векторов (SVM)?
Метод основан на проведении линии границы принятия решений, оставляющей как можно более широкий запас для первых положительных и отрицательных примеров:
Как на иллюстрации выше, если мы выберем ортогональный вектор так, что $ \ lVert w \ rVert = 1 $, мы сможем установить критерий решения для любого неизвестного примера $ \ mathbf u $, который будет каталогизирован как положительный в форме:
$$ \ color {синий} {\ mathbf w} \ cdot {\ mathbf u} \ geq C $$
, что соответствует значению, при котором проекция помещается за линией принятия решения в середине улицы.Обратите внимание, что $ \ color {blue} {\ mathbf w} \ cdot {\ mathbf u} = {\ mathbf u} \ cdot \ color {blue} {\ mathbf w} $.
Эквивалентным условием для положительной пробы будет:
$$ \ color {синий} {\ mathbf w} \ cdot \ mathbf u + b \ geq 0 \ tag 1 $$
с $ C = — b.
$Нам нужны $ b $ и $ \ color {blue} {\ mathbf w} $, чтобы иметь решающее правило, и чтобы добраться туда, нам нужно ограничений .
Первое ограничение , которое мы собираемся наложить, состоит в том, что для любой положительной выборки $ \ mathbf x _ +, $, $ \ color {blue} {\ mathbf w} \ cdot \ mathbf x_ + + b \ geq 1 $; а для отрицательных образцов — $ \ color {blue} {\ mathbf w} \ cdot \ mathbf x_- + b \ leq -1 $.На границе раздела или гиперплоскости ( медиана ) значение будет 0 $, а значения на желобах будут 1 $ и -1 $:
.
Вектор $ \ bf w $ — это вектор весов , тогда как $ b $ — это смещение .
Чтобы свести эти два неравенства вместе, мы можем ввести переменную $ y_i $ так, чтобы $ y_i = + 1 $ для положительных примеров и $ y_i = -1 $, если примеры отрицательные, и заключить
$$ y_i (x_i \ cdot \ color {blue} {\ mathbf w} + b) -1 \ geq 0.
$Итак, мы устанавливаем, что это должно быть больше нуля, , но , если пример находится на гиперплоскостях («желобах»), которые максимизируют запас разделения между гиперплоскостью принятия решения и концами опорных векторов, в данном случае строк), затем:
$$ y_i \, (x_i \ cdot \ color {blue} {\ mathbf w} + b) -1 = 0 \ tag 2 $$
Обратите внимание, что это эквивалентно требованию $ y_i \, (x_i \ cdot \ color {blue} {\ mathbf w} + b) = 1. $
Второе ограничение : расстояние от гиперплоскости принятия решения до концов опорных векторов будет максимальным.Другими словами, предел разделения («улица») будет максимальным:
Предполагая единичный вектор, перпендикулярный границе принятия решения, $ \ mathbf w $, скалярное произведение с разницей между двумя «граничными» плюсами и минусами составляет ширину «улицы». :
$$ \ text {width} = (x_ + \, {\ bf -} \, x_-) \ cdot \ frac {w} {\ lVert w \ rVert} $$
В приведенном выше уравнении $ x _ + $ и $ x _- $ — это в желобе (на гиперплоскостях с максимальным разделением).Следовательно, для положительного примера: $ ({\ mathbf x_i} \ cdot \ color {blue} {\ mathbf w} + b) -1 = 0 $ или $ {\ mathbf x _ +} \ cdot \ color {blue} {\ mathbf w} = 1 — b $; и для отрицательного примера: $ {\ mathbf x _-} \ cdot \ color {blue} {\ mathbf w} = -1 — b $. Итак, переформулируем ширину улицы:
$$ \ begin {align} \ text {width} & = (x_ + \, {\ bf -} \, x_-) \ cdot \ frac {w} {\ lVert w \ rVert} \\ [1.5ex] & = \ frac {x _ + \ cdot w \, {\ bf -} \, x _- \ cdot w} {\ lVert w \ rVert} \\ [1.5ex] & = \ frac {1-b — (- 1-b)} {\ lVert w \ rVert} \\ [1.2 — \ sum \ lambda_i \ Big [y_i \, \ left (\ mathbf x_i \ cdot \ color {blue} {\ mathbf w} + b \ right) -1 \ Big] \ tag 5 $$
Дифференцирующая,
$$ \ frac {\ partial \ mathscr {L}} {\ partial \ color {синий} {\ mathbf w}} = \ color {синий} {\ mathbf w} — \ sum \ lambda_i \; y_i \; \ mathbf x_i = 0 $$.
Следовательно,
$$ \ color {синий} {\ mathbf w} = \ sum \ lambda_i \; y_i \; \ mathbf x_i \ tag 6 $$
И дифференциация по $ b:
$$$ \ frac {\ partial \ mathscr {L}} {\ partial b} = — \ sum \ lambda_i y_i = 0, $$
, что означает, что у нас есть произведение множителей и меток с нулевой суммой:
$$ \ сумма \ lambda_i \, y_i = 0 \ tag 7 $$
Подставляя уравнение (6) обратно в уравнение (5),
$$ \ mathscr {L} = \ frac {1} {2} \ color {purple} {\ left (\ sum \ lambda_i y_i \ mathbf x_i \ right) \, \ left (\ sum \ lambda_j y_j \ mathbf x_j \ right)} — \ color {green} {\ left (\ sum \ lambda_i y_i \ mathbf x_i \ right) \ cdot \ left (\ sum \ lambda_j y_j \ mathbf x_j \ right)} — \ sum \ lambda_i y_i b + \ sum \ lambda_i $$
Предпоследний член равен нулю согласно уравнению (7).
Следовательно,
$$ \ mathscr {L} = \ sum \ lambda_i — \ frac {1} {2} \ displaystyle \ sum_i \ sum_j \ lambda_i \ lambda_j \, \, y_i y_j \, \, \ mathbf x_i \ cdot \ mathbf x_j \ tag 8 $$
Уравнение (8) является окончательным лагранжианом.
Следовательно, оптимизация зависит от скалярного произведения пар примеров.
Возвращаясь к «решающему правилу» в уравнении (1) выше и используя уравнение (6):
$$ \ сумма \; \ lambda_i \; y_i \; \ mathbf x_i \ cdot \ mathbf u + b \ geq 0 \ tag 9 $$
будет окончательным правилом решения для нового вектора $ \ mathbf u.$
машин опорных векторов для двоичной классификации — MATLAB и Simulink
Разделимые данные
Вы можете использовать машину опорных векторов (SVM), когда ваши данные имеют ровно два класса. SVM классифицирует данные, находя лучшую гиперплоскость, которая отделяет все точки данных одного класса от точек другого класса. Лучшая гиперплоскость для SVM означает гиперплоскость с наибольшим запасом между двумя классами. Маржа означает максимальную ширину плиты, параллельную гиперплоскости, не имеющую внутренних точек данных.
Опорные векторы — это точки данных, которые находятся ближе всего к разделяющей гиперплоскости; эти точки находятся на границе плиты. На следующем рисунке показаны эти определения, где + указывает точки данных типа 1, а — указывает точки данных типа –1.
Математическая формулировка: Primal. Это обсуждение следует за Хасти, Тибширани и Фридманом [1] и Кристианини и Шоу-Тейлор [2].
Данные для обучения представляют собой набор точек (векторов) x j вместе с их категориями y j .Для некоторого размера d , x j ∊ R d и y j = ± 1. Уравнение гиперплоскости
, где β ∊ R d и b — действительное число.
Следующая задача определяет наилучшую разделяющую гиперплоскость (т. Е. Границу решения). Найдите β и b , которые минимизируют || β || так, что для всех точек данных ( x j , y j ),
Опорными векторами являются x j на границе, для которых yjf (xj) = 1.(z) — это классификационная оценка и представляет собой расстояние z от границы принятия решения.
Математическая формулировка: двойственная. Решить двойную задачу квадратичного программирования в вычислительном отношении проще. Чтобы получить двойственное, возьмите положительные множители Лагранжа α j , умноженные на каждое ограничение, и вычтите из целевой функции:
, где вы ищите стационарную точку L P над β и b. .Установив градиент L P на 0, вы получите
β = ∑jαjyjxj0 = ∑jαjyj. | (1) |
Подставив в L P , вы получите двойной L D :
, который вы максимизируете более чем α j ≥ 0. В общем, многие α j — максимум 0. Ненулевое значение α j в решении двойной задачи определяет гиперплоскость, как показано в уравнении 1, которое дает β как сумму α j y j x j .Точки данных x j , соответствующие отличному от нуля α j , являются опорными векторами .
Производная L D относительно ненулевого значения α j равна 0 в оптимуме. Это дает
В частности, это дает значение b в решении, если взять любое j с ненулевым α j .
Дуал — это стандартная задача квадратичного программирования.Например, Optimization Toolbox ™
quadprog
(Optimization Toolbox) решатель решает этот тип проблем.
Несепарабельные данные
Ваши данные могут не допускать разделяющую гиперплоскость. В этом случае SVM может использовать мягкое поле , что означает гиперплоскость, разделяющую многие, но не все точки данных.
Есть два стандартных состава мягких полей. Оба включают добавление переменных резервов ξ j и параметра штрафа C .
-
Норма L 1 :
, так что
Норма L 1 относится к использованию ξ j в качестве переменных запаса вместо их квадратов. Три варианта решателя:
SMO
,ISDA
иL1QP
изfitcsvm
минимизируют проблему L 1 -norm. -
Нормальная проблема L 2 :
с теми же ограничениями.
В этих формулировках вы можете видеть, что увеличение C придает больший вес переменным резервов ξ j , что означает, что оптимизация пытается более строго разделить классы. Точно так же уменьшение C до 0 делает неправильную классификацию менее важной.
Математическая формулировка: двойственная. Для упрощения вычислений рассмотрим двойную задачу L 1 для этой формулировки с мягким краем.Используя множители Лагранжа μ j , функция для минимизации нормальной задачи L 1 :
, где вы ищите стационарную точку L P над β , b , а положительный ξ j . Устанавливая градиент L P на 0, вы получаете
Эти уравнения приводят непосредственно к двойной формулировке:
с учетом ограничений
Окончательный набор неравенств, 0 ≤ α j ≤ C показывает, почему C иногда называют ограничением блока . C сохраняет допустимые значения множителей Лагранжа α j в «прямоугольнике», ограниченной области.
Уравнение градиента для b дает решение b в терминах набора ненулевых α j , которые соответствуют опорным векторам.
Аналогичным образом можно написать и решить двойную задачу L 2 -norm. Подробнее см. Кристианини и Шоу-Тейлор [2], глава 6.
fitcsvm
Внедрение. Обе двойные задачи с мягким краем являются задачами квадратичного программирования. Внутри fitcsvm
есть несколько различных алгоритмов решения проблем.
-
Для одноклассной или двоичной классификации, если вы не устанавливаете долю ожидаемых выбросов в данных (см.
OutlierFraction
), то решателем по умолчанию является последовательная минимальная оптимизация (SMO). SMO минимизирует проблему с одной нормой с помощью серии минимизаций по двум точкам.Во время оптимизации SMO учитывает линейное ограничение ∑iαiyi = 0 и явно включает член смещения в модель. SMO относительно быстро. Подробнее о SMO см. [3]. -
Для двоичной классификации, если вы устанавливаете долю ожидаемых выбросов в данных, то решателем по умолчанию будет Итеративный алгоритм отдельных данных. Как и SMO, ISDA решает проблему одной нормы. В отличие от SMO, ISDA минимизирует серию по одноточечной минимизации, не соблюдает линейное ограничение и не включает явным образом член смещения в модель.Подробнее об ISDA см. [4].
-
Для одноклассной или двоичной классификации и если у вас есть лицензия Optimization Toolbox, вы можете использовать
quadprog
(Optimization Toolbox) для решения проблемы с одной нормой.quadprog
использует много памяти, но решает квадратичные программы с высокой степенью точности. Для получения дополнительных сведений см. Определение квадратичного программирования (Инструменты оптимизации).
Нелинейное преобразование с ядрами
Некоторые задачи двоичной классификации не имеют простой гиперплоскости в качестве полезного критерия разделения.Для этих задач существует вариант математического подхода, который сохраняет почти всю простоту разделяющей гиперплоскости SVM.
В этом подходе используются следующие результаты теории воспроизведения ядер:
-
Существует класс функций G ( x 1 , x 2 ) со следующим свойством. Существует линейное пространство S и функция φ , отображающая x в S , так что
G ( x 1 , x 2 ) = < φ ( x 1 ), φ ( x 2 )>.
Скалярное произведение имеет место в пространстве S .
-
Этот класс функций включает:
-
Полиномы: для некоторого положительного целого числа p ,
G ( x 1 , x 2 ) = (1 + x 1 ′ x 2 ) p .
-
Радиальная базисная функция (по Гауссу):
G ( x 1 , x 2 ) = exp (–∥ x 1 — x 2 ) ∥ 2 ).
-
Многослойный персептрон или сигмоид (нейронная сеть): для положительного числа p 1 и отрицательного числа p 2 ,
G ( x 1 , x 2 ) = tanh ( p 1 x 1 ′ x 2 + p 2 ).
-
Математический подход с использованием ядер основан на вычислительном методе гиперплоскостей.Все вычисления для классификации гиперплоскостей используют не что иное, как скалярные произведения. Следовательно, нелинейные ядра могут использовать идентичные вычисления и алгоритмы решения, а также получать нелинейные классификаторы. Результирующие классификаторы представляют собой гиперповерхности в некотором пространстве S , но пространство S не нужно идентифицировать или исследовать.
(Учебное пособие) Машины опорных векторов (SVM) в Scikit-learn
SVM предлагает очень высокую точность по сравнению с другими классификаторами, такими как логистическая регрессия и деревья решений.Он известен своей уловкой ядра для обработки нелинейных входных пространств. Он используется в различных приложениях, таких как обнаружение лиц, обнаружение вторжений, классификация электронных писем, новостных статей и веб-страниц, классификация генов и распознавание почерка.
В этом руководстве вы будете использовать scikit-learn на Python. Если вы хотите узнать больше об этом пакете Python, я рекомендую вам взглянуть на наш курс контролируемого обучения с помощью scikit-learn.
SVM — захватывающий алгоритм, и концепция относительно проста.Классификатор разделяет точки данных с помощью гиперплоскости с наибольшим размером поля. Вот почему классификатор SVM также известен как дискриминантный классификатор. SVM находит оптимальную гиперплоскость, которая помогает в классификации новых точек данных.
Машины опорных векторов
Обычно машины опорных векторов считаются подходом к классификации, но его можно использовать как в задачах классификации, так и в задачах регрессии. Он может легко обрабатывать несколько непрерывных и категориальных переменных.SVM строит гиперплоскость в многомерном пространстве для разделения разных классов. SVM итеративно генерирует оптимальную гиперплоскость, которая используется для минимизации ошибки. Основная идея SVM — найти максимальную маргинальную гиперплоскость (MMH), которая наилучшим образом разделяет набор данных на классы.
Опорные векторы
Опорные векторы — это точки данных, которые находятся ближе всего к гиперплоскости. Эти точки будут лучше определять разделительную линию при расчете полей. Эти моменты больше подходят для построения классификатора.
Гиперплоскость
Гиперплоскость — это плоскость принятия решений, которая разделяет набор объектов, имеющих различную принадлежность к классам.
Маржа
Маржа — это промежуток между двумя линиями на ближайших классных точках. Это рассчитывается как перпендикулярное расстояние от линии до опорных векторов или ближайших точек. Если разница между классами больше, то это считается хорошей маржей, меньшая маржа — плохой.
Как работает SVM?
Основная цель — наилучшим образом разделить данный набор данных.Расстояние между ближайшими точками называется полем. Цель состоит в том, чтобы выбрать гиперплоскость с максимально возможным запасом между опорными векторами в данном наборе данных. SVM ищет максимальную граничную гиперплоскость, выполнив следующие шаги:
-
Создает гиперплоскости, которые наилучшим образом разделяют классы. На рисунке слева показаны три гиперплоскости: черный, синий и оранжевый. Здесь синий и оранжевый имеют более высокую ошибку классификации, но черный правильно разделяет два класса.
-
Выберите правую гиперплоскость с максимальным отделением от ближайших точек данных, как показано на рисунке справа.
Работа с нелинейными и неразрывными плоскостями
Некоторые проблемы невозможно решить с помощью линейной гиперплоскости, как показано на рисунке ниже (слева).
В такой ситуации SVM использует трюк с ядром для преобразования входного пространства в пространство более высокой размерности, как показано справа.2). Теперь вы можете легко разделить эти точки с помощью линейного разделения.
Ядра SVM
На практике алгоритм SVM реализован с использованием ядра. Ядро преобразует пространство входных данных в требуемую форму. SVM использует технику, называемую трюком с ядром. Здесь ядро берет низкоразмерное входное пространство и преобразует его в более высокомерное пространство. Другими словами, вы можете сказать, что он преобразует неразрывную проблему в разделимые проблемы, добавляя к ней больше измерений.Это наиболее полезно в задаче нелинейного разделения. Уловка с ядром поможет вам построить более точный классификатор.
- Линейное ядро Линейное ядро может использоваться как нормальное скалярное произведение любых двух данных наблюдений. Произведение между двумя векторами — это сумма умножения каждой пары входных значений.
К (x, xi) = сумма (x * xi)
- Полиномиальное ядро
Полиномиальное ядро - это более обобщенная форма линейного ядра.2))
Здесь гамма — это параметр, который находится в диапазоне от 0 до 1. Более высокое значение гаммы идеально соответствует набору обучающих данных, что приводит к чрезмерной подгонке. Гамма = 0,1 считается хорошим значением по умолчанию. Значение гаммы необходимо вручную указать в алгоритме обучения.
Здание классификатора в Scikit-learn
До сих пор вы изучили теоретические основы SVM. Теперь вы узнаете о его реализации на Python с помощью scikit-learn.
В модели строительной части вы можете использовать набор данных рака, что является очень известной проблемой классификации нескольких классов. Этот набор данных вычисляется из оцифрованного изображения тонкой иглы для аспирации (FNA) новообразования груди. Они описывают характеристики ядер клеток, представленных на изображении.
Набор данных включает 30 характеристик (средний радиус, средняя текстура, средний периметр, средняя площадь, средняя гладкость, средняя компактность, средняя вогнутость, средние вогнутые точки, средняя симметрия, средняя фрактальная размерность, ошибка радиуса, ошибка текстуры, ошибка периметра, ошибка площади). , ошибка гладкости, ошибка компактности, ошибка вогнутости, ошибка точек вогнутости, ошибка симметрии, ошибка фрактального измерения, худший радиус, худшая текстура, худший периметр, худшая область, худшая гладкость, худшая компактность, худшая вогнутость, худшие точки вогнутости, худшая симметрия и худшая фрактальная размерность) и цель (тип рака).
В этих данных есть два типа рака: злокачественный (вредный) и доброкачественный (невредный). Здесь вы можете построить модель для классификации типа рака. Набор данных доступен в библиотеке scikit-learn, или вы также можете загрузить его из библиотеки машинного обучения UCI.
Загрузка данных
Давайте сначала загрузим необходимый набор данных, который вы будете использовать.
# Импорт библиотеки набора данных scikit-learn из наборов данных импорта sklearn # Загрузить набор данных рак = наборы данных.load_breast_cancer ()
Исследование данных
После загрузки набора данных вы можете узнать о нем немного больше. Вы можете проверить имена функций и целей.
# вывести названия 13 функций print ("Характеристики:", Cancer.feature_names) # распечатать этикетку типа рака ('злокачественный' 'доброкачественный') print ("Ярлыки:", Cance.target_names)
Характеристики: ['средний радиус' 'средняя текстура' 'средний периметр' 'средняя площадь' 'средняя гладкость' означает компактность 'означает вогнутость' 'средние вогнутые точки' 'средняя симметрия' 'средняя фрактальная размерность' 'ошибка радиуса' ошибка текстуры 'ошибка периметра' ошибка области ' 'ошибка гладкости' ошибка компактности 'ошибка вогнутости' 'ошибка вогнутых точек' ошибка симметрии 'ошибка фрактальной размерности' 'худший радиус' худшая текстура 'худший периметр' худшая область ' 'худшая гладкость' худшая компактность 'худшая вогнутость' "худшие вогнутые точки" худшая симметрия "худшее фрактальное измерение"] Ярлыки: ['злокачественный' 'доброкачественный']
Давайте рассмотрим его подробнее.Вы также можете проверить форму набора данных с помощью shape.
# данные для печати (функция) shape рак.data.shape
(569, 30)
Давайте проверим 5 лучших записей набора функций.
# распечатать функции данных рака (первые 5 записей) печать (раковые данные [0: 5])
[[1.799e + 01 1.038e + 01 1.228e + 02 1.001e + 03 1.184e-01 2.776e-01 3.001e-01 1.471e-01 2.419e-01 7.871e-02 1.095e + 00 9.053e-01 8.589e + 00 1.534e + 02 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e + 01 1.733e + 01 1.846e + 02 2.019e + 03 1.622e-01 6.656e-01 7.119e-01 2.654e-01 4.601e-01 1.189e-01] [2.057e + 01 1.777e + 01 1.329e + 02 1.326e + 03 8.474e-02 7.864e-02 8.690e-02 7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e + 00 7.408e + 01 5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e + 01 2.341e + 01 1.588e + 02 1.956e + 03 1.238e-01 1.866e-01 2.416e-01 1.860e-01 2.750e-01 8.902e-02] [1.969e + 01 2.125e + 01 1.300e + 02 1.203e + 03 1.096e-01 1.599e-01 1.974e-01 1.279e-01 2.069e-01 5.999e-02 7.456e-01 7.869e-01 4.585e + 00 9.403e + 01 6.150e-03 4.006e-02 3.832e-02 2.058e-02 2.250e-02 4.571e-03 2.357e + 01 2.553e + 01 1.525e + 02 1.709e + 03 1.444e-01 4.245e-01 4.504e-01 2.430e-01 3.613e-01 8.758e-02] [1.142e + 01 2.038e + 01 7.758e + 01 3.861e + 02 1.425e-01 2.839e-01 2.414e-01 1.052e-01 2.597e-01 9.744e-02 4.956e-01 1.156e + 00 3.445e + 00 2.723e + 01 9.110e-03 7.458e-02 5.661e-02 1.867e-02 5.963e-02 9.208e-03 1.491e + 01 2.650e + 01 9.887e + 01 5.677e + 02 2.098e-01 8.663e-01 6.869e-01 2.575e-01 6.638e-01 1.730e-01] [2.029e + 01 1.434e + 01 1.351e + 02 1.297e + 03 1.003e-01 1.328e-01 1.980e-01 1.043e-01 1.809e-01 5.883e-02 7.572e-01 7.813e-01 5.438e + 00 9.444e + 01 1.149e-02 2.461e-02 5.688e-02 1.885e-02 1.756e-02 5.115e-03 2.254e + 01 1.667e + 01 1.522e + 02 1.575e + 03 1.374e-01 2.050e-01 4.000e-01 1.625e-01 2.364e-01 7.678e-02]]
Давайте посмотрим на целевой набор.
# распечатать метки рака (0: злокачественный, 1: доброкачественный) печать (Cance.target)
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0 1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1 1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1]
Разделение данных
Чтобы понять производительность модели, хорошей стратегией является разделение набора данных на обучающий набор и тестовый набор.
Разделите набор данных с помощью функции
train_test_split ()
. вам нужно передать 3 параметра features, target и test_set size. Кроме того, вы можете использовать random_state для случайного выбора записей.# Импортировать функцию train_test_split из sklearn.model_selection import train_test_split # Разделить набор данных на обучающий набор и тестовый набор X_train, X_test, y_train, y_test = train_test_split (Cance.data, Cance.target, test_size = 0.3, random_state = 109) # 70% обучение и 30% тест
Генерирующая модель
Построим опорную векторную модель машины.Сначала импортируйте модуль SVM и создайте объект классификатора вектора поддержки, передав аргумент kernel как линейное ядро в функции
SVC ()
.Затем поместите свою модель в набор поездов с помощью
fit ()
и выполните прогноз на тестовом наборе с помощьюpred ()
.# Импорт модели svm из sklearn import svm # Создание svm-классификатора clf = svm.SVC (kernel = 'linear') # Линейное ядро # Обучите модель с помощью обучающих наборов clf.подходят (X_train, y_train) # Предсказать ответ для тестового набора данных y_pred = clf.predict (X_test)
Оценка модели
Давайте оценим, насколько точно классификатор или модель может предсказать рак груди у пациенток.
Точность можно вычислить путем сравнения фактических значений тестовой выборки и прогнозируемых значений.
# Импорт модуля метрик scikit-learn для расчета точности из показателей импорта sklearn # Точность модели: как часто классификатор верен? print ("Точность:", метрики.precision_score (y_test, y_pred))
Точность: 0,964
07017544 Итак, у вас коэффициент классификации 96,49%, что считается очень хорошей точностью.
Для дальнейшей оценки вы также можете проверить точность и отзыв модели.
# Model Precision: какой процент положительных кортежей помечены как таковые? print ("Точность:", metrics.precision_score (y_test, y_pred)) # Отзыв модели: какой процент положительных кортежей помечены как таковые? print ("Напомнить:", metrics.отзыв_score (y_test, y_pred))
Точность: 0,9811320754716981 Напомним: 0,9629629629629629
Итак, вы получили точность 98% и запоминание 96%, что считается очень хорошими значениями.
Настройка гиперпараметров
- Ядро : Основная функция ядра — преобразовать входные данные заданного набора данных в требуемую форму. Существуют различные типы функций, такие как линейная, полиномиальная и радиальная базисная функция (RBF).Полином и RBF полезны для нелинейной гиперплоскости. Ядра Polynomial и RBF вычисляют разделительную линию в более высоком измерении. В некоторых приложениях предлагается использовать более сложное ядро для разделения изогнутых или нелинейных классов. Это преобразование может привести к более точным классификаторам.
- Регуляризация : параметр регуляризации в параметре Python Scikit-learn C, используемый для поддержания регуляризации. Здесь C — параметр штрафа, который представляет ошибочную классификацию или член ошибки.Термин «неправильная классификация» или «ошибка» сообщает оптимизатору SVM, насколько допустима ошибка. Вот как вы можете контролировать компромисс между границей решения и ошибочной классификацией. Меньшее значение C создает гиперплоскость с маленькими полями, а большее значение C создает гиперплоскость с большими полями.
- Гамма : более низкое значение гаммы будет плохо соответствовать набору обучающих данных, тогда как более высокое значение гаммы будет точно соответствовать набору обучающих данных, что приведет к чрезмерной подгонке.Другими словами, вы можете сказать, что низкое значение гаммы учитывает только близлежащие точки при вычислении линии разделения, в то время как значение гаммы учитывает все точки данных при вычислении линии разделения.
Преимущества
КлассификаторыSVM обеспечивают хорошую точность и обеспечивают более быстрое прогнозирование по сравнению с наивным байесовским алгоритмом. Они также используют меньше памяти, потому что используют подмножество тренировочных точек на этапе принятия решения. SVM хорошо работает с четким разделением и пространством большой размерности.
Недостатки
SVM не подходит для больших наборов данных из-за большого времени обучения, а также требует больше времени на обучение по сравнению с наивным байесовским методом. Он плохо работает с перекрывающимися классами, а также чувствителен к типу используемого ядра.
Заключение
Поздравляем, вы дошли до конца этого урока!
В этом руководстве вы много узнали об алгоритме опорной векторной машины, его работе, ядрах, настройке гиперпараметров, построении модели и оценке набора данных о раке груди с использованием пакета Scikit-learn.Вы также рассмотрели его преимущества и недостатки. Надеюсь, вы узнали что-то ценное!
Чтобы узнать больше об этом типе классификаторов, вам следует взглянуть на наш курс «Линейные классификаторы в Python». Он вводит другие типы функций регрессии и потерь, а также машины опорных векторов.
Я с нетерпением жду любых отзывов или вопросов. Вы можете задать вопрос, оставив комментарий, и я постараюсь на него ответить.
Как работает алгоритм опорных векторов (SVM) в машинном обучении?
Я предполагаю, что к настоящему времени был бы знаком с алгоритмами линейной регрессии и логистической регрессии.Если вы не следовали тому же алгоритму, я бы порекомендовал вам сначала пройти их, прежде чем переходить к поддержке векторных машин.
Машина опорных векторов — очень важный и универсальный алгоритм машинного обучения, он способен выполнять линейную и нелинейную классификацию, регрессию и обнаружение выбросов. Машины опорных векторов, также известные как SVM, — еще один алгоритм, широко используемый специалистами по машинному обучению как для классификации, так и для решения задач регрессии, но широко используется для задач классификации.Он предпочтительнее других алгоритмов классификации, поскольку требует меньше вычислений и обеспечивает заметную точность. Это хорошо, потому что дает надежные результаты даже при меньшем количестве данных.
В этом блоге мы объясним, что такое SVM, как работает SVM, плюсы и минусы SVM, а также практические проблемы с использованием SVM в Python.
Машина опорных векторов — это модель машинного обучения, которая может делать обобщения между двумя разными классами, если набор помеченных данных предоставляется в обучающем наборе для алгоритма.Основная функция SVM — проверить ту гиперплоскость, которая способна различать два класса.
Может быть много гиперплоскостей, которые могут выполнить эту задачу, но цель состоит в том, чтобы найти ту гиперплоскость, которая имеет наивысший запас, который означает максимальные расстояния между двумя классами, чтобы в будущем, если появится новая точка данных, которая является двумя, классифицирована, тогда она можно легко классифицировать.
Давайте разберемся в работе SVM, взяв пример, где у нас есть два класса, которые показаны на изображении ниже, которые являются классом A: Круг и классом B: Треугольник. Теперь мы хотим применить алгоритм SVM и найти лучшую гиперплоскость, разделяющую оба класса.
Класс A и B
Данные с маркировкой
SVM принимает во внимание все точки данных и выдает строку, которая называется « Hyperplane », которая разделяет оба класса.Эта строка называется « Граница решения ». Все, что попадает в класс круга, будет относиться к классу А и наоборот.
Все гиперплоскости не подходят для классификации
Может быть много гиперплоскостей, которые вы можете видеть, но лучшей гиперплоскостью, разделяющей два класса, будет гиперплоскость, находящаяся на большом расстоянии от гиперплоскости обоих классов.Это основной мотив SVM для поиска таких лучших гиперплоскостей.
Могут быть разные размеры, которые зависят исключительно от имеющихся у нас функций. Трудно визуализировать, когда функций больше 3.
Класс A — Красный и Класс B Желтый
Предположим, у нас есть два класса: красный и желтый — A и B соответственно. Нам нужно найти между ними лучшую гиперплоскость, разделяющую два класса.
Мягкий край и гиперплоскость
Мягкая маржа позволяет ошибочно классифицировать некоторые из вышеперечисленных точек данных. Кроме того, он пытается найти баланс между поиском гиперплоскости, которая пытается сделать меньше ошибок в классификации и максимизировать запас.
Линейно неотделимый набор данных
Если данные не разделимы линейно, как показано на рисунке выше, тогда SVM использует уловки ядра, чтобы сделать их линейно разделимыми.Концепция преобразования нелинейно разделяемых данных в линейно разделяемые называется теоремой Ковер. — « g . Если набор обучающих данных не является линейно разделяемым, с высокой вероятностью он может быть преобразован в линейно разделяемый обучающий набор с помощью проецируя его в многомерное пространство посредством некоторого нелинейного преобразования ». Уловки с ядром помогают проецировать точки данных в пространство более высоких измерений, благодаря чему их стало относительно легче разделять в пространстве более высоких измерений.
Уловки с ядром, также известные как обобщенное скалярное произведение. Уловки с ядром — это способ вычисления скалярного произведения двух векторов, чтобы проверить, насколько они влияют друг на друга. Согласно теореме Ковер, вероятность того, что линейно неразделимые наборы данных станут линейно разделимыми, возрастает в более высоких измерениях. Функции ядра используются для получения скалярных произведений для решения ограниченной оптимизации SVM.
Функции ядра | Кредит: Источник
При использовании классификатора svm мы можем принять ядро как «linear», «poly», «rbf», «sigmoid».Давайте посмотрим, какие ядра используются чаще всего: полиномиальные и rbf (радиальная базисная функция). Здесь вы можете найти документацию по sklearn.
Рекомендуемый блог: Введение в алгоритм XGBoost для классификации и регрессии
Штрафной член, который передается как гиперпараметр в SVM при работе как с линейно разделяемыми, так и с нелинейными решениями, обозначается как «C», что называется степенью допуска.Большое значение C приводит к большему штрафу SVM за ошибочную классификацию. Граница решения будет зависеть от узкой маржи и меньшего количества векторов поддержки.
-
Высокая стабильность благодаря зависимости от опорных векторов, а не от точек данных.
-
Не подвержен влиянию выбросов.
-
Никаких предположений относительно наборов данных не делалось.
-
Проблема численного предсказания может быть решена с помощью SVM.
Мы возьмем набор данных рака груди из библиотеки sklearn, мы будем реализовывать машину векторов поддержки и найдем точность для нашей модели. SVM обычно предпочтительнее для небольших наборов данных, поскольку они оказались более точными, чем любой другой метод регрессии.
импортировать numpy как np импортировать matplotlib.pyplot как plt из sklearn import svm из наборов данных импорта sklearn рак = наборы данных.load_breast_cancer () print ("Ярлыки:", Cance.target_names)
ШАГОВ :
из sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split (раковые данные, рак. цель, размер теста = 0.4, random_state = 99) classifier = svm.SVC (ядро = 'линейный') classifier.fit (X_train, y_train) y_pred = clf.predict (X_test) из показателей импорта sklearn print ("Точность:", metrics.accuracy_score (y_test, y_pred))
-
Разделил набор данных с помощью train_test-split из sklearn.
-
Для оценки модели импортирована precision_score
-
Инициированный объект для SVC, который является svc_model, подогнал обучающие данные к модели.Используется «linear» как ядро.
-
Сделал прогноз по y_test и рассчитал оценку точности на тестовых данных
, что составило 96%.
В этом блоге я попытался объяснить вам машину опорных векторов и то, как она работает.
337 Replies to “Сзв м уточненка есть ли штраф: в каких случаях санкции за несвоевременную сдачу можно отменить или уменьшить — Бухонлайн”
Добавить комментарий
Levitra 20mg Avis
buy stromectol online usa
Precio Viagra 100 Mg
cialis super active plus
Propecia
http://buypropeciaon.com/ — buy generic propecia united states
https://buysildenshop.com/ — viagra what is it
https://buystromectolon.com/ — Stromectol
Commander Cialis En France
Cialis
https://buyplaquenilcv.com/ — hydroxychloroquine 200 mg price
Propecia Criticas
can i buy priligy in usa
Mail Order Finasteride Mastercard
Cyproheptadine Tablets
buy azithromycin single dose
http://buyzithromaxinf.com/ — Zithromax
https://buypriligyhop.com/ — priligy dapoxetine
furosemide brand name
http://buylasixshop.com/ — Lasix
Plaquenil
Prednisone
https://prednisonebuyon.com/ — Prednisone
Neurontine
https://buyneurontine.com/ — Neurontine
Buy Atenolol With Online Dr. Prescribe
https://www.cratekings.com/dj-khaled-interview-20-hour-workdays/comment-page-1/
Cialis
Cytotec Vaginal
Stromectol
Priligy
Venta De Kamagra Sin Receta
Buy Silagra Pills
Propecia
viagra en espana sin receta
generic viagra louisville ky
Cialis Sotto La Lingua
Sito Affidabile Per L’Acquisto Kamagra
Olivier Ameisen
furosemide without prescription
cialis prices
generic viagra buy uk
prenisone drug store
levitra buy?online cheap
using cialis professional
Cialis 5 Mg Indications
cialis generic best price
Buy Non Perscription Elavil
Real Provera For Sale Discount
buy viagra online in india sildenafil 50mg brand name purchase viagra usa
buy female viagra uk online viagra 5343 best sildenafil brand
Viagra Generico Pagamento Contrassegno where to buy cialis online forum
cialis before and after photos adcirca vs cialis purchase cialis in montreal
cialis tadalafil tadalafil herbal substitute cialis 40 mg
cialis in canada ebay cialis generic cialis with dapoxetine 80mg x 10 tabs
cost of viagra 100 viagra brand price generic viagra 100mg india
best drugstore mascara manor pharmacy store locator Paxil
viagra otc sildenafil over the counter united states viagra over the counter australia
Lasix Januvia Eskalith
tadalafil from india reviews cialis canadian pharmacy when will cialis be generic
essay outline template cyber bullying essay essay example
thesis search cruel angel’s thesis meme compare and contrast thesis
thesis introduction cruel angel’s thesis mp3 introduction with thesis statement
cheapest custom writing order paper online writing paper help
assignment writing service review buying papers writing help
gre argument essay essay helper how to write argumentative essay
free compare and contrast essay examples writing essay service apply essay
essay bot essay organization essay questions
essay writer essay editor conclusion essay
essay layouts argumentative essay scholarship essay writer
college admission essay examples about yourself critical analysis essay example argumentative essay conclusion example
cialis package insert cialis experience tadalafil 100mg best price
sildenafil compare prices sildenafil online for sale where to buy viagra usa
real viagra for sale viagra capsules online in india how safe is viagra
viagra cialis or levitra cialis profesional vs. super active vs. cialis how long does it take cialis to work
proper heading for essay this i believe essay how to write a 5 paragraph essay
buy generic viagra online europe best sildenafil generic viagra usa pharmacy
cheap sildenafil citrate buy viagra uk super active viagra
ordering sildenafil online without prescription buy viagra australia paypal cheap viagra online fast shipping
sildenafil pharmacy nz cheap canadian viagra pharmacy sildenafil buy canada
viagra professional canada generic viagra sale viagra in usa online
sildenafil 100mg uk price viagra online 200mg generic sildenafil
order cialis online cialis usa viagra, cialis levitra online
buy cialis with no persciption cialis where to buy cialis online no prescription australia
but cialis buy cialis with dapoxetine does medicare cover cialis for bph
cialis 20 mg best price best price cialis gen daily tadalafil
cialis alternative over the counter cialis for fun sanofi tadalafil
cialis sales canadian where to buy tadalafil online cialis using paypal in australia
paypal viagra australia sildenafil 50 mg tablet buy online viagra pfizer price
Bir gecede 1 kilo alД±nД±r mД±?
walgreen cialis price viagra c20 cialis discount cialis
vigra vs cialis generic tadalafil 20mg how quickly does cialis work
levitra strength levitra prices in south africa price comparison levitra viagra cialis
where to buy levitra over the counter levitra vardenafil 20 mg effects levitra side
fda metformin creatinine liver cancer metformin johanniskraut und metformin
can american pharmacies fill a canadian prescription northeast pharmacy canada pharmacy home delivery
hydrochlorothiazide hyperkalemia lisinopril kidney function hydrochlorothiazide ototoxicity
Zanaflex Co-Amoxiclav online pharmacy store in kolkata
furosemide adverse effects ati what are the side effects of furosemide furosemide 12.5mg tab
canadian pharmacy cialis 20mg vipps canadian online pharmacy viagra online canada pharmacy
trazodone high reddit trazodone metabolism how long does trazodone work for sleep
tamoxifen or femara does tamoxifen stop menstruation tamoxifen bodybuilding doses
atenolol sandoz 50mg can you take norvasc and atenolol atenolol switch to metoprolol
flagyl affect period how long does flagyl stay in breastmilk does flagyl cause dark urine
furosemide side effects for dogs buy furosemide 20 mg online renal scan lasix washout
hiv prophylaxis bactrim dose of bactrim for pneumonia bactrim tendon pain
does atenolol cause diarrhea tenormin irregular heartbeat atenolol and amlodipine side effects
• lisinopril amlodipine besylate and lisinopril side effects side effects of hydrochlorothiazide 12.5 mg cp
glucophage xr during pregnancy glucophage xr vs glucophage reactive hypoglycemia glucophage
digoxin furosemide interactions is furosemide a sulfonamide furosemide 20 mg oral tablet
does trazodone get you high trazodone for children trazodone hcl 50mg tablet
cons of neurontin macht gabapentin abhängig gabapentin argentina
spiramycine metronidazole 1.5 metronidazole used for trichomoniasis metronidazole once daily
what is the generic name for lyrica lyrica for anxiety long term side effects for lyrica
valacyclovir orifarm alkohol alternatives to valtrex valtrex primary outbreak
expected weight loss on synthroid symptoms of taking too high dose of synthroid can i take chromium picolinate with synthroid
lyrica doses for fibromyalgia lyrica for back pain does lyrica get you high
atorvastatin prevention of cardiovascular disease interaction between atorvastatin and clarithromycin plavix and lipitor side effects
how much does gabapentin cost neurontin generic south africa gabapentin 30
side effect lisinopril hydrochlorothiazide 50mg lisinopril hydrochlorothiazide reviews
stop lipitor does atorvastatin cause memory loss atorvastatin calcium 10mg
bactrim ds for eye infection can bactrim ds treat acne can bactrim ds treat acne
glucophage for diabetes prevention metformin and prandin where to buy glucophage in uk
furosemide side effects cats furosemide gout furosemide lasix 20 mg
tenormin and lactation tenormin safe dose tenormin and irregular heart beat
goodrx trazodone trazodone and zoloft does trazodone lower blood pressure
how to get neurontin prescription medication neurontin neurontin 600 mg
metronidazole salmonella typhi what is the cost of metronidazole amoebiasis treatment metronidazole
low synthroid levels why increase synthroid dosage do synthroid headaches go away
who makes lyrica lyrica 75 mg price lyrica complaints
valacyclovir single dose valacyclovir and birth control pills valacyclovir kidneys
cialis not working tadalafil dosage instructions cialis daily use side effects
pharmacy online usa online pharmacy walmart com shopko online pharmacy
cheap viagra soft tabs viagra online from india viagra price without insurance
where to get viagra over the counter buy sildenafil canada where to buy female viagra australia
sildenafil 25 mg viagra generic wholesale daily viagra
tadalafil troche (lozenge) cialis tadalafil 100mg tadalafil compounding pharmacy
brand viagra 100mg price female viagra australia for sale generic viagra india 100mg
where to buy cialis cialis canada pharmacy cialis vs. viagra
save on pharmacy pharmacy online cheap health canada recall drugs
tadalafil research chemical liquid tadalafil citrate where to buy teva tadalafil
cialis overnight online overnight pharmacy cialis buy cialis no prescription overnight
cost viagra canada buy generic viagra canada online discount viagra canada
viagra otc uk how to safely order viagra online 50mg viagra
sildenafil price in india viagra super sildenafil coupon
cheap generic viagra 100mg buy viagra canada fast shipping how can i get generic viagra in canada
buy tadalafil reddit tadalafil 5mg daily price cialis soft tablets
viagra free shipping where is the best place to buy viagra online online viagra coupon
approved canadian pharmacies online canadian pharmacy association mexico online pharmacy reviews
purchase viagra female viagra pill where to buy viagra online from mexico
when does cialis go generic cialis otc usa tadalafil tab
where can i buy viagra in usa viagra free delivery viagra 10 mg tablet
vardenafil vs sildenafil vs tadalafil 5 mg tadalafil best price tadalafil
cialis 200 mg. best price on cialis when is the best time to take cialis
peptide tadalafil cialis and viagra canadian pharmacy generic cialis
cialis on line sell does cialis work for women cialis generic cvs
viagra discount online viagra 25 mg daily buy viagra online in canada
can you buy viagra in mexico buy sildenafil 25 mg sildenafil otc canada
viagra 100 mg tablets ordering viagra can i buy viagra over the counter
kamagra online pharmacy canadian pharmacies that sell viagra Abilify
envision rx pharmacy locator ca board of pharmacy buy drugs online from canada
canadian pharmacies for viagra prednisone canadian pharmacy first medicine online pharmacy store
pharmacy near me online pharmacies canadian pharmacy online shopping
canada pharmacy online viagra prescription buy viagra over the counter nz sildenafil 48 tabs
sildenafil nz cost generic viagra online purchase in usa buy female viagra australia
cheapest viagra online viagra 150 sildenafil brand name india
canadian neighbor pharmacy legit prescription drugs from canada online jan pharmacy canada
buy cialis online reddit cheap canadian cialis buy cialis tadalafil
does blue cross blue shield cover cialis cheap cialis prices cialis sublingual
viagra gel for sale order sildenafil super viagra
buying viagra nz buy cheap viagra online where to buy real viagra
viagra online fast shipping viagra 30 mg sildenafil 50mg buy
definition cialis cialis australia pictures of cialis
sildenafil generic no prescription how much is viagra over the counter viagra 20 mg online
what makes you harder viagra or cialis where can i buy cialis online tadalafil xtenda
cialis grapefruit interaction cialis without a doctor prescription buy cialis without
order pharmacy online egypt is canadian pharmacy safe wisconsin canadian pharmacies
best viagra coupon viagra 37500 sildenafil 50
cialis 5mg price comparison peptide liquid tadalafil tadalafil research chemical
sildenafil daily use buy viagra online united states cheap viagra pills canada
buy real viagra online usa viagra over the counter nz sildenafil 20 mg cost in india
non prescription medicine pharmacy sav-rx pharmacy canadian pharmacy meds coupon
order generic cialis online 20 mg 20 pills cialis tadalafil tadalafil von cipla versus lily cialis
cialis free 30 day supply buy tadalafil online no prescription cialis advertisement
prescription drugs ad the pharmacy store wisconsin canadian pharmacies
cialis professional vs cialis buy tadalafil 20mg online discount tadalafil 20mg
sildenafil 90mg generic sildenafil 100mg tablet discount generic viagra
cvs pharmacy bupropion authentic viagra online pharmacy online pharmacy kamagra jelly
cialis online/canada cialis before and after pictures tadalafil india online
brand cialis 20 mg generic cialis available in canada tadalafil vs vardenafil
buy viagra price sildenafil capsules in india buy viagra 200 mg
canada pharmacy zyprexa cvs pharmacy amoxicillin proscar canadian pharmacy
viagra 4 sale female viagra australia for sale viagra drugstore
viagra 25mg for sale over the counter viagra 2018 best viagra pills in usa
cialis how long cialis back pain cialis vs sildenafil
canadian pharmacy no prescription oxycodone paxil canadian pharmacy online pharmacy ativan no prescription
cost of 100mg sildenafil cheap viagra india online best price for viagra 100 mg
50 mg viagra cost can i buy viagra online in canada viagra tablet online
zovirax cream canada pharmacy depakote online pharmacy propecia indian pharmacy
best pharmacy prices for viagra buying viagra without prescription viagra super
purchase viagra order female viagra online viagra 50mg generic
vigara viagra without prescription canada online pharmacy viagra australia
sildenafil india pharmacy viagra without script order sildenafil 20 mg
safest online pharmacy for viagra vicodin price at pharmacy thailand pharmacy ambien
cialis one a day best time to take cialis cheap cialis with dapoxetine
cialis cheapest prices cialis viagra cocktail cialis pastilla
viagra purchase canada sildenafil soft tabs 100mg online viagra order india
tadalafil tablets uses cialis company cialis free trial 2018
canadian pharmacy generic viagra no prescription canadian pharmacy cialis cheap cialis pharmacy australia
order viagra with paypal viagra soft tabs 100mg pills discount viagra prices
viagra online singapore sildenafil buy cheap female viagra australia
sildenafil india purchase generic viagra online no prescription canada viagra no prescription
mexican pharmacy rohypnol pharmacy online levitra tramadol online pharmacy cod
canadian pharmacy viagra cialis side effects of tadalafil where can i buy cialis on line
female viagra 500mg canada viagra online viagra online without prescription free shipping
no presciption cialis thuoc tadalafil 20 mg cialis cheap generic
can hydrocodone be called in to a pharmacy walmart pharmacy simvastatin canada pharmacy cipro
sainsburys pharmacy viagra online pharmacy no prescription lexapro viagra canadian pharmacy paypal
overnight shipping of cialis ordering cialis in canada cialis sublingual
levitra india levitra side effects medications cheap generic levitra online
how much is viagra at cvs pharmacy pharmacy o reilly artane bupropion sr online pharmacy
cialis 20 mg coupon tadalafil research cialis online canada
can oxycodone be called in a pharmacy bontril online pharmacy augmentin canadian pharmacy
tramadol+europe pharmacy generic viagra xlpharmacy mesalamine canada pharmacy
hi opp ggeis 2022 ert go fi
can i buy viagra in europe generic viagra australia paypal sildenafil tablets online in india
sanofi cialis otc cialis professional 20 mg cialis going generic
cialis male enhancement cialis canada over the counter tadalafil for sale cheap
viagra cialis online cialis cost nz oryginal cialis
buy cialis online in austalia buying cialis from canada maxim peptide tadalafil review
canadian cialis no prescription buy brand cialis cialis most trusted
best viagra generic best site to buy viagra how to buy generic viagra
cialis online pharmacy us pharmacie discount prescription drugs
viagra london pharmacy rx relief pharmacy discount card oxycodone pharmacy online no prescription
propecia inhouse pharmacy inhouse pharmacy propecia australian online pharmacy
online pharmacy canada vicodin pharmacy discount card rx relief how to buy viagra at pharmacy
canadian pharmacies for cialis viagra pharmacy cost online pet pharmacy canada
canadian pharmacy cheap cialis walmart online pharmacy buy adderall canadian pharmacy
viagra sales online real viagra online canada sildenafil 100mg india
lilly cialis name brand cialis special sales on cialis
where to get female viagra nz viagra prescription canada cheap viagra online pharmacy
viagra certified online pharmacy percocet canadian pharmacy viagra cialis online pharmacy
viagra online canadian pharmacy paypal zovirax cream pharmacy canada pharmacies without script
super viagra online female viagra singapore 30 mg sildenafil chewable
cialis sample pack cialis paypal bezahlen what is tadalafil oral jelly
where can i buy cialis on line where to buy cialis from canada sildenafil vs cialis
australia viagra price where can i get over the counter viagra generic viagra lowest prices
can you buy genuine viagra online where can i buy cheap viagra online generic viagra india price
shop for cialis cialis 20mg review cialis indien bezahlung mit paypal
cialis amazon cialis online canada ripoff tadalafil and dapoxetine in india
tadalafil 20mg price in india when should you take cialis cialis in vegas
tadalafil liquid for sale cialis online without prescription cialis 800mg
who invented tadalafil cialis overnight shipping tadalafil reviews
cialis cheap online cialis black to buy in the uk buy cialis online safely
canadian pharmacy tadalafil price of cialis at walgreens tadalafil for sale online
cialis 20mg П„О№ОјО· buy brand cialis overnight tadalafil medication
purchase viagra australia viagra sales online cheap viagra 100mg canada
where to buy viagra in canada how do i get viagra online cheap canadian viagra pills
cialis picture how to get cialis indian tadalafil
augendruck tamoxifen nolvadex constipation tamoxifen handling
furosemide pharmacophore lasix blutdruck furosemide nocturia
lisinopril medicamento lisinopril enzymes lisinopril questions
ratio-atenolol 50mg atenolol.drugs.com bio-atenolol 50
metformin klГёe metformin photodermatitis metformin simethicone
remedio nolvadex nolvadex lethargy tamoxifen fibromatosis
lisinopril sexual-drive popping lisinopril verapamil lisinopril
metformin inflammation metformin rebajar metformin inositol
flagyl filmtabletten neurotoxicity metronidazole metronidazole amoebiasis
tenormin ampullen irbesartan atenolol posologia atenolol
furosemide benefits apo-furosemide mГ©dicament furosemide expired
valtrex withdrawal valtrex feedback valtrex relief
trazodone depakote trazodone pharmacy trazodone natural
furosemide rabbit lasix gewicht furosemide merck
tegretol synthroid glucophage synthroid synthroid caffeine
neurontin anorexia gabapentin drunk gabapentin sperm
valacyclovir arn aurobindo valtrex valacyclovir penicillin
trazodone chloride trazodone works trazodone nmda
furosemide fresenius barbaro lasix lasix intravenous
synthroid warfarin synthroid sales synthroid imitrex
lipitor shaking counterfeit lipitor lipitor stones
tamoxifen vergeten tamoxifen concerns nolvadex manufacturer
levothyroxine metformin metformin blutzucker metformin myokardinfarkt
lisinopril 20/12.5mg cialis lisinopril indicaciones lisinopril
trazodone helps trazodone appearance pradaxa trazodone
lipitor precios lipitor sobredosis lipitor voucher
allergic to neurontin gabapentin piracetam neurontin causing tinnitus
lipitor crampes lipitor special lipitor sizes
valtrex programs valacyclovir ld50 about valtrex
results with synthroid synthroid cancer causing synthroid official website
pregabalin coupons lyrica 300 mg capsule max lyrica dose
neurontin reviews migraine gabapentin 350mg neurontin and dayquil
flagyl kitten flagyl children flagyl ilaci
atorvastatin orifarm lipitor apotek lipitor eye
valtrex purchase valtrex rezeptpflichtig valtrex cipro
synthroid medication dosages progesterone synthroid synthroid 250 mg
essay writing service law visual analysis essay rutgers essay help
mba essay writing services rhetorical essay example another word for because in an essay
no essay scholarships 2021 comparison and contrast essay extended essay help
college essay helper college essay writing services order an essay
buy research papers online no plagiarism cat writing paper writing a research paper middle school lesson plan
critical essay custom written essay essay writing sites
evaluation essay topics buy custom essays literary essay
writing paper texture free printable primary writing paper writing a case study paper
history essay help essay writer generator how to write a literary analysis essay
essay words top rated essay writing services expository essay topics
help with writing a research paper best research paper writing service free printable kindergarten writing paper
writing paper for kids dream meaning of writing on paper large lined writing paper
real parchment paper for writing college papers help research paper writing service
free printable decorative writing paper stationery paper for writing letters best college paper writing service
buy a research paper online martin luther king writing paper fancy writing paper
dissertation pdf custom dissertation services online phd programs without dissertation
buy a paper for college professional term paper writers research paper introduction help
criminal justice dissertation topics noted in her 1925 doctoral dissertation that stars were made of hydrogen: dissertation writing fellowships
how to erase pen writing on paper college term paper writing service thesis paper help
mba dissertation dissertation writing fellowship thesis and dissertation
write my paper college paper writing formats custom note paper
summer writing paper research paper thesis help first next then last writing paper
dissertation on law help with dissertation writing writing my dissertation
online doctoral programs in education without dissertation writing your dissertation dissertation questions
custom writing papers writing a paper about yourself 4th grade writing paper
will someone write my paper for me custom paper writing help online research paper writers
dissertation acknowlegements dissertation and thesis custom dissertation writing service
great essay writers buy cheap essay help writing a essay for college
essay writing service reviews help writing an essay who will write my essay for me
buy cheap essay online can somebody write my essay top 5 essay writing services
essay help buy a essay help me do my essay
top essay writing services urgent essay help analysis essay help
essay services reviews service essays community service essay sample
national junior honor society essay help admission essay editing services custom essays service
help writing grad school essay best essay writing services best essay writing service online
essay on helping others website for essay writing essay write service
thesis cover page thesis clipart writing my thesis
plagiarism in dissertation possible dissertation topics in education writing dissertation proposal
creating a thesis statement acknowledgement for thesis d&d 3.5 arcane thesis
thesis statement about racism narrative essay thesis restated thesis
how to come up with a thesis thesis definition literature thesis purdue owl