Как выбирается порог решающего устройства что будет если его изменить

Работа по теме: Образец_КР по ТЭС. Глава: Оптимальные пороги решающего устройства при синхронном и асинхронном способах принятия решения при приеме сложных сигналов согласованным фильтром.. ВУЗ: СибГУТИ.
  1. Оптимальные пороги решающего устройства при синхронном и асинхронном способах принятия решения при приеме сложных сигналов согласованным фильтром.

Рис.41
Структурная схема синхронного приемника

Для
системы с синхронным способом приема,
при котором принятие решения происходит
в момент окончания сигнала на входе,
наиболее оптимальным пороговым
напряжением будет Uпор=0.
Значения побочных максимумов не влияют
на выносимое решение,
т.к.. в момент
времени Т на выходе будет максимум,
положительный или отрицательный в
зависимости от того, что передавался
— 0 или 1. В момент окончания сигнала на
входе согласованного фильтра решающее
устройство проверяет фазу сигнала,
полученного на выходе согласованного
фильтра и принимает решение о том, что
передавалось – S1
или S2.

Рис.42
Структурная схема aсинхронного
приемника:

При
асинхронном способе приема принятие
решения происходит в произвольный
момент времени и при этом используются
два порога — для приема »1» и »0». Решающее
устройство сравнивает сигнал на выходе
согласованного фильтра с пороговыми
напряжениями Uп1
и Uп2:
если y(t)≥Uп1
, то принимается решение в пользу S1,
если y(t)≤
Uп2,
— в пользу S2,
иначе — решение не принимается.

Влияние
помехи в линии связи на передаваемый
сигнал будет проявляться в изменении
знака (полярности) элемента дискретного
сигнала, т. е. в переходах вида 1 
1
и 1

1. При приёме с помощью согласованного
фильтра это будет приводить к изменению
формы сигнала на его выходе – уменьшению
основного и увеличению боковых выбросов,
а, следовательно, к снижению
помехоустойчивости приёма. Поэтому
целесообразно выбрать оптимальную
величину порога решающей схемы приёмника,
минимизирующую среднюю вероятность
ошибки. При равновероятной передаче
сообщений оптимальный порог должен
выбираться как среднее значение между
уровнем основного выброса и максимальным
уровнем выброса взаимной корреляционной
функции.

Рассчитаем
оптимальные значения порогов для случая
асинхронного способа приема.

Изобразим
на одном чертеже выходные сигналы
согласованного фильтра при поступлении
на его вход сигналов, соответствующих
передаваемым символам «1» и «0». Нанесем
на чертеж оптимальные значения порогов
для случая синхронного и асинхронного
способов приема.

Синхронный приемник
обладает лучшей помехоустойчивости,
чем асинхронный, так как в этом случае
решение принимается в момент окончания
сигнала на входе согласованного фильтра,
когда сигнал на его выходе максимален.

  1. Энергетический выигрыш при применении согласованного фильтра

Определим
энергетический выигрыш при приеме
сигналов с использованием согласованного
фильтра и поясним за счет чего он
достигается.

Энергетический
выигрыш определяется по формуле:

,

где
,
m
– количество элементов дискретной
последовательности,


ширина спектра сигнала

Так
как выигрыш q,
обеспечиваемый при приёме дискретных
последовательностей с применением
согласованного фильтра, равен m,
то путём увеличения длины дискретных
последовательностей, соответствующих
символам «1» и «0», можно обеспечить
увеличение отношения сигнал/шум на
входе решающей схемы приёмника и,
соответственно, повышение помехоустойчивости
передачи дискретных сообщений. Очевидно,
это будет приводить к снижению скорости
передачи сообщений, то есть реализуется
принцип обмена скорости передачи
дискретных сообщений на помехоустойчивость
их приёма путём увеличения энергии
элемента сигнала Eс
= PсT.

Т.к.
в нашем случае сложный сигнал состоит
из 11 элементарных сигналов, т.е. m
=11, то энергетический выигрыш:

  1. Вероятность
    ошибки на выходе приемника при применении
    сложных сигналов и согласованного
    фильтра

Найдем
отношение сигнал/шум для согласованного
фильтра:

h2согл=11·h2=10·(1.72)2=29.6

hсогл=
5.44

При
определении вероятности ошибки считаем,
что сигналы, соответствующие «1» и «0»,
являются взаимно противоположными и
решение о переданном символе принимается
с использованием пороговой решающей
схемы синхронным способом (т.е. отсчеты
берутся в конце каждого сигнала
длительностью mT,
где Т – длительность одного элемента
сложного сигнала). При этом считаем, что
длительность сигнала возросла в m
раз по сравнению со случаями использования
простых сигналов

Pош.дчм
кг
=·[1-Ф(hсогл)]
=·
[1-Ф(5.44)] = 2.66·10-8.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Изобретение относится к области радиоприема, а именно к обнаружению радиоимпульса известного точно на фоне собственных шумов приемного устройства. Достигаемым техническим результатом является повышение достоверности обнаружения в области малых отношений сигнал/шум за счет использования дополнительных информационных признаков содержащихся в структуре аддитивной смеси сигнала и узкополосного шума, по сравнению с прототипом. Сущность изобретения состоит в том, что производится нелинейная обработка сигнала на выходе оптимального фильтра, которая позволяет реализовать алгоритм обнаружения сигнала, обоснованный в теореме Слепяна, повышая достоверность принятия решения о наличии или отсутствии полезного сигнала при приеме сигнала малой мощности. Указанный результат в предложенном способе, включающем узкополосную оптимальную фильтрацию входного процесса, достигается тем, что после узкополосной оптимальной фильтрации осуществляют переключение фазы высокочастотной составляющей узкополосного процесса на π при каждом достижении огибающей процесса нулевого уровня и принятие решения о наличие сигнала по критерию Слепяна. Устройство, реализующее способ, содержит оптимальный линейный фильтр, причем вход оптимального линейного фильтра является входом устройства, последовательно соединенные амплитудно-фазовый преобразователь и решающий блок обнаружения по Слепяну, причем вход амплитудно-фазового преобразователя соединен с выходом оптимального линейного фильтра, а выход решающего блока является выходом устройства. 2 н.п. ф-лы, 7 ил.

Изобретение относится к области радиоприема, а именно к обнаружению радиоимпульса известного точно на фоне собственных шумов приемного устройства.

Известен способ приема полезного сигнала известного точно на фоне «белых» шумов (Котельников В.А. Теория потенциальной помехоустойчивости. — М.: Госэнергоиздат, 1956 г.[1]). Способ обнаружения сигнала известного точно по Котельникову заключается в том, что смесь сигнала и шума подается на последовательно соединенные оптимальный линейный фильтр и пороговое устройство. Оптимальный линейный фильтр, согласованный со спектром принимаемого сигнала, обеспечивает максимальное отношение сигнал/шум на входе порогового устройства. Пороговое устройство выдает решение о наличие полезного сигнала на входе приемного устройства в случае, когда амплитуда процесса на выходе оптимального линейного фильтра превышает заданное пороговое напряжение. Уровень порогового напряжения выбирается по одному из известных критериев.

Известно также устройство приема сигнала на фоне «белых» шумов [1]. Устройство состоит из оптимального линейного фильтра, согласованного с параметрами сигнала известного точно, и порогового устройства.

Теория потенциальной помехоустойчивости Котельникова [1] имеет огромное значение и является хорошо развитой и обоснованной теорией приема сигналов на фоне «белых» шумов. Поскольку высокочастотный тракт современных приемных устройств по своей сути является оптимальным или квазиоптимальным линейным фильтром, то характеристики реальных приемных устройств оказываются близкими к характеристикам, вытекающим из теории потенциальной помехоустойчивости, но никогда их не превышают.

Поэтому принято считать, что характеристики линейного оптимального приемника являются предельно достижимыми для всех без исключения классов приемных систем и дальнейшее развитие теории Котельникова невозможно.

Однако следует отметить, что в теории Котельникова приняты ограничения, связанные с применением принципа суперпозиции в описании аддитивной смеси сигнала и шума, которые распространяют действие теории только на линейные приемные системы.

Из теории Котельникова вытекают практически следующие важные выводы.

— Достоверность приема полезного сигнала известного точно на фоне «белых» шумов не зависит от формы сигнала, а зависит только от его энергии.

— Оптимальный линейный фильтр, согласованный со спектром полезного сигнала, обеспечивает на входе решающего устройства максимально возможное отношение сигнал/шум.

При обнаружение сигнала известного точно на фоне «белых» шумов решающее устройство принимает решение о наличие сигнала в случае, когда уровень сигнала на выходе оптимального линейного фильтра превышает некоторый пороговый уровень, который выбирается по одному из критериев оптимальности, в зависимости от типа и назначения приемного устройства (Чистяков Н.И., Сидоров М.В., Мельников B.C. Радиоприемные устройства. — М.: Государственное издательство литературы по вопросам связи и радио. 1959. — 895 с.[2]).

В 1956 году Д.Слепян в своей теореме математически обосновал возможность повышения потенциальной помехоустойчивости (Slepian D. Some comment on the Detection of Gaussian Signals in Gaussian Noise // JRE Transactions on Information Theory, 1958. — N 2. — p.65-68. [2]). Суть данной теоремы состоит в том, что если выполняется условие

где Sn(ω) и Sm+n(ω) — спектральные плотности шума и смеси сигнала и шума, то существует правило решения, использующее входной процесс при 0≤t≤T и обеспечивающее заданную вероятность ложной тревоги F<ε и вероятность правильного обнаружения D>1-ε, где ε>0 — любое наперед заданное число при сколь угодно малом отношении сигнал/шум (T — временной интервал, в течение которого происходит обнаружение).

Данная теорема была подвергнута критике (Вайнштейн Л.А., Зубаков В.Д. Выделение сигналов на фоне случайных помех. М.: Сов. радио, 1960, с.447. [3]) в том смысле, что указанный эффект может быть достигнут лишь для тривиального случая, когда ширина спектра сигнала больше ширины спектра шума. Для случая, когда ширина спектра шумов на входе приемного устройства больше ширины спектра сигнала, условие теоремы Слепяна (1) не выполняется.

Базируясь на теории потенциальной помехоустойчивости, было показано, что спектральная плотность шумов и спектральная плотность смеси сигнала и шума на выходе согласованного фильтра совпадают. И, следовательно, предел отношения спектральной плотности смеси сигнала и шума и просто шума тождественно равен 1. Таким образом, теорема Слепяна подтверждает тот факт, что в классе линейных систем оптимальный линейный приемник В.А.Котельникова обладает наилучшей потенциальной помехоустойчивостью. При этом критики теоремы Слепяна распространили действие указанного факта на все виды приемных устройств. Благодаря этому работы по поиску оптимальных приемников для обнаружения сигналов известных точно на фоне белых шумов не получили должного развития. Это связано с тем, что в то время не был поставлен вопрос; если какие-либо возможные преобразования сигнала и шума, при которых требования теоремы Слепяна выполнялись бы при обнаружении сигнала известного точно на фоне белого шума.

Следует отметить, что математические выкладки, изложенные в теореме Слепяна, не вызвали никаких сомнений у его оппонентов.

Поскольку согласно теории потенциальной помехоустойчивости оптимальный линейный фильтр, согласованный с параметрами полезного сигнала, обеспечивает максимальное отношение сигнал/шум, то единственным возможным решением задачи является поиск способа нелинейного преобразования, способного обеспечить выполнение условий теоремы Слепяна и реализацию алгоритма, изложенного в указанной теореме.

Наиболее близким способом, принятым в качестве прототипа, является способ приема сигнала по Котельникову, который заключается в использовании оптимального линейного фильтра, согласованного с параметрами сигнала, и порогового устройства. Оптимальный линейный фильтр имеет амплитудно-частотную характеристику, согласованную со спектром принимаемого сигнала, и обеспечивает максимально возможное отношение сигнал/шум на входе порогового устройства. Решение о наличие сигнала известного точно на входе приемного устройства принимается в случае, когда уровень сигнала на входе порогового устройства превышает наперед заданный пороговый уровень. Уровень порога выбирается по одному из критериев оптимальности [1].

Наиболее близким техническим решением, принятым в качестве прототипа, является оптимальный приемник по Котельникову, который состоит из оптимального линейного фильтра, согласованного с параметрами сигнала, и порогового устройства [1].

Основным недостатком указанного выше способа обнаружения сигнала на фоне шумов и устройства по прототипу является недостаточная достоверность приема сигнала известного точно в области малых отношений сигнал/шум, т.е. при малой энергии сигнала.

Известно, что при приеме слабых сигналов, когда уровень помех соизмерим или превышает уровень полезного сигнала на входе приемника, достоверность принимаемой информации количественно оценивается вероятностью пропуска сигнала Рп.c и вероятностью ложной тревоги Рл.т. Эти величины взаимозависимы, т.е. увеличение одной из них влечет за собой уменьшение другой и наоборот. Отношение этих величин определяется порогом срабатывания решающего устройства, который выбирается по одному из критериев оптимальности, в зависимости от типа и назначения приемного устройства (Чистяков Н.И., Сидоров М.В., Мельников B.C. Радиоприемные устройства. — М.: Государственное издательство литературы по вопросам связи и радио. 1959. — 895 с. [4]).

Решаемой технической задачей, предложенного способа и устройства обнаружения сигнала известного точно, является повышение помехоустойчивости приема при малых отношениях сигнал/шум.

Решаемая техническая задача достигается использованием новых информационных признаков, позволяющих выполнить условия теоремы Слепяна за счет нелинейной обработки аддитивной смеси сигнала и узкополосного шума на выходе оптимального линейного фильтра

Решаемая техническая задача в предложенном способе обнаружения сигнала известного точно, включающем узкополосную оптимальную фильтрацию входного процесса, достигается тем, что после узкополосной оптимальной фильтрации осуществляют переключение фазы высокочастотной составляющей узкополосного процесса на π при каждом достижении огибающей узкополосного процесса нулевого уровня и принимают решение о наличие сигнала по критерию Слепяна.

Решаемая техническая задача в предложенном устройстве обнаружения сигнала известного точно, содержащем оптимальный линейный фильтр, причем вход оптимального линейного фильтра является входом устройства, достигается тем, что введены последовательно соединенный амплитудно-фазовый преобразователь и решающий блок по Слепяну, причем вход амплитудно-фазового преобразователя соединен с выходом оптимального линейного фильтра, а выход решающего блока по Слепяну является выходом устройства.

При гетеродинном приеме сигнал после преобразователя подается на усилитель промежуточной частоты, являющийся, как правило, узкополосным. Амплитудно-частотная характеристика усилителя промежуточной частоты при приеме радиоимпульса близка к прямоугольной. Это обстоятельство будет в дальнейшем учитываться при рассмотрении спектров сигналов.

Поскольку для большинства радиоприемных систем выполняется условие

где ΔF — полоса пропускания усилителя промежуточной полосы, Fпр — промежуточная частота приемного устройства, то согласно работе (В.И.Тихонов. Статистическая радиотехника. М.: Советское радио. 1966 г. [3]) собственные шумы приемного устройства могут быть представлены в виде

где А(t) и φ(t) — медленно изменяющиеся функции по сравнению с cosω0t, представляющие огибающую и случайную фазу узкополосных флуктуаций. Представим огибающую A(t) в виде разложения в ряд Фурье:

так как А(t) — нормальный случайный процесс с нулевым средним значением, то нулевой член разложения отсутствует. С учетом этого узкополосный процесс может быть представлен как

Из формулы (5) следует, что узкополосный шум по своей структуре является сигналом биений.

Рассмотрим структуру выходного процесса при гетеродинном приеме, представляющего собой смесь полезного сигнала и собственных шумов приемника. Для определенности будем считать, что полезный сигнал представляет собой гармонический сигнал с постоянной амплитудой Uc и угловой частотой, равной ω0.

Указанный выходной процесс, с учетом выражения (4), можно представить в следующем виде

Из выражения (6) следует, что структура аддитивной смеси сигнала и шума зависит от уровня гармонического сигнала. При больших значениях амплитуды гармонического сигнала С/Ш>3 структура смеси сигнала и шума подобна структуре амплитудно-модулированного сигнала, а при малых уровнях гармонического сигнала 0<С/Ш<3, структура смеси близка к структуре амплитудно-модулированного колебания с частично подавленной несущей.

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

Отличия в структурах процессов приводят к изменению спектра огибающей при прохождении последнего через нелинейные цепи.

Для решения вопроса о возможности использования найденных структурных отличий для повышения помехоустойчивости приемных устройств нами были рассмотрены различия между сигналом со структурой сигнала биений (Фиг.1) и амплитудно-модулированным сигналом со 100% модуляцией при одной и той же огибающей (Фиг.2).

На Фиг.1 и Фиг.2 представлены временные диаграммы сигналов со структурой биений (Фиг.1) и структурой амплитудно-модулированного сигнала (Фиг.2) с одной и той же огибающей.

На Фиг.3 изображена структурная схема устройства обнаружения сигнала известного точно.

На Фиг.4 изображен спектр узкополосных шумов на выходе линейного фильтра с П-образной амплитудно-частотной характеристикой.

На Фиг.5 изображен спектр узкополосных шумов на выходе амплитудно-фазового преобразователя.

На Фиг.6 изображен спектр смеси узкополосных шумов и сигнала известного точно на выходе амплитудно-фазового преобразователя.

На Фиг.7 изображена структурная схема амплитудно-фазового преобразователя.

Как видно из (Фиг.1), сигнал биений отличается от сигнала со структурой AM-колебания (Фиг.2) только тем, что в сигнале биений при достижении огибающей нулевого уровня фаза высокочастотной составляющей изменяется на π.

Если в сигнале биений изменять фазу высокочастотной составляющей на π при достижении огибающей нулевого уровня, то преобразованный сигнал будет иметь структуру AM-колебания с несущей. При одной и той же огибающей спектр AM-колебания в два раза шире спектра сигнала биений, так как имеет две симметричные боковые полосы.

Следовательно, отличие в структуре сигналов приводят к отличиям по ширине спектра огибающей на выходе нелинейного преобразователя.

Различия в спектральных плотностях могут быть использованы для создания помехоустойчивого приемного устройства, реализующего алгоритм обработки Слепяна [2].

Способ повышения помехоустойчивости оптимального линейного приемника может быть реализован с помощью устройства, структурная схема которого приведена на Фиг.3. Устройство состоит из последовательно соединенных оптимального линейного фильтра 1, амплитудно-фазового преобразователя 2 и решающего блока 3 по Слепяну. Вход оптимального линейного фильтра 1 является входом устройства. Выход решающего блока по Слепяну 3 является выходом устройства. Амплитудно-фазовый преобразователь содержит парафазный каскад 4, устройство управления 5 и электронные ключи 6, 7, при этом вход парафазного каскада 4 соединен со входом устройства управления 5 и являются входом амплитудно-фазового преобразователя, выходы парафазного каскада 4 соединны со входами электронных ключей 6, 7 соответственно. Выходы устройства управления соединены со входами управления электронных ключей 6, 7 соответственно, а выходы электронных ключей соединены между собой и являются выходом амплитудно-фазового преобразователя. Перечисленные выше блоки подключены к источнику электропитания.

Рассмотрим осуществление способа обнаружения сигнала известного точно который заключается в том, что осуществляют узкополосную оптимальную фильтрацию входного процесса, осуществляют переключение фазы высокочастотной составляющей на π при каждом достижении огибающей узкополосного процесса на выходе оптимального линейного фильтра и принимают решение о наличие сигнала по критерию Слепяна.

Рассмотрим работу устройства обнаружения сигнала известного точно.

В случае отсутствия на входе приемного устройства полезного сигнала на выходе оптимального линейного фильтра 1 присутствуют только узкополосные шумы, которые, как было показано выше, имеют структуру сигнала биений. На Фиг.4 показан спектр узкополосных шумов на выходе узкополосного фильтра с П-образной амплитудно-частотной характеристики. Амплитудно-фазовый преобразователь 2 при каждом достижении огибающей узкополосного шума нулевого уровня переключает фазу высокочастотной составляющей на π, тем самым изменяя структуру узкополосного шума.

При этом форма спектра на выходе амплитудно-фазового преобразователя 2 будет иметь треугольную форму с шириной спектра, в два раза превышающей полосу пропускания оптимального линейного фильтра.

На Фиг.5. приведен спектр преобразованных узкополосных шумов на выходе амплитудно-фазового преобразователя.

При наличие на входе приемного устройства полезного сигнала со структурой AM-колебания, на выходе оптимального линейного фильтра 1 будет присутствовать аддитивная смесь полезного сигнала и узкополосного шума. В этом случае структура смеси полезного сигнала и узкополосного шума имеет структуру AM-колебания с частично подавленной несущей (При 0<С/Ш/<3) или AM-сигнала с несущей (При С/Ш>3). При этом огибающая смеси не доходит до нулевого уровня и переключения фазы на π не происходит. Таким образом, узкополосный процесс с выхода оптимального линейного фильтра 1 проходит через амплитудно-фазовый преобразователь 2 без изменения спектра и энергии полезного сигнала Фиг.6.

На Фиг.6 приведен спектр смеси сигнала и шума на выходе амплитудно-фазового преобразователя.

Из сравнения спектров, приведенных на Фиг.5 и Фиг.6, видно, что отношение спектральных плотностей узкополосного шума и смеси сигнала и узкополосного шума на выходе амплитудно-фазового преобразователя 2 не равно единице. Таким образом, выполняется условие (1) теоремы Слепяна и существует возможность использования критерия обнаружения, предложенного в теореме.

Поскольку согласно доказанной теореме обнаружение сигнала возможно при сколь угодно малом отношение сигнал/шум, то можно сделать вывод о том, что предлагаемый приемник будет обладать более высокой помехоустойчивостью, чем линейный оптимальный приемник.

В качестве оптимального линейного фильтра 1 может быть использован высокочастотный тракт приемного устройства, согласованный с параметрами принимаемого сигнала.

На Фиг.7 приведена структурная схема амплитудно-фазового преобразователя, который содержит парафазный каскад 4, устройство управления 5 и электронные ключи 6, 7. Алгоритм работы решающего блока по Слепяну приведены в приложении к заявке.

В случае когда на вход амплитудно-фазового преобразователя 2 подаются только узкополосные шумы, то на выходах парафазного каскада 4 формируются два противофазных узкополосных процесса. Процесс на первом выходе парафазного каскада 4 находится в противофазе по отношению к входному напряжению, а процесс на втором выходе парафазного каскада 4 синфазен входному процессу. Когда огибающая входного узкополосного процесса достигает нулевого уровня, устройство управления 5 изменяет состояние электронных ключей 6, 7. Особенность управления работой электронных ключей 6, 7 заключается в том, что в любой момент времени включенным оказывается только один из электронных ключей 6 или 7. Второй ключ в это время находится в выключенном состоянии. Таким образом, при каждом достижении огибающей узкополосного процесса нулевого уровня происходит изменение фазы высокочастотной составляющей на π. При этом, как было показано выше, изменяется структура узкополосного процесса, который из узкополосного процесса со структурой сигнала биений преобразуется в узкополосный процесс со структурой AM-колебания. При этом спектр преобразованного процесса на выходе амплитудно-фазового преобразователя оказывается шире спектра на его входе.

Если на вход амплитудно-фазового преобразователя подается смесь полезного сигнала и шума, то структура входного процесса будет соответствовать структуре амплитудно-модулированного сигнала с несущей, с коэффициентом модуляции менее 100%. При этом огибающая узкополосного процесса не достигает нулевого уровня и переключения фазы не происходит. В этом случае амплитудно-фазовый преобразователь работает как линейный элемент и изменение ширины спектра не происходит.

Поскольку на выходе амплитудно-фазового преобразователя выполняется условие теоремы Слепяна (1), то существует возможность использования алгоритма обнаружения полезного сигнала по Слепяну. Таким образом, применяемый способ позволяет значительно улучшить обнаружительные характеристики приемного устройства, уменьшить вероятность ложной тревоги при минимальных расходах и незначительной модификации радиоприемного устройства.

1. Способ обнаружения сигнала известного точно, включающий узкополосную оптимальную фильтрацию входного сигнала, представляющего собой узкополосный шум и смесь полезного сигнала и узкополосного шума, с получением на выходе оптимального линейного фильтра аддитивной смеси полезного сигнала и узкополосного шума, являющегося по своей структуре сигналом биений, отличающийся тем, что после узкополосной оптимальной фильтрации осуществляют преобразование структуры узкополосного шума из структуры биений в структуру амплитудно-модулированного сигнала с несущей, путем изменения фазы высокочастотной составляющей сигнала на π (где π=180°), при каждом достижении огибающей узкополосного шума нулевого значения, с обеспечением получения отличий по спектральной плотности узкополосного шума и смеси полезного сигнала и узкополосного шума, соответствующих критерию Слепяна, и при наличии таких отличий принимают решение об обнаружении полезного сигнала.

2. Устройство обнаружения сигнала известного точно, содержащее оптимальный линейный фильтр, обеспечивающий получение на своем выходе аддитвной смеси полезного сигнала и узкополосного шума, причем вход оптимального линейного фильтра является входом устройства, отличающееся тем, что введены последовательно соединенные амплитудно-фазовый преобразователь и решающий блок по Слепяну, причем вход амплитудно-фазового преобразователя соединен с выходом оптимального линейного фильтра, а выход решающего блока по Слепяну является выходом устройства, при этом амплитудно-фазовый преобразователь предназначен для переключения фазы высокочастотной составляющей сигнала на π (где π=180°) при каждом достижении огибающей сигнала с выхода оптимального линейного фильтра нулевого уровня, а решающий блок по Слепяну, предназначен для принятия решения об обнаружении сигнала по наличию отличий в спектральной плотности узкополосного шума и смеси полезного сигнала и узкополосного шума.

Макеты страниц

Выше были рассмотрены некоторые способы реализации основной часги оптимального устройства для оценки параметра сигнала — оптимального приемника, вырабатывающего логарифм отношения правдоподобия оцениваемого параметра При этом всюду предполагалось, что после оптимального приемника включено решающее устройство, которое точно фиксирует положение абсолютного максимума выходного сигнала оптимального приемника. Однако практическая реализация таких решающих устройств очень часто наталкивается на ряд принципиальных трудностей. В этих случаях используются решающие устройства, построенные не на принципе фиксации положения абсолютного максимума, а на некоторых других принципах. Одним из них является принцип порогового устройства

Рис. 7.4.1 Значения оценок параметра сигнала при принятии решения по моментам пересечения выходным сигналом заданного уровня

Согласно принципу порогового устройства в качестве оценки неизвестного параметра принимается либо значение при котором выходной сигнал оптимального приемника впервые превышает заданный уровень (рис. 7.4 1), либо среднее значение заключенное между двумя точками пересечения заданного уровня На рис. 7.4.1 также показана оценка максимального правдоподобия т. е. оценка, получаемая при использовании оптимального решающего устройства Ясно, что в общем случае все три оценки и I различны и обладают различными статистическими характеристиками. Уровень можно выбирать, например, исходя из заданной вероятности ложной тревоги при совмеаном обнаружении и оценке либо из заданной величины отклонения дисперсии получаемой оценки от дисперсии оптимальной опенки. Кроме юго, очевидно, уровень следует выбирать настолько большим, чтобы на априорном интервале определения параметра I с достаточно высокой вероятностью имело место одно превышение. В противном случае возникает неоднозначность в определении оценки.

Положим вначале, что в качестве оценки используется величина Ограничиваясь рассмотрением оценки неэнергетического параметра детерминированного сигнала, получаем, что оценка является наименьшим корнем уравнения

где выходной сигнал оптимального приемника Используя нормированные сигнальную и помеховую функции и перепишем уравнение для оценки в виде

Здесь нормированный порог, который полагаем постоянным при всех

Если то оценкой является наименьший корень уравнения

При оценке неэнергетического параметра Поэтому, обозначая ширину функции по уровню то через т. е.

получаем

В условиях надежной оценки и в первом приближении решение уравнения (7.4.1) можно искать в виде

Разложим левую часть уравнения (7.4.1) в ряд Тейлора по в окрестности точки и подставим в это разложение из (7.4.4). Приравнивая нулю коэффициенты при одинаковых степенях в, находим

Отсюда, так как получаем смещение и дисперсию оценки

Поскольку смещение оценки «не зависит от истинного значения оцениваемого параметра, нетрудно получить несмещенную оценку, если в качестве оценки взять величину

При этом дисперсия оценки определяется формулой

Найдем характеристики оценки когда решение о значении оцениваемого параметра принимается по двум пересечениям порогового уровня. Оценка в этом случае равна

Величина в первом приближении находится из (7.4.4) и (7.4.6). По определению величина представляет собой наибольший корень уравнения

При где — наибольший корень уравнения

Так как оцениваемый параметр неэнергетический, то При условии полагая аналогично выводу выражения (7.4.5), находим

Следовательно, оценка, определяемая по середине интервала, заключенного между точками пересечения уровня фронтом и спадом выброса выходного сигнала оптимального приемника, равна

Используя последнее выражение, получаем, что рассматриваемая оценка несмещенная и обладает дисперсией

Интересно отметить, что в рассматриваемом приближении статистические характеристики оценки 1 (7.4.9) совпадают с характеристиками байесовской оценки при использовании прямоугольной функции потерь (6 4.8), если положить «зону нечувствительности» прямоугольной функции потерь (1.4.4) равной Таким образом, ширину сигнальной функции по уровню можно интерпретировать как характеристику разрешающей способности порогового решающего устройства. Кроме того, отмеченное совпадение показывает один из способов реализации байесовской системы оценки при прямоугольной функции потерь. При этом способе для получения байесовской оценки при прямоугольной функции потерь можно использовать пороговое решающее устройство, величина порога в котором выбирается равной

Из выражения (7.4.14) получаем, что если нормированный порог то т. е. дисперсия оценки в пороговом решающем устройстве совпадает с дисперсией эффективной оценки (3 1.46) при

Пусть с помощью решающего порогового устройства оценивается неэнсргетический параметр узкополосного радиосигнала со случайной начальной фазой В условиях надежной оценки нормированное значение логарифма функционала отношения правдоподобия определяется выражением (4 2.11). Соответственно полагая, что на пороговое устройство подается выходной сигнал оптимального приемника а величина порога есть уравнение для оценки V можно записать как

где нормированный порог. Подставляя в (7 4 5) вместо функцию из (4.2 9), а вместо функцию из (4.2.12), находим формулы для вычисления смещения и днепероии оценки, определяемой по моменту первого пересечения порогового уровня

где — ширина функции по уровню т. е. решение уравнения Соответственно получаем, что оценка параметра середине интервала между пересечениями несмещенная, а дисперсия ее определяется формулой (6.4.10), где следует положить

1

Оглавление

  • ПРЕДИСЛОВИЕ
  • Глава 1. СВЕДЕНИЯ ИЗ ТЕОРИИ СТАТИСТИЧЕСКИХ ОЦЕНОК ПАРАМЕТРОВ СИГНАЛА ПРИ НАЛИЧИИ ПОМЕХ
  • 1.1. ПОСТАНОВКА ЗАДАЧИ ОЦЕНКИ ПАРАМЕТРОВ И ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ
  • 1.2. ТОЧЕЧНЫЕ ОЦЕНКИ ПАРАМЕТРОВ СИГНАЛА И ИХ СВОЙСТВА
  • 1.3. ЭФФЕКТИВНЫЕ ОЦЕНКИ
  • 1.4. ОСНОВНЫЕ ПОЛОЖЕНИЯ ТЕОРИИ СТАТИСТИЧЕСКИХ ОЦЕНОК
  • 1.5. БАЙЕСОВСКИЕ ОЦЕНКИ ДЛЯ РАЗЛИЧНЫХ ФУНКЦИИ ПОТЕРЬ
  • 1.6. АНОМАЛЬНЫЕ ОШИБКИ
  • 1.7. ПОСЛЕДОВАТЕЛЬНЫЕ ОЦЕНКИ
  • 1.8. ОПТИМАЛЬНОЕ ИСПОЛЬЗОВАНИЕ НЕСКОЛЬКИХ ОЦЕНОК ОДНОГО И ТОГО ЖЕ ПАРАМЕТРА
  • Глава 2. ОСНОВНЫЕ СВОЙСТВА ВЫХОДНОГО СИГНАЛА ОПТИМАЛЬНОГО ПРИЕМНИКА
  • 2.2. ФУНКЦИОНАЛ ОТНОШЕНИЯ ПРАВДОПОДОБИЯ ИЗВЕСТНОГО СИГНАЛА
  • 2.3. СТРУКТУРА ОПТИМАЛЬНОГО ПРИЕМНИКА ИЗВЕСТНОГО СИГНАЛА
  • 2.4. СВОЙСТВА ВЫХОДНОГО СИГНАЛА ОПТИМАЛЬНОГО ПРИЕМНИКА ИЗВЕСТНОГО СИГНАЛА
  • 2.5. ОПТИМАЛЬНЫЙ ПРИЕМНИК УЗКОПОЛООНОГО РАДИОСИГНАЛА СО СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 2.6. ФУНКЦИОНАЛ ОТНОШЕНИЯ ПРАВДОПОДОБИЯ (НОРМАЛЬНО ФЛУКТУИРУЮЩЕГО СИГНАЛА
  • 2.7. ОПТИМАЛЬНЫЙ ПРИЕМНИК ПОСЛЕДОВАТЕЛЬНОСТИ ИМПУЛЬСОВ
  • Глава 3. ОЦЕНКИ МАКСИМАЛЬНОГО ПРАВДОПОДОБИЯ ПАРАМЕТРОВ ИЗВЕСТНОГО СИГНАЛА
  • 3.2. ОЦЕНКА ПАРАМЕТРА ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ СИГНАЛОВ
  • 3.3. ХАРАКТЕРИСТИКИ СОВМЕСТНЫХ ОЦЕНОК НЕСКОЛЬКИХ ПАРАМЕТРОВ
  • 3.4. ОЦЕНКА АМПЛИТУДЫ СИГНАЛА
  • 3.5. ОЦЕНКИ НАЧАЛЬНОЙ ФАЗЫ, ЧАСТОТЫ, ВРЕМЕННОГО ПОЛОЖЕНИЯ И ДЛИТЕЛЬНОСТИ СИГНАЛА
  • Глава 4. ОЦЕНКИ МАКСИМАЛЬНОГО ПРАВДОПОДОБИЯ ПАРАМЕТРОВ ФЛУКТУИРУЮЩЕГО СИГНАЛА И СИГНАЛОВ СО СЛУЧАЙНЫМИ НАЧАЛЬНЫМИ ФАЗАМИ И АМПЛИТУДАМИ
  • 4.1. ОЦЕНКА ПАРАМЕТРА ФЛУКТУИРУЮЩЕГО СИГНАЛА
  • 4.2. СМЕЩЕНИЕ И ДИСПЕРСИЯ ОЦЕНКИ НЕЗНЕРГЕТИЧЕСКОГО ПАРАМЕТРА РАДИОСИГНАЛА СО СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 4.3. СМЕЩЕНИЕ И ДИСПЕРСИЯ ОЦЕНКИ ЭНЕРГЕТИЧЕСКОГО ПАРАМЕТРА РАДИОСИГНАЛА СО СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 4.4. СМЕЩЕНИЕ И ДИСПЕРСИЯ ОЦЕНКИ НЕЭНЕРГЕТИЧЕСКОГО ПАРАМЕТРА РАДИОСИГНАЛА С НЕРАВНОМЕРНО РАСПРЕДЕЛЕНННОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 4.5. ОЦЕНКА ПАРАМЕТРА ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ РАДИОИМПУЛЬСОВ
  • 4.6. ОЦЕНКА НЕЭНЕРГЕТИЧЕСКОГО ПАРАМЕТРА
  • 4.7. СОВМЕСТНАЯ ОЦЕНКА НЕСКОЛЬКИХ ПАРАМЕТРОВ РАДИОСИГНАЛА
  • 4.8. НЕКОТОРЫЕ ОБОБЩЕНИЯ
  • 4.9. СТАТИСТИЧЕСКИЕ ХАРАКТЕРИСТИКИ РАЗДЕЛЬНЫХ И СОВМЕСТНЫХ ОЦЕНОК ПАРАМЕТРОВ СИГНАЛОВ
  • Глава 5. ТОЧНОСТЬ ОЦЕНОК МАКСИМАЛЬНОГО ПРАВДОПОДОБИЯ С УЧЕТОМ АНОМАЛЬНЫХ ОШИБОК
  • 5.2. ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ НАДЕЖНОСТИ ОЦЕНКИ КРИТЕРИЙ ВУДВОРДА
  • 5.3. ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ НАДЕЖНОСТИ ОЦЕНКИ. ДИСКРЕТНОЕ ПРЕДСТАВЛЕНИЕ
  • 5.4. ПРИБЛИЖЕННОЕ ВЫЧИСЛЕНИЕ НАДЕЖНОСТИ ОЦЕНКИ НА ОСНОВЕ АНАЛИЗА НАИБОЛЬШИХ ЗНАЧЕНИИ ВЫХОДНОГО СИГНАЛА
  • 5.5. СМЕЩЕНИЕ И ДИСПЕРСИЯ ОЦЕНКИ МАКСИМАЛЬНОГО ПРАВДОПОДОБИЯ С УЧЕТОМ АНОМАЛЬНЫХ ОШИБОК
  • Глава 6. БАЙЕСОВСКИЕ ОЦЕНКИ ПАРАМЕТРА СИГНАЛА
  • 6.2. СВОЙСТВА БАЙЕСОВСКИХ ОЦЕНОК ПРИ БОЛЬШИХ ОТНОШЕНИЯХ СИГНАЛ/ПОМЕХА
  • 6.3. НЕКОТОРЫЕ ХАРАКТЕРИСТИКИ БАЙЕСОВСКИХ ОЦЕНОК
  • 6.4. ОЦЕНКА ПАРАМЕТРА ПРИ ПРЯМОУГОЛЬНОЙ ФУНКЦИИ ПОТЕРЬ
  • 6.5. ОЦЕНКА ПАРАМЕТРА ПРИ КВАДРАТИЧНОЙ ФУНКЦИИ ПОТЕРЬ
  • 6.6. ХАРАКТЕРИСТИКИ БАЙЕСОВСКИХ ОЦЕНОК АМПЛИТУДЫ, ВРЕМЕННОГО ПОЛОЖЕНИЯ, ЧАСТОТЫ И ДЛИТЕЛЬНОСТИ СИГНАЛА
  • ГЛАВА 7. СПОСОБЫ ПОСТРОЕНИЯ ПРИЕМНОГО И РЕШАЮЩЕГО УСТРОЙСТВ ДЛЯ ОЦЕНКИ ПАРАМЕТРА СИГНАЛА
  • 7.1. ОЦЕНКА ПАРАМЕТРА СИГНАЛА С ПОМОЩЬЮ МНОГОКАНАЛЬНОГО ПРИЕМНИКА
  • 7.2. ОЦЕНКА ПАРАМЕТРА СИГНАЛА В МНОГОКАНАЛЬНОМ ПРИЕМНИКЕ С ВЕСОВОЙ ОБРАБОТКОЙ
  • 7.3. ОЦЕНКА ПАРАМЕТРА СИГНАЛА НА ФОНЕ БЕЛОГО ШУМА ПРИ ИСПОЛЬЗОВАНИИ ПРИЕМНИКА С РАЗВЕРТКОЙ
  • 7.4. ОЦЕНКА ПАРАМЕТРА СИГНАЛА ПРИ НЕОПТИМАЛЬНОМ ПОСТРОЕНИИ РЕШАЮЩЕГО УСТРОЙСТВА
  • 7.5. ХАРАКТЕРИСТИКИ ОЦЕНОК ДЛИТЕЛЬНОСТИ И ЧАСТОТЫ
  • Глава 8. ОЦЕНКА ПАРАМЕТРА ПРИ НЕПОЛНОЙ АПРИОРНОЙ ИНФОРМАЦИИ О СИГНАЛЕ
  • 8.1. ОЦЕНКА ПАРАМЕТРА СИГНАЛА С НЬИЗВЕСШЫМИ АМПЛИТУДОЙ И НАЧАЛЬНОЙ ФАЗОЙ
  • 8.2. ОЦЕНКА ПАРАМЕТРА ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ РАДИОИМПУЛЬСОВ С НЕИЗВЕСТНЫМИ АМПЛИТУДАМИ И НАЧАЛЬНЫМИ ФАЗАМИ
  • 8.3. СОВМЕСТНАЯ ОЦЕНКА НЕСКОЛЬКИХ ПАРАМЕТРОВ СИГНАЛА С ЛЕИЗВЕСТНЫМИ АМПЛИТУДОЙ И НАЧАЛЬНОЙ ФАЗОЙ
  • 8.4. ОЦЕНКА ПАРАМЕТРОВ РАДИОСИГНАЛА С НЕИЗВЕСТНОЙ ОГИБАЮЩЕЙ
  • 8.5. ХАРАКТЕРИСТИКИ ОЦЕНОК АМПЛИТУДЫ ДЛИТЕЛЬНОСТИ, НАЧАЛЬНОЙ ФАЗЫ И ВРЕМЕННОГО ПОЛОЖЕНИЯ
  • Глава 9. ОЦЕНКА ПАРАМЕТРА СИГНАЛА ПРИ НЕПОЛНОЙ АПРИОРНОЙ ИНФОРМАЦИИ О ПОМЕХЕ
  • 9.1. ОПТИМАЛЬНАЯ ОЦЕНКА ПАРАМЕТРА СИГНАЛА ПРИ ПРИЕМЕ НА ФОНЕ ПОМЕХИ С НЕИЗВЕСТНОЙ ФУНКЦИЕЙ КОРРЕЛЯЦИИ
  • 9.2. КВАЗИОПТИМАЛЬНАЯ ОЦЕНКА ПАРАМЕТРА СИГНАЛА ПРИ ПРИЕМЕ НА ФОНЕ ПОМЕХИ С НЕИЗВЕСТНОЙ ФУНКЦИЕЙ КОРРЕЛЯЦИИ
  • 9.3. КВАЗИОПТИМАЛЬНАЯ ОЦЕНКА НЕЗНЕРГЕТИЧЕСКОГО ПАРАМЕТРА РАДИОСИГНАЛА НА ФОНЕ ПОМЕХИ С НЕИЗВЕСТНОЙ ФУНКЦИЕЙ КОРРЕЛЯЦИИ
  • 9.4. ОЦЕНКА ПАРАМЕТРА ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ ИМПУЛЬСОВ НА ФОНЕ ПОМЕХИ С ИЗМЕНЯЮЩЕЙСЯ МОЩНОСТЬЮ
  • 9.5. ОЦЕНКА ВРЕМЕННОГО ПОЛОЖЕНИЯ ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ ИМПУЛЬСОВ НА ФОНЕ ПОМЕХИ С ИЗМЕНЯЮЩЕЙСЯ МОЩНОСТЬЮ
  • Глава 10. ОЦЕНКА ПАРАМЕТРА СИГНАЛА ПРИ НЕОПТИМАЛЬНОМ ПОСТРОЕНИИ ПРИЕМНОГО УСТРОЙСТВА
  • 10.2. ОЦЕНКА ПАРАМЕТРА ИЗВЕСТНОГО СИГНАЛА
  • 10.3. ОЦЕНКА ПАРАМЕТРА РАДИОСИГНАЛА СО СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 10.4. СОВМЕСТНАЯ ОЦЕНКА НЕСКОЛЬКИХ ПАРАМЕТРОВ
  • 10.6. ОЦЕНКА ФЛУКТУИРУЮЩЕГО ПАРАМЕТРА СИГНАЛА ПРИ ПРИЕМЕ ПОСЛЕДОВАТЕЛЬНОСТИ РАДИОИМПУЛЬСОВ
  • 10.7. ХАРАКТЕРИСТИКИ ОЦЕНОК ДЛИТЕЛЬНОСТИ, ЧАСТОТЫ, ВРЕМЕННОГО ПОЛОЖЕНИЯ И НАЧАЛЬНОЙ ФАЗЫ
  • Глава 11. ОЦЕНКА ПАРАМЕТРА СИГНАЛА С ПОМОЩЬЮ ДИСКРИМИНАТОРОВ
  • 11.2. ОЦЕНКА ПАРАМЕТРА ИЗВЕСТНОГО СИГНАЛА
  • 11.3. ОЦЕНКА ПАРАМЕТРА РАДИОСИГНАЛА СО СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 11.4. ОЦЕНКА ПАРАМЕТРА РАДИОСИГНАЛА С НЕИЗВЕСТНОЙ АМПЛИТУДОЙ И СЛУЧАЙНОЙ НАЧАЛЬНОЙ ФАЗОЙ
  • 11.5. ОЦЕНКА ПАРАМЕТРА СИГНАЛА С ПОМОЩЬЮ НЕОПТИМАЛЬНОГО ДИСКРИМИНАТОРА
  • 11.6. ДИСКРИМИНАТОР, ИСПОЛЬЗУЮЩИЙ КОНЕЧНЫЕ РАЗНОСТИ
  • 11.7. ХАРАКТЕРИСТИКИ ОЦЕНОК НЕКОТОРЫХ ПАРАМЕТРОВ СИГНАЛА С ПОМОЩЬЮ ДИСКРИМИНАТОРА

Привет всем, кто проходит курс машинного обучения на Хабре!

В первых двух частях (1, 2) мы попрактиковались в первичном анализе данных с Pandas и в построении картинок, позволяющих делать выводы по данным. Сегодня наконец перейдем к машинному обучению. Поговорим о задачах машинного обучения и рассмотрим 2 простых подхода – деревья решений и метод ближайших соседей. Также обсудим, как с помощью кросс-валидации выбирать модель для конкретных данных.

UPD 01.2022: С февраля 2022 г. ML-курс ODS на русском возрождается под руководством Петра Ермакова couatl. Для русскоязычной аудитории это предпочтительный вариант (c этими статьями на Хабре – в подкрепление), англоговорящим рекомендуется mlcourse.ai в режиме самостоятельного прохождения.

План этой статьи:

  1. Введение
  2. Дерево решений
    • Как строится дерево решений
    • Как дерево решений работает с количественными признаками
    • Основные параметры дерева
    • Класс DecisionTreeClassifier в Scikit-learn
    • Дерево решений в задаче регрессии
  3. Метод ближайших соседей
    • Метод ближайших соседей в реальных задачах
    • Класс KNeighborsClassifier в Scikit-learn
  4. Выбор параметров модели и кросс-валидация
  5. Примеры применения
    • Деревья решений и метод ближайших соседей в задаче прогнозирования оттока клиентов телеком-оператора
    • Сложный случай для деревьев решений
    • Деревья решений и метод ближайших соседей в задаче распознавания рукописных цифр MNIST
    • Сложный случай для метода ближайших соседей
  6. Плюсы и минусы деревьев решений и метода ближайших соседей
  7. Домашнее задание №3
  8. Полезные ресурсы

Введение

Наверное, хочется сразу рвануть в бой, но сначала поговорим про то, какую именно задачу будем решать и каково ее место в области машинного обучения.
Классическое, общее (и не больно-то строгое) определение машинного обучения звучит так (T. Mitchell «Machine learning», 1997):

говорят, что компьютерная программа обучается при решении какой-то задачи из класса T, если ее производительность, согласно метрике P, улучшается при накоплении опыта E.

Далее в разных сценариях под T, P, и E подразумеваются совершенно разные вещи. Среди самых популярных задач T в машинном обучении:

  • классификация – отнесение объекта к одной из категорий на основании его признаков
  • регрессия – прогнозирование количественного признака объекта на основании прочих его признаков
  • кластеризация – разбиение множества объектов на группы на основании признаков этих объектов так, чтобы внутри групп объекты были похожи между собой, а вне одной группы – менее похожи
  • детекция аномалий – поиск объектов, «сильно непохожих» на все остальные в выборке либо на какую-то группу объектов
  • и много других, более специфичных. Хороший обзор дан в главе «Machine Learning basics» книги «Deep Learning» (Ian Goodfellow, Yoshua Bengio, Aaron Courville, 2016)

Под опытом E понимаются данные (без них никуда), и в зависимости от этого алгоритмы машинного обучения могут быть поделены на те, что обучаются с учителем и без учителя (supervised & unsupervised learning). В задачах обучения без учителя имеется выборка, состоящая из объектов, описываемых набором признаков. В задачах обучения с учителем вдобавок к этому для каждого объекта некоторой выборки, называемой обучающей, известен целевой признак – по сути это то, что хотелось бы прогнозировать для прочих объектов, не из обучающей выборки.

Пример

Задачи классификации и регрессии – это задачи обучения с учителем. В качестве примера будем представлять задачу кредитного скоринга: на основе накопленных кредитной организацией данных о своих клиентах хочется прогнозировать невозврат кредита. Здесь для алгоритма опыт E – это имеющаяся обучающая выборка: набор объектов (людей), каждый из которых характеризуется набором признаков (таких как возраст, зарплата, тип кредита, невозвраты в прошлом и т.д.), а также целевым признаком. Если этот целевой признак – просто факт невозврата кредита (1 или 0, т.е. банк знает о своих клиентах, кто вернул кредит, а кто – нет), то это задача (бинарной) классификации. Если известно, на сколько по времени клиент затянул с возвратом кредита и хочется то же самое прогнозировать для новых клиентов, то это будет задачей регрессии.

Наконец, третья абстракция в определении машинного обучения – это метрика оценки производительности алгоритма P. Такие метрики различаются для разных задач и алгоритмов, и про них мы будим говорить по мере изучения алгоритмов. Пока скажем, что самая простая метрика качества алгоритма, решающего задачу классификации – это доля правильных ответов (accuracy, не называйте ее точностью, этот перевод зарезервирован под другую метрику, precision) – то есть попросту доля верных прогнозов алгоритма на тестовой выборке.

Далее будем говорить о двух задачах обучения с учителем: о классификации и регресcии.

Дерево решений

Начнем обзор методов классификации и регрессии с одного из самых популярных – с дерева решений. Деревья решений используются в повседневной жизни в самых разных областях человеческой деятельности, порой и очень далеких от машинного обучения. Деревом решений можно назвать наглядную инструкцию, что делать в какой ситуации. Приведем пример из области консультирования научных сотрудников института. Высшая Школа Экономики выпускает инфо-схемы, облегчающие жизнь своим сотрудникам. Вот фрагмент инструкции по публикации научной статьи на портале института.

В терминах машинного обучения можно сказать, что это элементарный классификатор, который определяет форму публикации на портале (книга, статья, глава книги, препринт, публикация в «НИУ ВШЭ и СМИ») по нескольким признакам: типу публикации (монография, брошюра, статья и т.д.), типу издания, где опубликована статья (научный журнал, сборник трудов и т.д.) и остальным.

Зачастую дерево решений служит обобщением опыта экспертов, средством передачи знаний будущим сотрудникам или моделью бизнес-процесса компании. Например, до внедрения масштабируемых алгоритмов машинного обучения в банковской сфере задача кредитного скоринга решалась экспертами. Решение о выдаче кредита заемщику принималось на основе некоторых интуитивно (или по опыту) выведенных правил, которые можно представить в виде дерева решений.

В этом случае можно сказать, что решается задача бинарной классификации (целевой класс имеет два значения: «Выдать кредит» и «Отказать») по признакам «Возраст», «Наличие дома», «Доход» и «Образование».

Дерево решений как алгоритм машинного обучения – по сути то же самое: объединение логических правил вида «Значение признака $a$ меньше $x$ И Значение признака $b$ меньше $y$… => Класс 1″ в структуру данных «Дерево». Огромное преимущество деревьев решений в том, что они легко интерпретируемы, понятны человеку. Например, по схеме на рисунке выше можно объяснить заемщику, почему ему было отказано в кредите. Скажем, потому, что у него нет дома и доход меньше 5000. Как мы увидим дальше, многие другие, хоть и более точные, модели не обладают этим свойством и могут рассматриваться скорее как «черный ящик», в который загрузили данные и получили ответ. В связи с этой «понятностью» деревьев решений и их сходством с моделью принятия решений человеком (можно легко объяснять боссу свою модель), деревья решений получили огромную популярность, а один из представителей этой группы методов классификации, С4.5, рассматривается первым в списке 10 лучших алгоритмов интеллектуального анализа данных («Top 10 algorithms in data mining», Knowledge and Information Systems, 2008. PDF).

Как строится дерево решений

В примере с кредитным скорингом мы видели, что решение о выдаче кредита принималось на основе возраста, наличия недвижимости, дохода и других. Но какой признак выбрать первым? Для этого рассмотрим пример попроще, где все признаки бинарные.

Здесь можно вспомнить игру «20 вопросов», которая часто упоминается во введении в деревья решений. Наверняка каждый в нее играл. Один человек загадывает знаменитость, а второй пытается отгадать, задавая только вопросы, на которые можно ответить «Да» или «Нет» (опустим варианты «не знаю» и «не могу сказать»). Какой вопрос отгадывающий задаст первым делом? Конечно, такой, который сильнее всего уменьшит количество оставшихся вариантов. К примеру, вопрос «Это Анджелина Джоли?» в случае отрицательного ответа оставит более 7 миллиардов вариантов для дальнейшего перебора (конечно, поменьше, не каждый человек – знаменитость, но все равно немало), а вот вопрос «Это женщина?» отсечет уже около половины знаменитостей. То есть, признак «пол» намного лучше разделяет выборку людей, чем признак «это Анджелина Джоли», «национальность-испанец» или «любит футбол». Это интуитивно соответствует понятию прироста информации, основанного на энтропии.

Энтропия

Энтропия Шеннона определяется для системы с $N$ возможными состояниями следующим образом:

$Large S = -sum_{i=1}^{N}p_i log_2{p_i},$

где $p_i$ – вероятности нахождения системы в $i$-ом состоянии. Это очень важное понятие, используемое в физике, теории информации и других областях. Опуская предпосылки введения (комбинаторные и теоретико-информационные) этого понятия, отметим, что, интуитивно, энтропия соответствует степени хаоса в системе. Чем выше энтропия, тем менее упорядочена система и наоборот. Это поможет нам формализовать «эффективное разделение выборки», про которое мы говорили в контексте игры «20 вопросов».

Пример

Для иллюстрации того, как энтропия поможет определить хорошие признаки для построения дерева, приведем тот же игрушечный пример, что в статье «Энтропия и деревья принятия решений». Будем предсказывать цвет шарика по его координате. Конечно, ничего общего с жизнью это не имеет, но позволяет показать, как энтропия используется для построения дерева решений.

Здесь 9 синих шариков и 11 желтых. Если мы наудачу вытащили шарик, то он с вероятностью $p_1=frac{9}{20}$ будет синим и с вероятностью $p_2=frac{11}{20}$ – желтым. Значит, энтропия состояния $S_0 = -frac{9}{20}log_2{frac{9}{20}}-frac{11}{20}log_2{frac{11}{20}} approx 1$. Само это значение пока ни о чем нам не говорит. Теперь посмотрим, как изменится энтропия, если разбить шарики на две группы – с координатой меньше либо равной 12 и больше 12.

В левой группе оказалось 13 шаров, из которых 8 синих и 5 желтых. Энтропия этой группы равна $S_1 = -frac{5}{13}log_2{frac{5}{13}}-frac{8}{13}log_2{frac{8}{13}} approx 0.96$. В правой группе оказалось 7 шаров, из которых 1 синий и 6 желтых. Энтропия правой группы равна $S_2 = -frac{1}{7}log_2{frac{1}{7}}-frac{6}{7}log_2{frac{6}{7}} approx 0.6$. Как видим, энтропия уменьшилась в обеих группах по сравнению с начальным состоянием, хоть в левой и не сильно. Поскольку энтропия – по сути степень хаоса (или неопределенности) в системе, уменьшение энтропии называют приростом информации. Формально прирост информации (information gain, IG) при разбиении выборки по признаку $Q$ (в нашем примере это признак «$x leq 12$«) определяется как

$Large IG(Q) = S_O - sum_{i=1}^{q}frac{N_i}{N}S_i,$

где $q$ – число групп после разбиения, $N_i$ – число элементов выборки, у которых признак $Q$ имеет $i$-ое значение. В нашем случае после разделения получилось две группы ($q = 2$) – одна из 13 элементов ($N_1 = 13$), вторая – из 7 ($N_2 = 7$). Прирост информации получился

$ Large IG(x leq 12) = S_0 - frac{13}{20}S_1 - frac{7}{20}S_2 approx 0.16.$

Получается, разделив шарики на две группы по признаку «координата меньше либо равна 12», мы уже получили более упорядоченную систему, чем в начале. Продолжим деление шариков на группы до тех пор, пока в каждой группе шарики не будут одного цвета.

Для правой группы потребовалось всего одно дополнительное разбиение по признаку «координата меньше либо равна 18», для левой – еще три. Очевидно, энтропия группы с шариками одного цвета равна 0 ($log_2{1} = 0$), что соответствует представлению, что группа шариков одного цвета – упорядоченная.
В итоге мы построили дерево решений, предсказывающее цвет шарика по его координате. Отметим, что такое дерево решений может плохо работать для новых объектов (определения цвета новых шариков), поскольку оно идеально подстроилось под обучающую выборку (изначальные 20 шариков). Для классификации новых шариков лучше подойдет дерево с меньшим числом «вопросов», или разделений, пусть даже оно и не идеально разбивает по цветам обучающую выборку. Эту проблему, переобучение, мы еще рассмотрим далее.

Алгоритм построения дерева

Можно убедиться в том, что построенное в предыдущем примере дерево является в некотором смысле оптимальным – потребовалось только 5 «вопросов» (условий на признак $x$), чтобы «подогнать» дерево решений под обучающую выборку, то есть чтобы дерево правильно классифицировало любой обучающий объект. При других условиях разделения выборки дерево получится глубже.

В основе популярных алгоритмов построения дерева решений, таких как ID3 и C4.5, лежит принцип жадной максимизации прироста информации – на каждом шаге выбирается тот признак, при разделении по которому прирост информации оказывается наибольшим. Дальше процедура повторяется рекурсивно, пока энтропия не окажется равной нулю или какой-то малой величине (если дерево не подгоняется идеально под обучающую выборку во избежание переобучения).
В разных алгоритмах применяются разные эвристики для «ранней остановки» или «отсечения», чтобы избежать построения переобученного дерева.

def build(L):
    create node t
    if the stopping criterion is True:
        assign a predictive model to t
    else:
        Find the best binary split L = L_left + L_right
        t.left = build(L_left)
        t.right = build(L_right)
    return t  

Другие критерии качества разбиения в задаче классификации

Мы разобрались в том, как понятие энтропии позволяет формализовать представление о качестве разбиения в дереве. Но это всего лишь эвристика, существуют и другие:

На практике ошибка классификации почти не используется, а неопределенность Джини и прирост информации работают почти одинаково.

В случае задачи бинарной классификации ($p_+$ – вероятность объекта иметь метку +) энтропия и неопределенность Джини примут следующий вид:

$ S = -p_+ log_2{p_+} -p_- log_2{p_-} = -p_+ log_2{p_+} -(1 - p_{+}) log_2{(1 - p_{+})};$

$ G = 1 - p_+^2 - p_-^2 = 1 - p_+^2 - (1 - p_+)^2 = 2p_+(1-p_+).$

Когда мы построим графики этих двух функций от аргумента $p_+$, то увидим, что график энтропии очень близок к графику удвоенной неопределенности Джини, и поэтому на практике эти два критерия «работают» почти одинаково.

Импорт библиотек

from __future__ import division, print_function
# отключим всякие предупреждения Anaconda
import warnings
warnings.filterwarnings('ignore')
import numpy as np
import pandas as pd
%matplotlib inline
import seaborn as sns
from matplotlib import pyplot as plt

Отрисовка картинки

plt.rcParams['figure.figsize'] = (6,4)
xx = np.linspace(0,1,50)
plt.plot(xx, [2 * x * (1-x) for x in xx], label='gini')
plt.plot(xx, [4 * x * (1-x) for x in xx], label='2*gini')
plt.plot(xx, [-x * np.log2(x) - (1-x) * np.log2(1 - x)  for x in xx], label='entropy')
plt.plot(xx, [1 - max(x, 1-x) for x in xx], label='missclass')
plt.plot(xx, [2 - 2 * max(x, 1-x) for x in xx], label='2*missclass')
plt.xlabel('p+')
plt.ylabel('criterion')
plt.title('Критерии качества как функции от p+ (бинарная классификация)')
plt.legend();

Пример

Рассмотрим пример применения дерева решений из библиотеки Scikit-learn для синтетических данных. Два класса будут сгенерированы из двух нормальных распределений с разными средними.

Код для генерации данных

# первый класс
np.random.seed(7)
train_data = np.random.normal(size=(100, 2))
train_labels = np.zeros(100)

# добавляем второй класс
train_data = np.r_[train_data, np.random.normal(size=(100, 2), loc=2)]
train_labels = np.r_[train_labels, np.ones(100)]

Отобразим данные. Неформально, задача классификации в этом случае – построить какую-то «хорошую» границу, разделяющую 2 класса (красные точки от желтых). Если утрировать, то машинное обучение в этом случае сводится к тому, как выбрать хорошую разделяющую границу. Возможно, прямая будет слишком простой границей, а какая-то сложная кривая, огибающая каждую красную точку – будет слишком сложной и будем много ошибаться на новых примерах из того же распределения, из которого пришла обучающая выборка. Интуиция подсказывает, что хорошо на новых данных будет работать какая-то гладкая граница, разделяющая 2 класса, или хотя бы просто прямая (в $n$-мерном случае – гиперплоскость).

Отрисовка картинки


plt.rcParams['figure.figsize'] = (10,8)
plt.scatter(train_data[:, 0], train_data[:, 1], c=train_labels, s=100, 
cmap='autumn', edgecolors='black', linewidth=1.5);
plt.plot(range(-2,5), range(4,-3,-1));

Попробуем разделить эти два класса, обучив дерево решений. В дереве будем использовать параметр max_depth, ограничивающий глубину дерева. Визуализируем полученную границу разделения классов.

Код для обучения дерева и отрисовки его разделяющей границы

from sklearn.tree import DecisionTreeClassifier

# Напишем вспомогательную функцию, которая будет возвращать решетку для дальнейшей визуализации.
def get_grid(data):
    x_min, x_max = data[:, 0].min() - 1, data[:, 0].max() + 1
    y_min, y_max = data[:, 1].min() - 1, data[:, 1].max() + 1
    return np.meshgrid(np.arange(x_min, x_max, 0.01), np.arange(y_min, y_max, 0.01))

# параметр min_samples_leaf указывает, при каком минимальном количестве
# элементов в узле он будет дальше разделяться
clf_tree = DecisionTreeClassifier(criterion='entropy', max_depth=3, random_state=17)

# обучаем дерево
clf_tree.fit(train_data, train_labels)

# немного кода для отображения разделяющей поверхности
xx, yy = get_grid(train_data)
predicted = clf_tree.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.pcolormesh(xx, yy, predicted, cmap='autumn')
plt.scatter(train_data[:, 0], train_data[:, 1], c=train_labels, s=100, 
cmap='autumn', edgecolors='black', linewidth=1.5);

А как выглядит само построенное дерево? Видим, что дерево «нарезает» пространство на 7 прямоугольников (в дереве 7 листьев). В каждом таком прямоугольнике прогноз дерева будет константным, по превалированию объектов того или иного класса.

Код для отображения дерева

# используем .dot формат для визуализации дерева
from sklearn.tree import export_graphviz
export_graphviz(clf_tree, feature_names=['x1', 'x2'], 
out_file='../../img/small_tree.dot', filled=True)
# для этого понадобится библиотека pydot (pip install pydot)
!dot -Tpng '../../img/small_tree.dot' -o '../../img/small_tree.png'

Как «читается» такое дерево?

В начале было 200 объектов, 100 — одного класса и 100 – другого. Энтропия начального состояния была максимальной – 1. Затем было сделано разбиение объектов на 2 группы в зависимости от сравнения признака $x_1$ со значением $0.3631$ (найдите этот участок границы на рисунке выше, до дерева). При этом энтропия и в левой, и в правой группе объектов уменьшилась. И так далее, дерево строится до глубины 3. При такой визуализации чем больше объектов одного класса, тем цвет вершины ближе к темно-оранжевому и, наоборот, чем больше объектов второго класса, тем ближе цвет к темно-синему. В начале объектов одного класса поровну, поэтому корневая вершина дерева – белого цвета.

Как дерево решений работает с количественными признаками

Допустим, в выборке имеется количественный признак «Возраст», имеющий много уникальных значений. Дерево решений будет искать лучшее (по критерию типа прироста информации) разбиение выборки, проверяя бинарные признаки типа «Возраст < 17», «Возраст < 22.87» и т.д. Но что если таких «нарезаний» возраста слишком много? А что если есть еще количественный признак «Зарплата», и зарплату тоже можно «нарезать» большим числом способов? Получается слишком много бинарных признаков для выбора лучшего на каждом шаге построения дерева. Для решения этой проблемы применяют эвристики для ограничения числа порогов, с которыми мы сравниваем количественный признак.

Рассмотрим это на игрушечном примере. Пусть имеется следующая выборка:

Отсортируем ее по возрастанию возраста.

Обучим на этих данных дерево решений (без ограничения глубины) и посмотрим на него.

Код для обучения и отрисовки дерева

age_tree = DecisionTreeClassifier(random_state=17)
age_tree.fit(data['Возраст'].values.reshape(-1, 1), data['Невозврат кредита'].values)

export_graphviz(age_tree, feature_names=['Возраст'], 
out_file='../../img/age_tree.dot', filled=True)
!dot -Tpng '../../img/age_tree.dot' -o '../../img/age_tree.png'

На картинке ниже видим, что дерево задействовало 5 значений, с которыми сравнивается возраст: 43.5, 19, 22.5, 30 и 32 года. Если приглядеться, то это аккурат средние значения между возрастами, при которых целевой класс «меняется» с 1 на 0 или наоборот. Сложная фраза, поэтому пример: 43.5 – это среднее между 38 и 49 годами, клиент, которому 38 лет не вернул кредит, а тот, которому 49 – вернул. Аналогично, 19 лет – среднее между 18 и 20 годами. То есть в качестве порогов для «нарезания» количественного признака, дерево «смотрит» на те значения, при которых целевой класс меняет свое значение.

Подумайте, почему не имеет смысла в данном случае рассматривать признак «Возраст < 17.5».

Рассмотрим пример посложнее: добавим признак «Зарплата» (тыс. рублей/месяц).

Если отсортировать по возрасту, то целевой класс («Невозврат кредита») меняется (с 1 на 0 или наоборот) 5 раз. А если отсортировать по зарплате – то 7 раз. Как теперь дерево будет выбирать признаки? Посмотрим.

Код для обучения и отрисовки дерева

age_sal_tree = DecisionTreeClassifier(random_state=17)
age_sal_tree.fit(data2[['Возраст', 'Зарплата']].values, data2['Невозврат кредита'].values);

export_graphviz(age_sal_tree, feature_names=['Возраст', 'Зарплата'], 
out_file='../../img/age_sal_tree.dot', filled=True)
!dot -Tpng '../../img/age_sal_tree.dot' -o '../../img/age_sal_tree.png'

Видим, что в дереве задействованы как разбиения по возрасту, так и по зарплате. Причем пороги, с которыми сравниваются признаки: 43.5 и 22.5 года – для возраста и 95 и 30.5 тыс. руб/мес – для зарплаты. И опять можно заметить, что 95 тыс. – это среднее между 88 и 102, при этом человек с зарплатой 88 оказался «плохим», а с 102 – «хорошим». То же самое для 30.5 тыс. То есть перебирались сравнения зарплаты и возраста не со всеми возможными значениями, а только с несколькими. А почему в дереве оказались именно эти признаки? Потому что по ним разбиения оказались лучше (по критерию неопределенности Джини).

Вывод: самая простая эвристика для обработки количественных признаков в дереве решений: количественный признак сортируется по возрастанию, и в дереве проверяются только те пороги, при которых целевой признак меняет значение. Звучит не очень строго, но надеюсь, я донес смысл с помощью игрушечных примеров.

Дополнительно, когда в данных много количественных признаков, и у каждого много уникальных значений, могут отбираться не все пороги, описанные выше, а только топ-N, дающих максимальный прирост все того же критерия. То есть, по сути, для каждого порога строится дерево глубины 1, считается насколько снизилась энтропия (или неопределенность Джини) и выбираются только лучшие пороги, с которыми стоит сравнивать количественный признак.

Для иллюстрации: при разбиении по признаку «Зарплата $leq$ 34.5″ в левой подгруппе энтропия 0 (все клиенты «плохие»), а в правой – 0.954 (3 «плохих» и 5 «хороших», можете проверить, 1 часть домашнего задания будет как раз на то, чтоб разобраться досконально с построением деревьев). Прирост информации получается примерно 0.3.
А при разбиении по признаку «Зарплата $leq$ 95″ в левой подгруппе энтропия 0.97 (6 «плохих» и 4 «хороших»), а в правой – 0 (всего один объект). Прирост информации получается примерно 0.11.
Посчитав таким образом прирост информации для каждого разбиения, можно предварительно, до построения большого дерева (по всем признакам) отобрать пороги, с которыми будет сравниваться каждый количественный признак.

Еще примеры дискретизации количественных признаков можно посмотреть в постах, подобных этому или этому. Одна из самых известных научных статей на эту тему – «On the handling of continuous-valued attributes in decision tree generation» (U.M. Fayyad. K.B. Irani, «Machine Learning», 1992).

Основные параметры дерева

В принципе дерево решений можно построить до такой глубины, чтоб в каждом листе был ровно один объект. Но на практике это не делается (если строится только одно дерево) из-за того, что такое дерево будет переобученным – оно слишком настроится на обучающую выборку и будет плохо работать на прогноз на новых данных. Где-то внизу дерева, на большой глубине будут появляться разбиения по менее важным признакам (например, приехал ли клиент из Саратова или Костромы). Если утрировать, может оказаться так, что из всех 4 клиентов, пришедших в банк за кредитом в зеленых штанах, никто не вернул кредит. Но мы не хотим, чтобы наша модель классификации порождала такие специфичные правила.

Есть два исключения, ситуации, когда деревья строятся до максимальной глубины:

  • Случайный лес (композиция многих деревьев) усредняет ответы деревьев, построенных до максимальной глубины (почему стоит делать именно так, разберемся позже)
  • Стрижка дерева (pruning). При таком подходе дерево сначала строится до максимальной глубины, потом постепенно, снизу вверх, некоторые вершины дерева убираются за счет сравнения по качеству дерева с данным разбиением и без него (сравнение проводится с помощью кросс-валидации, о которой чуть ниже). Подробнее можно почитать в материалах репозитория Евгения Соколова.

Картинка ниже – пример разделяющей границы, построенной переобученным деревом.

Основные способы борьбы с переобучением в случае деревьев решений:

  • искусственное ограничение глубины или минимального числа объектов в листе: построение дерева просто в какой-то момент прекращается;
  • стрижка дерева

Класс DecisionTreeClassifier в Scikit-learn

Основные параметры класса sklearn.tree.DecisionTreeClassifier:

  • max_depth – максимальная глубина дерева
  • max_features — максимальное число признаков, по которым ищется лучшее разбиение в дереве (это нужно потому, что при большом количестве признаков будет «дорого» искать лучшее (по критерию типа прироста информации) разбиение среди всех признаков)
  • min_samples_leaf – минимальное число объектов в листе. У этого параметра есть понятная интерпретация: скажем, если он равен 5, то дерево будет порождать только те классифицирующие правила, которые верны как минимум для 5 объектов

Параметры дерева надо настраивать в зависимости от входных данных, и делается это обычно с помощью кросс-валидации, про нее чуть ниже.

Дерево решений в задаче регрессии

При прогнозировании количественного признака идея построения дерева остается та же, но меняется критерий качества:

Пример

Сгенерируем данные, распределенные вокруг функции $f(x) = e^{-x ^ 2} + 1.5 * e^{-(x - 2) ^ 2}$ c некоторым шумом, обучим на них дерево решений и изобразим, какие прогнозы делает дерево.

Код

n_train = 150        
n_test = 1000       
noise = 0.1

def f(x):
    x = x.ravel()
    return np.exp(-x ** 2) + 1.5 * np.exp(-(x - 2) ** 2)

def generate(n_samples, noise):
    X = np.random.rand(n_samples) * 10 - 5
    X = np.sort(X).ravel()
    y = np.exp(-X ** 2) + 1.5 * np.exp(-(X - 2) ** 2) + 
    np.random.normal(0.0, noise, n_samples)
    X = X.reshape((n_samples, 1))
    return X, y

X_train, y_train = generate(n_samples=n_train, noise=noise)
X_test, y_test = generate(n_samples=n_test, noise=noise)

from sklearn.tree import DecisionTreeRegressor

reg_tree = DecisionTreeRegressor(max_depth=5, random_state=17)

reg_tree.fit(X_train, y_train)
reg_tree_pred = reg_tree.predict(X_test)

plt.figure(figsize=(10, 6))
plt.plot(X_test, f(X_test), "b")
plt.scatter(X_train, y_train, c="b", s=20)
plt.plot(X_test, reg_tree_pred, "g", lw=2)
plt.xlim([-5, 5])
plt.title("Decision tree regressor, MSE = %.2f" % np.sum((y_test - reg_tree_pred) ** 2))
plt.show()

Видим, что дерево решений аппроксимирует зависимость в данных кусочно-постоянной функцией.

Метод ближайших соседей

Метод ближайших соседей (k Nearest Neighbors, или kNN) — тоже очень популярный метод классификации, также иногда используемый в задачах регрессии. Это, наравне с деревом решений, один из самых понятных подходов к классификации. На уровне интуиции суть метода такова: посмотри на соседей, какие преобладают, таков и ты. Формально основой метода является гипотеза компактности: если метрика расстояния между примерами введена достаточно удачно, то схожие примеры гораздо чаще лежат в одном классе, чем в разных.

Согласно методу ближайших соседей, тестовый пример (зеленый шарик) будет отнесен к классу «синие», а не «красные».

Например, если не знаешь, какой тип товара указать в объявлении для Bluetooth-гарнитуры, можешь найти 5 похожих гарнитур, и если 4 из них отнесены к категории «Аксессуары», и только один — к категории «Техника», то здравый смысл подскажет для своего объявления тоже указать категорию «Аксессуары».

Для классификации каждого из объектов тестовой выборки необходимо последовательно выполнить следующие операции:

Под задачу регрессии метод адаптируется довольно легко – на 3 шаге возвращается не метка, а число – среднее (или медианное) значение целевого признака среди соседей.

Примечательное свойство такого подхода – его ленивость. Это значит, что вычисления начинаются только в момент классификации тестового примера, а заранее, только при наличии обучающих примеров, никакая модель не строится. В этом отличие, например, от ранее рассмотренного дерева решений, где сначала на основе обучающей выборки строится дерево, а потом относительно быстро происходит классификация тестовых примеров.

Стоит отметить, что метод ближайших соседей – хорошо изученный подход (в машинном обучении, эконометрике и статистике больше известно, наверное, только про линейную регрессию). Для метода ближайших соседей существует немало важных теорем, утверждающих, что на «бесконечных» выборках это оптимальный метод классификации. Авторы классической книги «The Elements of Statistical Learning» считают kNN теоретически идеальным алгоритмом, применимость которого просто ограничена вычислительными возможностями и проклятием размерностей.

Метод ближайших соседей в реальных задачах

  • В чистом виде kNN может послужить хорошим стартом (baseline) в решении какой-либо задачи;
  • В соревнованиях Kaggle kNN часто используется для построения мета-признаков (прогноз kNN подается на вход прочим моделям) или в стекинге/блендинге;
  • Идея ближайшего соседа расширяется и на другие задачи, например, в рекомендательных системах простым начальным решением может быть рекомендация какого-то товара (или услуги), популярного среди ближайших соседей человека, которому хотим сделать рекомендацию;
  • На практике для больших выборок часто пользуются приближенными методами поиска ближайших соседей. Вот лекция Артема Бабенко про эффективные алгоритмы поиска ближайших соседей среди миллиардов объектов в пространствах высокой размерности (поиск по картинкам). Также известны открытые библиотеки, в которых реализованы такие алгоритмы, спасибо компании Spotify за ее библиотеку Annoy.

Качество классификации/регрессии методом ближайших соседей зависит от нескольких параметров:

  • число соседей
  • метрика расстояния между объектами (часто используются метрика Хэмминга, евклидово расстояние, косинусное расстояние и расстояние Минковского). Отметим, что при использовании большинства метрик значения признаков надо масштабировать. Условно говоря, чтобы признак «Зарплата» с диапазоном значений до 100 тысяч не вносил больший вклад в расстояние, чем «Возраст» со значениями до 100.
  • веса соседей (соседи тестового примера могут входить с разными весами, например, чем дальше пример, тем с меньшим коэффициентом учитывается его «голос»)

Класс KNeighborsClassifier в Scikit-learn

Основные параметры класса sklearn.neighbors.KNeighborsClassifier:

  • weights: «uniform» (все веса равны), «distance» (вес обратно пропорционален расстоянию до тестового примера) или другая определенная пользователем функция
  • algorithm (опционально): «brute», «ball_tree», «KD_tree», или «auto». В первом случае ближайшие соседи для каждого тестового примера считаются перебором обучающей выборки. Во втором и третьем — расстояние между примерами хранятся в дереве, что ускоряет нахождение ближайших соседей. В случае указания параметра «auto» подходящий способ нахождения соседей будет выбран автоматически на основе обучающей выборки.
  • leaf_size (опционально): порог переключения на полный перебор в случае выбора BallTree или KDTree для нахождения соседей
  • metric: «minkowski», «manhattan», «euclidean», «chebyshev» и другие

Выбор параметров модели и кросс-валидация

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

Чаще всего это делается одним из 2 способов:

  • отложенная выборка (held-out/hold-out set). При таком подходе мы оставляем какую-то долю обучающей выборки (как правило от 20% до 40%), обучаем модель на остальных данных (60-80% исходной выборки) и считаем некоторую метрику качества модели (например, самое простое – долю правильных ответов в задаче классификации) на отложенной выборке.
  • кросс-валидация (cross-validation, на русский еще переводят как скользящий или перекрестный контроль). Тут самый частый случай – K-fold кросс-валидация

Тут модель обучается $K$ раз на разных ($K-1$) подвыборках исходной выборки (белый цвет), а проверяется на одной подвыборке (каждый раз на разной, оранжевый цвет).
Получаются $K$ оценок качества модели, которые обычно усредняются, выдавая среднюю оценку качества классификации/регрессии на кросс-валидации.

Кросс-валидация дает лучшую по сравнению с отложенной выборкой оценку качества модели на новых данных. Но кросс-валидация вычислительно дорогостоящая, если данных много.

Кросс-валидация – очень важная техника в машинном обучении (применяемая также в статистике и эконометрике), с ее помощью выбираются гиперпараметры моделей, сравниваются модели между собой, оценивается полезность новых признаков в задаче и т.д. Более подробно можно почитать, например, тут у Sebastian Raschka или в любом классическом учебнике по машинному (статистическому) обучению

Примеры применения

Деревья решений и метод ближайших соседей в задаче прогнозирования оттока клиентов телеком-оператора

Считаем данные в DataFrame и проведем предобработку. Штаты пока сохраним в отдельный объект Series, но удалим из датафрейма. Первую модель будем обучать без штатов, потом посмотрим, помогают ли они.

Считывание и предобработка данных

df = pd.read_csv('../../data/telecom_churn.csv')

df['International plan'] = pd.factorize(df['International plan'])[0]
df['Voice mail plan'] = pd.factorize(df['Voice mail plan'])[0]
df['Churn'] = df['Churn'].astype('int')
states = df['State']
y = df['Churn']
df.drop(['State', 'Churn'], axis=1, inplace=True)

Выделим 70% выборки (X_train, y_train) под обучение и 30% будут отложенной выборкой (X_holdout, y_holdout). отложенная выборка никак не будет участвовать в настройке параметров моделей, на ней мы в конце, после этой настройки, оценим качество полученной модели. Обучим 2 модели – дерево решений и kNN, пока не знаем, какие параметры хороши, поэтому наугад: глубину дерева берем 5, число ближайших соседей – 10.

Код

from sklearn.model_selection import train_test_split, StratifiedKFold
from sklearn.neighbors import KNeighborsClassifier

X_train, X_holdout, y_train, y_holdout = train_test_split(df.values, y, test_size=0.3,
random_state=17)

tree = DecisionTreeClassifier(max_depth=5, random_state=17)
knn = KNeighborsClassifier(n_neighbors=10)

tree.fit(X_train, y_train)
knn.fit(X_train, y_train)

Качество прогнозов будем проверять с помощью простой метрики – доли правильных ответов. Сделаем прогнозы для отложенной выборки. Дерево решений справилось лучше: доля правильных ответов около 94% против 88% у kNN. Но это мы пока выбирали параметры наугад.

Код для оценки моделей

from sklearn.metrics import accuracy_score

tree_pred = tree.predict(X_holdout)
accuracy_score(y_holdout, tree_pred) # 0.94

knn_pred = knn.predict(X_holdout)
accuracy_score(y_holdout, knn_pred) # 0.88

Теперь настроим параметры дерева на кросс-валидации. Настраивать будем максимальную глубину и максимальное используемое на каждом разбиении число признаков. Суть того, как работает GridSearchCV: для каждой уникальной пары значений параметров max_depth и max_features будет проведена 5-кратная кросс-валидация и выберется лучшее сочетание параметров.

Настройка параметров моделей

from sklearn.model_selection import GridSearchCV, cross_val_score

tree_params = {'max_depth': range(1,11),
'max_features': range(4,19)}

tree_grid = GridSearchCV(tree, tree_params,
cv=5, n_jobs=-1,
verbose=True)

tree_grid.fit(X_train, y_train)

Лучшее сочетание параметров и соответствующая средняя доля правильных ответов на кросс-валидации:

tree_grid.best_params_

{‘max_depth’: 6, ‘max_features’: 17}

tree_grid.best_score_

0.94256322331761677

accuracy_score(y_holdout, tree_grid.predict(X_holdout))

0.94599999999999995

Теперь попробуем настроить число соседей в алгоритме kNN.

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler

knn_pipe = Pipeline([('scaler', StandardScaler()), ('knn', KNeighborsClassifier(n_jobs=-1))])

knn_params = {'knn__n_neighbors': range(1, 10)}

knn_grid = GridSearchCV(knn_pipe, knn_params,
cv=5, n_jobs=-1,
verbose=True)

knn_grid.fit(X_train, y_train)

knn_grid.best_params_, knn_grid.best_score_

({‘knn__n_neighbors’: 7}, 0.88598371195885128)

accuracy_score(y_holdout, knn_grid.predict(X_holdout))

0.89000000000000001

В этом примере дерево показало себя лучше, чем метод ближайших соседей: 94.2% правильных ответов на кросс-валидации и 94.6% на отложенной выборке против 88.6% / 89% для kNN. Более того, в данной задаче дерево проявляет себя очень хорошо, и даже случайный лес (который пока представляем просто как кучу деревьев, которые вместе работают почему-то намного лучше, чем одно дерево) в этом примере показывает долю правильных ответов не намного выше (95.1% на кросс-валидации и 95.3% –на отложенной выборке), а обучается намного дольше.

Код для обучения и настройки случайного леса

from sklearn.ensemble import RandomForestClassifier

forest = RandomForestClassifier(n_estimators=100, n_jobs=-1, random_state=17)
print(np.mean(cross_val_score(forest, X_train, y_train, cv=5))) # 0.949

forest_params = {'max_depth': range(1,11),
'max_features': range(4,19)}

forest_grid = GridSearchCV(forest, forest_params,
cv=5, n_jobs=-1,
verbose=True)

forest_grid.fit(X_train, y_train)

forest_grid.best_params_, forest_grid.best_score_ # ({'max_depth': 9, 'max_features': 6}, 0.951)

accuracy_score(y_holdout, forest_grid.predict(X_holdout)) # 0.953

Нарисуем получившееся дерево. Из-за того, что оно не совсем игрушечное (максимальная глубина – 6), картинка получается уже не маленькой, но по дереву можно «прогуляться», если отдельно открыть рисунок.

Код для отрисовки дерева

export_graphviz(tree_grid.best_estimator_, feature_names=df.columns, 
out_file='../../img/churn_tree.dot', filled=True)
!dot -Tpng '../../img/churn_tree.dot' -o '../../img/churn_tree.png'

Сложный случай для деревьев решений

В продолжение обсуждения плюсов и минусов обсуждаемых методов приведем очень простой пример задачи классификации, с которым дерево справляется, но делает все как-то «сложнее», чем хотелось бы. Создадим множество точек на плоскости (2 признака), каждая точка будет относиться к одному из классов (+1, красные, или -1 – желтые). Если смотреть на это как на задачу классификации, то вроде все очень просто – классы разделяются прямой.

Код для генерации данных и картинки

def form_linearly_separable_data(n=500, x1_min=0, x1_max=30, x2_min=0, x2_max=30):
    data, target = [], []
    for i in range(n):
        x1, x2 = np.random.randint(x1_min, x1_max), np.random.randint(x2_min, x2_max)

        if np.abs(x1 - x2) > 0.5:
            data.append([x1, x2])
            target.append(np.sign(x1 - x2))
    return np.array(data), np.array(target)

X, y = form_linearly_separable_data()

plt.scatter(X[:, 0], X[:, 1], c=y, cmap='autumn', edgecolors='black');

Однако дерево решений строит уж больно сложную границу и само по себе оказывается глубоким. Кроме того, представьте, как плохо дерево будет обобщаться на пространство вне представленного квадрата $30 times 30$, обрамляющего обучающую выборку.

Код для отрисовки разделяющей поверхности, которую строит дерево

tree = DecisionTreeClassifier(random_state=17).fit(X, y)

xx, yy = get_grid(X, eps=.05)
predicted = tree.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.pcolormesh(xx, yy, predicted, cmap='autumn')
plt.scatter(X[:, 0], X[:, 1], c=y, s=100, 
cmap='autumn', edgecolors='black', linewidth=1.5)
plt.title('Easy task. Decision tree compexifies everything');

Вот такая сложная конструкция, хотя решение (хорошая разделяющая поверхность) – это всего лишь прямая $x_1 = x_2$.

Код для отрисовки дерева

export_graphviz(tree, feature_names=['x1', 'x2'], 
out_file='../../img/deep_toy_tree.dot', filled=True)
!dot -Tpng '../../img/deep_toy_tree.dot' -o '../../img/deep_toy_tree.png'

Метод одного ближайшего соседа здесь справляется вроде лучше дерева, но все же не так хорошо, как линейный классификатор (наша следующая тема).

Код для отрисовки разделяющей поверхности, которую строит kNN

knn = KNeighborsClassifier(n_neighbors=1).fit(X, y)

xx, yy = get_grid(X, eps=.05)
predicted = knn.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.pcolormesh(xx, yy, predicted, cmap='autumn')
plt.scatter(X[:, 0], X[:, 1], c=y, s=100, 
cmap='autumn', edgecolors='black', linewidth=1.5);
plt.title('Easy task, kNN. Not bad');

Деревья решений и метод ближайших соседей в задаче распознавания рукописных цифр MNIST

Теперь посмотрим на описанные 2 алгоритма в реальной задаче. Используем «встроенные» в sklearn данные по рукописным цифрам. Эта задача будет примером, когда метод ближайших соседей работает на удивление хорошо.

Картинки здесь представляются матрицей 8 x 8 (интенсивности белого цвета для каждого пикселя). Далее эта матрица «разворачивается» в вектор длины 64, получается признаковое описание объекта.

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

Загрузка данных и отрисовка нескольких цифр

from sklearn.datasets import load_digits

data = load_digits()
X, y = data.data, data.target

X[0,:].reshape([8,8])

array([[ 0., 0., 5., 13., 9., 1., 0., 0.],
[ 0., 0., 13., 15., 10., 15., 5., 0.],
[ 0., 3., 15., 2., 0., 11., 8., 0.],
[ 0., 4., 12., 0., 0., 8., 8., 0.],
[ 0., 5., 8., 0., 0., 9., 8., 0.],
[ 0., 4., 11., 0., 1., 12., 7., 0.],
[ 0., 2., 14., 5., 10., 12., 0., 0.],
[ 0., 0., 6., 13., 10., 0., 0., 0.]])

f, axes = plt.subplots(1, 4, sharey=True, figsize=(16,6))
for i in range(4):
axes[i].imshow(X[i,:].reshape([8,8]));

Далее проведем ровно такой же эксперимент, как и в прошлой задаче, только диапазоны изменения настраиваемых параметров будут немного другие.

Настройка DT и kNN на данных MNIST

Выделим 70% выборки (X_train, y_train) под обучение и 30% будут отложенной выборкой (X_holdout, y_holdout). отложенная выборка никак не будет участвовать в настройке параметров моделей, на ней мы в конце, после этой настройки, оценим качество полученной модели.

X_train, X_holdout, y_train, y_holdout = train_test_split(X, y, test_size=0.3,
random_state=17)

Обучим дерево решений и kNN, опять параметры пока наугад берем.

tree = DecisionTreeClassifier(max_depth=5, random_state=17)
knn = KNeighborsClassifier(n_neighbors=10)

tree.fit(X_train, y_train)
knn.fit(X_train, y_train)

Сделаем прогнозы для отложенной выборки. Видим, что метод ближайших соседей справился намного лучше. Но это мы пока выбирали параметры наугад.

tree_pred = tree.predict(X_holdout)
knn_pred = knn.predict(X_holdout)
accuracy_score(y_holdout, knn_pred), accuracy_score(y_holdout, tree_pred) # (0.97, 0.666)

Теперь так же, как раньше настроим параметры моделей на кросс-валидации, только учтем, что признаков сейчас больше, чем в прошлой задаче — 64.

tree_params = {'max_depth': [1, 2, 3, 5, 10, 20, 25, 30, 40, 50, 64],
'max_features': [1, 2, 3, 5, 10, 20 ,30, 50, 64]}

tree_grid = GridSearchCV(tree, tree_params,
cv=5, n_jobs=-1,
verbose=True)

tree_grid.fit(X_train, y_train)

Лучшее сочетание параметров и соответствующая средняя доля правильных ответов на кросс-валидации:

tree_grid.best_params_, tree_grid.best_score_ # ({'max_depth': 20, 'max_features': 64}, 0.844)

Это уже не 66%, но и не 97%. Метод ближайших соседей на этом наборе данных работает лучше. В случае одного ближайшего соседа на кросс-валидации достигается почти 99% угадываний.

np.mean(cross_val_score(KNeighborsClassifier(n_neighbors=1), X_train, y_train, cv=5)) # 0.987

Обучим на этих же данных случайный лес, он на большинстве выборок работает лучше, чем метод ближайших соседей. Но сейчас у нас исключение.

np.mean(cross_val_score(RandomForestClassifier(random_state=17), X_train, y_train, cv=5)) # 0.935

Вы будете правы, если возразите, что мы тут не настраивали параметры RandomForestClassifier, но даже с настройкой доля правильных ответов не достигает 98%, как для у метода одного ближайшего соседа.

Результаты эксперимента
(Обозначения: CV и Holdout– средние доли правильных ответов модели на кросс-валидации и отложенной выборке соот-но. DT – дерево решений, kNN – метод ближайших соседей, RF – случайный лес)

Вывод по этому эксперименту (и общий совет): вначале проверяйте на своих данных простые модели – дерево решений и метод ближайших соседей (а в следующий раз сюда добавится логистическая регрессия), может оказаться, что уже они работают достаточно хорошо.

Сложный случай для метода ближайших соседей

Теперь рассмотрим еще один простой пример. В задаче классификации один из признаков будет просто пропорционален вектору ответов, но методу ближайших соседей это не поможет.

Код для генерации шумных данных с паттерном

def form_noisy_data(n_obj=1000, n_feat=100, random_seed=17):
    np.random.seed(random_seed)
    y = np.random.choice([-1, 1], size=n_obj)
    # первый признак пропорционален целевому
    x1 = 0.3 * y
    # остальные признаки – шум
    x_other = np.random.random(size=[n_obj, n_feat - 1])

    return np.hstack([x1.reshape([n_obj, 1]), x_other]), y

X, y = form_noisy_data()

Как обычно, будем смотреть на долю правильных ответов на кросс-валидации и на отложенной выборке. Построим кривые, отражающие зависимость этих величин от параметра n_neighbors в методе ближайших соседей. Такие кривые называются кривыми валидации.

Видим, что метод ближайших соседей с евклидовой метрикой не справляется с задачей, даже если варьировать число ближайших соседей в широком диапазоне. Напротив, дерево решений легко «обнаруживает» скрытую зависимость в данных при любом ограничении на максимальную глубину.

Построение кривых валидации для kNN

from sklearn.model_selection import cross_val_score

cv_scores, holdout_scores = [], []
n_neighb = [1, 2, 3, 5] + list(range(50, 550, 50))

for k in n_neighb:

    knn = KNeighborsClassifier(n_neighbors=k)
    cv_scores.append(np.mean(cross_val_score(knn, X_train, y_train, cv=5)))
    knn.fit(X_train, y_train)
    holdout_scores.append(accuracy_score(y_holdout, knn.predict(X_holdout)))

plt.plot(n_neighb, cv_scores, label='CV')
plt.plot(n_neighb, holdout_scores, label='holdout')
plt.title('Easy task. kNN fails')
plt.legend();

Обучение дерева

tree = DecisionTreeClassifier(random_state=17, max_depth=1)
tree_cv_score = np.mean(cross_val_score(tree, X_train, y_train, cv=5))
tree.fit(X_train, y_train)
tree_holdout_score = accuracy_score(y_holdout, tree.predict(X_holdout))
print('Decision tree. CV: {}, holdout: {}'.format(tree_cv_score, tree_holdout_score))

Decision tree. CV: 1.0, holdout: 1.0

Итак, во втором примере дерево справилось с задачей идеально, а метод ближайших соседей испытал трудности. Впрочем, это минус скорее не метода, а используемой евклидовой метрики: в данном случае она не позволила выявить, что один признак намного лучше остальных.

Плюсы и минусы деревьев решений и метода ближайших соседей

Плюсы и минусы деревьев решений

Плюсы:

  • Порождение четких правил классификации, понятных человеку, например, «если возраст < 25 и интерес к мотоциклам, то отказать в кредите». Это свойство называют интерпретируемостью модели;
  • Деревья решений могут легко визуализироваться, то есть может «интерпретироваться» (строгого определения я не видел) как сама модель (дерево), так и прогноз для отдельного взятого тестового объекта (путь в дереве);
  • Быстрые процессы обучения и прогнозирования;
  • Малое число параметров модели;
  • Поддержка и числовых, и категориальных признаков.

Минусы:

  • У порождения четких правил классификации есть и другая сторона: деревья очень чувствительны к шумам во входных данных, вся модель может кардинально измениться, если немного изменится обучающая выборка (например, если убрать один из признаков или добавить несколько объектов), поэтому и правила классификации могут сильно изменяться, что ухудшает интерпретируемость модели;
  • Разделяющая граница, построенная деревом решений, имеет свои ограничения (состоит из гиперплоскостей, перпендикулярных какой-то из координатной оси), и на практике дерево решений по качеству классификации уступает некоторым другим методам;
  • Необходимость отсекать ветви дерева (pruning) или устанавливать минимальное число элементов в листьях дерева или максимальную глубину дерева для борьбы с переобучением. Впрочем, переобучение — проблема всех методов машинного обучения;
  • Нестабильность. Небольшие изменения в данных могут существенно изменять построенное дерево решений. С этой проблемой борются с помощью ансамблей деревьев решений (рассмотрим далее);
  • Проблема поиска оптимального дерева решений (минимального по размеру и способного без ошибок классифицировать выборку) NP-полна, поэтому на практике используются эвристики типа жадного поиска признака с максимальным приростом информации, которые не гарантируют нахождения глобально оптимального дерева;
  • Сложно поддерживаются пропуски в данных. Friedman оценил, что на поддержку пропусков в данных ушло около 50% кода CART (классический алгоритм построения деревьев классификации и регрессии – Classification And Regression Trees, в sklearn реализована улучшенная версия именно этого алгоритма);
  • Модель умеет только интерполировать, но не экстраполировать (это же верно и для леса и бустинга на деревьях). То есть дерево решений делает константный прогноз для объектов, находящихся в признаковом пространстве вне параллелепипеда, охватывающего все объекты обучающей выборки. В нашем примере с желтыми и синими шариками это значит, что модель дает одинаковый прогноз для всех шариков с координатой > 19 или < 0.

Плюсы и минусы метода ближайших соседей

Плюсы:

  • Простая реализация;
  • Неплохо изучен теоретически;
  • Как правило, метод хорош для первого решения задачи, причем не только классификации или регрессии, но и, например, рекомендации;
  • Можно адаптировать под нужную задачу выбором метрики или ядра (в двух словах: ядро может задавать операцию сходства для сложных объектов типа графов, а сам подход kNN остается тем же). Кстати, профессор ВМК МГУ и опытный участник соревнований по анализу данных Александр Дьяконов любит самый простой kNN, но с настроенной метрикой сходства объектов. Можно почитать про некоторые его решения в этой статье;
  • Неплохая интерпретация, можно объяснить, почему тестовый пример был классифицирован именно так. Хотя этот аргумент можно атаковать: если число соседей большое, то интерпретация ухудшается (условно: «мы не дали ему кредит, потому что он похож на 350 клиентов, из которых 70 – плохие, что на 12% больше, чем в среднем по выборке»).

Минусы:

  • Метод считается быстрым в сравнении, например, с композициями алгоритмов, но в реальных задачах, как правило, число соседей, используемых для классификации, будет большим (100-150), и в таком случае алгоритм будет работать не так быстро, как дерево решений;
  • Если в наборе данных много признаков, то трудно подобрать подходящие веса и определить, какие признаки не важны для классификации/регрессии;
  • Зависимость от выбранной метрики расстояния между примерами. Выбор по умолчанию евклидового расстояния чаще всего ничем не обоснован. Можно отыскать хорошее решение перебором параметров, но для большого набора данных это отнимает много времени;
  • Нет теоретических оснований выбора определенного числа соседей — только перебор (впрочем, чаще всего это верно для всех гиперпараметров всех моделей). В случае малого числа соседей метод чувствителен к выбросам, то есть склонен переобучаться;
  • Как правило, плохо работает, когда признаков много, из-за «прояклятия размерности». Про это хорошо рассказывает известный в ML-сообществе профессор Pedro Domingos – тут в популярной статье «A Few Useful Things to Know about Machine Learning», также «the curse of dimensionality» описывается в книге Deep Learning в главе «Machine Learning basics».

На этом мы подходим к концу, надеемся, этой статьи Вам хватит надолго. К тому же, есть еще и домашнее задание.

Домашнее задание № 3

В качестве закрепления материала предлагаем выполнить это задание – разобраться с тем, как работает дерево решений, на игрушечном примере, затем обучить и настроить деревья в задаче классификации данных Adult репозитория UCI. Проверить себя можно отправив ответы в веб-форме (там же найдете и решение).

Актуальные и обновляемые версии демо-заданий – на английском на сайте курса. Также по подписке на Patreon («Bonus Assignments» tier) доступны расширенные домашние задания по каждой теме (только на англ.)

Полезные ресурсы

  • Open Machine Learning Course. Topic 3. Classification, Decision Trees and k Nearest Neighbors (перевод этой статьи на английский)
  • Видеозапись лекции по мотивам этой статьи
  • Реализация многих алгоритмов машинного обучения с нуля – репозиторий rushter. Полезно, например, посмотреть, как реализованы деревья решений и метод ближайших соседей;
  • Курс Евгения Соколова по машинному обучению (материалы на GitHub). Хорошая теория, нужна неплохая математическая подготовка;
  • Курс Дмитрия Ефимова на GitHub (англ.). Тоже очень качественные материалы;
  • Статья «Энтропия и деревья принятия решений» на Хабре;
  • Статья «Машинное обучение и анализ данных. Лекция для Малого ШАДа Яндекса» на Хабре.

Понравилась статья? Поделить с друзьями:
  • Как вы поняли что вам изменили
  • Как вы понимаете фразу если не можешь изменить ситуацию измени свое отношение к ней
  • Как вы понимаете слово штукарство каким синонимом можно его изменить
  • Как вы понимаете значение выражения признать свои ошибки
  • Как вы понимаете выражение признать свои ошибки сочинение