Лого на 91. НЕГ „Проф. Константин Гълъбов“

Избираем модул · Урок 14

Практикум: пишем k-NN сами

Реализация на класификатора от нулата, сравнение с scikit-learn и как категорийните признаци стават числа.

Защо да го пишем, като го има готов

Защото това е единственият модел в курса, който се побира в 15 реда. След днес няма да ви е нужно да вярвате какво прави класификаторът — ще сте го написали.

Второто, което правим днес, е подготовката на данните: кодиране на категорийните признаци, обещано още в урок 3.

Категорийни признаци в числа

В урок 3 видяхме, че кодирането на район „Център“, „Изток“, „Люлин“ като 1, 2, 3 внушава подредба, каквато няма. Правилният начин е една колона да стане на няколко:

район        →  Център  Изток  Люлин
"Център"     →     1      0      0
"Изток"      →     0      1      0
"Люлин"      →     0      0      1

Кодиране едно от много (one-hot encoding)

Всяка възможна стойност на категорийния признак получава собствена колона със стойност 0 или 1. Така никоя стойност не е „по-голяма“ от друга и разстоянията между различните категории са еднакви.

Цената

Признак с 500 възможни стойности (например град) става на 500 колони. Това раздува данните и влошава работата на алгоритмите, базирани на разстояние. Тогава се групират редките стойности в „друго“ или се използват други методи за кодиране.

Планът за днес

  1. Пишем функция за разстояние.
  2. Пишем предсказване за един пример.
  3. Проверяваме върху малък набор, който познаваме от миналия урок.
  4. Сравняваме със scikit-learn — числата трябва да съвпаднат.
  5. Добавяме нормализиране и кодиране и мерим какво печелим.

Правилото за днес

Ако нещо не работи, отпечатвайте междинните стойности. Първо разстоянията, после подредбата, после избраните съседи. Грешката почти винаги е в едно от трите.