Всичко започва от таблица
Миналия час решихте, че задачата ви е класификация или регресия. Каквото и да прави моделът, данните му се свеждат до една таблица — и за ваше щастие вие умеете да правите таблици по-добре от повечето хора, които се занимават с машинно обучение: с SELECT.
Пример (ред)
Един конкретен обект, за който имаме данни: един ученик, един клиент, една книга. Точно един ред на обект — не един ред на оценка.
Признак (feature, колона)
Едно измеримо свойство на примера: брой оценки, средна оценка, клас, дни от последната поръчка.
Етикет (label, целева променлива)
Отговорът, който искаме моделът да научи да дава: „висок успех“ да / не, цената, диагнозата.
Числови и категорийни признаци
| Вид | Пример | Какво може да се прави |
|---|---|---|
| Числов | средна оценка 5.25, площ 68 м² | сравнява се, събира се, има разстояние |
| Категориен | клас „11А“, район „Център“ | само равно / различно |
| Подреден | размер S/M/L, оценка слаб → отличен | сравнява се, но разликите не са равни |
| Двоичен | има ли отсъствия: да/не | 0 или 1 |
Кодиране на категориите
Повечето алгоритми смятат с числа, а разстояние между „11А“ и „11В“ няма смисъл. Затова категорийният признак се кодира: една колона „клас“ с три стойности става три колони klas_11A, klas_11B, klas_11V с 0 или 1 (one-hot кодиране). Orange го прави сам, когато обяви колоната за категорийна; в SQL го правите с CASE WHEN.
Обучаваща и тестова извадка
Представете си съученик, който е получил контролното предварително и е запаметил отговорите. На това контролно взима шест. Знае ли материала? Ще разберем само ако му дадем друго контролно. С модела е същото: ако го проверим върху редовете, с които е обучен, мерим паметта му, а не способността му да се справя с нови случаи.
Обучаваща извадка (train)
Частта, от която моделът се учи. Обикновено 70–80% от примерите.
Тестова извадка (test)
Останалите 20–30%, върху които се измерва колко добре моделът се справя с невиждани примери.
- Разделянето е случайно. Ако таблицата е подредена по клас и отрежете последните 20%, тестът ще съдържа само 11В.
- Двете извадки не се пресичат — един ученик е или в едната, или в другата.
- Разделяте първо, обработвате после: средната стойност за запълване на липси се смята само от обучаващата част.
От базата към таблицата — с една заявка
В базата един ученик е един ред в students, но има много редове в marks. Таблицата за модела иска точно един ред на ученик, затова оценките се агрегират — познатите ви COUNT, AVG, MIN с GROUP BY по обекта. Ето заявката, която направи таблицата от началото на урока (учебната база от приложението):
SELECT
s.id AS uchenik,
c.name AS klas,
COUNT(m.id) AS broi_ocenki,
ROUND(AVG(m.mark), 2) AS sredna,
MIN(m.mark) AS nay_niska,
COUNT(DISTINCT m.subject_id) AS broi_predmeti,
CASE WHEN s.grade >= 5.00 THEN 1 ELSE 0 END AS visok_uspeh
FROM students s
JOIN classes c ON c.id = s.class_id
LEFT JOIN marks m ON m.student_id = s.id
GROUP BY s.id, c.name
ORDER BY s.id;LEFT JOIN, а неJOIN— ученик без оценки също е пример (сbroi_ocenki = 0). При негоsrednaеNULL; ще решите дали да го запълните сCOALESCE(AVG(m.mark), 0)или да махнете реда.CASE WHENправи етикета — 1 или 0 — от колона на базата. Саматаgradeне е в списъка на признаците.uchenikе идентификатор, не признак — в Orange го обявявате като meta, за да не влезе в модела.
Колко данни са нужни
Точен отговор няма, но има ориентир: колкото по-сложна е закономерността и колкото повече признаци има, толкова повече примери трябват. Учебната база има 9 ученици — това стига да разберете механиката, но не и да обучите нещо смислено. За задача с 4–5 признака и 2 класа искате поне стотици редове. И винаги е по-добре 200 внимателно направени реда, отколкото 20 000 с грешни етикети.
Какво трябва да запомниш
- Ред = пример (един обект), колона = признак, последната колона = етикет; X и y.
- Категорийните признаци се кодират с 0/1 колони, не с 1, 2, 3; id не е признак.
- Таблицата за модел се прави с GROUP BY по обекта и агрегации — една заявка, един ред на обект.
- Етикетът се прави с CASE WHEN; колоната, от която е направен, не остава сред признаците (изтичане).
- Разделяте случайно на 80% обучаваща и 20% тестова извадка преди всякаква обработка; тестът се вижда веднъж.