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

11. клас · Избираем модул · Урок 6

Проектиране на решаващо дърво по казус

Как се проектира решаващо дърво на ръка: въпрос във всеки възел, извод във всяко листо, най-полезният въпрос най-отгоре, проверка за пълнота — и защо всеки път в дървото е едно правило.

От списък с правила към дърво от въпроси

Миналия час записахте правила в таблица и бяхте машината за извод. Сигурно сте забелязали нещо неудобно: при всеки нов клиент минавате целия списък отгоре надолу и проверявате условия, които изобщо не са нужни. Специалистът не работи така. Той задава един въпрос, и според отговора — следващия. Това е играта на „двадесет въпроса“, а картинката ѝ е решаващо дърво (decision tree).

данеданеданеданеРазстоянието е под 2 км?Вали ли?Има ли пряк автобус?автобуспешаградски транспортБързате ли?таксиколелоСин възел — въпрос. Зелен — извод. Всеки път отгоре надолу е едно правило.
Дърво по казуса „какъв транспорт да избера“. Четири въпроса, пет извода; при всеки вход се задават най-много три.

Решаващо дърво

Схема, в която всеки вътрешен възел е въпрос, всяко ребро — отговор, а всяко листо — извод. Отговорът на потребителя определя по кое ребро се слиза надолу, докато се стигне до листо.

В урок 15 ще видите, че такова дърво може да се научи от данни. Днес го проектирате на ръка — както инженерите го правят за диагностика, за правила на обслужване и за всяка задача, в която знанието е ясно, а грешката трябва да може да се обясни.

Кой въпрос е първи

Един и същ набор от изводи може да се подреди в много различни дървета. Добрият въпрос за корена има три свойства:

  • Отговорим — потребителят може да отговори веднага, без уред и без експерт. „Вали ли?“ е добър; „Каква е влажността на въздуха?“ — не.
  • Ясен — „да/не“ или няколко точно изброени отговора. Без „горе-долу“.
  • Най-полезен — отхвърля най-много възможности наведнъж, тоест дели изводите на възможно най-равни части.

Защо равни части? Защото всеки въпрос „да/не“ в най-добрия случай намалява възможностите наполовина. Двадесет такива въпроса стигат за 2²⁰ — над милион — различни отговора. Ако обаче първият въпрос отделя една възможност от останалите десет, в девет от десет случая не сте научили почти нищо.

Кандидат за корен„да“ оставя„не“ оставяПолезност
Растението е на пряко слънце?1 диагноза5 диагнозислаба
Почвата е мокра?2 диагнози4 диагнозисредна
Проблемът е по листата?3 диагнози3 диагнозинай-добра

Пълнота, противоречия и излишни въпроси

  • Пълнота — за всеки възможен отговор на всеки въпрос има ребро надолу, което завършва в листо. Ако след „не“ няма нищо, дървото мълчи — същата непълнота, която видяхте при правилата.
  • Противоречие — един и същ вход води до два различни извода. В списък от правила това се случва лесно. В дърво е невъзможно по построение: всеки вход минава по точно един път и стига до едно листо.
  • Излишен въпрос — двата му отговора водят до един и същ извод. Махнете го; той само бави потребителя.
  • Дълбочина — най-дългият път от корена до листо е броят въпроси в най-лошия случай. Дърво с добре подредени въпроси е плитко.

Дърво и правила са едно и също

Прочетете дървото от фигурата път по път — от корена до всяко листо. Всеки път е правило, чието условие са отговорите по пътя, свързани с „и“:

АКО под 2 км и вали                                  ТОГАВА автобус
АКО под 2 км и не вали                               ТОГАВА пеша
АКО не под 2 км и има пряк автобус                   ТОГАВА градски транспорт
АКО не под 2 км и няма пряк автобус и бързате        ТОГАВА такси
АКО не под 2 км и няма пряк автобус и не бързате     ТОГАВА колело

Пет листа — пет правила. Обратното също работи: ако имате списък от правила, изберете условие, което се среща в много от тях, за корен, и разделете правилата според него.

Списък от правилаРешаващо дърво
Ред на въпроситеняма — проверяват се всички условиявграден — следващият въпрос зависи от отговора
Противоречиявъзможни, трудно се забелязватневъзможни по построение
Ново знаниеоще един редново листо или пренареден клон
Четимостдобра при малко правиладобра дори при десетки листа

Следващия час дървото става програма. Погледнете колко прилича на вложени условия — формата на кода е формата на дървото:

if (podDvaKm)
{
    if (vali) savet = "автобус";
    else      savet = "пеша";
}
else
{
    if (imaPryakAvtobus) savet = "градски транспорт";
    else if (barzate)    savet = "такси";
    else                 savet = "колело";
}

Какво трябва да запомниш

  • Възел = въпрос, ребро = отговор, листо = извод. Входът минава по точно един път.
  • Най-отгоре стои въпросът, който отхвърля най-много възможности — дели изводите най-равно.
  • Пълнота: всяко ребро свършва в листо. Излишен въпрос: двата му отговора водят до едно и също.
  • Дървото не може да си противоречи; списъкът от правила може.
  • Всеки път от корена до листо е едно правило „ако – тогава“; дърво с N листа = N правила.
  • В код дървото са вложени if/else — темата на урок 7.