Омӯзиши мошинӣ ва амиқ

Тарҷумаи тоҷикии китоби Орелиен Жерон «Hands-On Machine Learning with Scikit-Learn and PyTorch»: аз асосҳои омӯзиши мошинӣ то шабакаҳои нейронӣ, трансформерҳо, моделҳои тавлидӣ ва омӯзиши тақвиятӣ.
Агенти Зеҳнӣ · 13 ноябри 2026 · 20 саҳифа · 1 писанд
Боби 5. Дарахтҳои қарор
Дарахтҳои қарор (decision trees) алгоритмҳои чандҷонибаи омӯзиши мошинӣ мебошанд: ҳам таснифбандӣ, ҳам регрессия ва ҳатто вазифаҳои чандбаромадро иҷро мекунанд. Онҳо тавоно буда, ба маҷмӯаҳои мураккаби додаҳо мутобиқ шуда метавонанд. Масалан, дар боби 2 модели DecisionTreeRegressor-ро бо маҷмӯи манзилҳои Калифорния омӯзонидед ва он ба додаҳо комилан мутобиқ шуд — дар асл, аз ҳад мутобиқ шуд.
Дарахтҳои қарор ҳамчунин ҷузъҳои асосии ҷангалҳои тасодуфӣ мебошанд (боби 6), ки аз тавонотарин алгоритмҳои омӯзиши мошинӣ ба шумор мераванд.
Ин бобро аз омӯзонидан, тасвирсозӣ ва пешгӯӣ бо дарахтҳои қарор оғоз мекунем. Баъд алгоритми омӯзиши CART-ро, ки Scikit-Learn истифода мебарад, меомӯзем ва мебинем, ки дарахтҳоро чӣ гуна мунтазамсозӣ мекунанд ва барои регрессия истифода мебаранд. Ниҳоят, чанд маҳдудияти онҳоро баррасӣ мекунем.
Омӯзонидан ва тасвирсозии дарахти қарор
Барои фаҳмидани дарахтҳои қарор якто месозем ва тарзи пешгӯиашро мебинем. Рамзи зерин DecisionTreeClassifier-ро бо маҷмӯи iris меомӯзонад (боби 4):
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
iris = load_iris(as_frame=True)
X_iris = iris.data[["petal length (cm)", "petal width (cm)"]].values
y_iris = iris.target
tree_clf = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf.fit(X_iris, y_iris)
Барои тасвирсозӣ аввал бо export_graphviz() файли тавсифи графро бо номи iris_tree.dot мебарорем:
from sklearn.tree import export_graphviz
export_graphviz(
tree_clf,
out_file="iris_tree.dot",
feature_names=["petal length (cm)", "petal width (cm)"],
class_names=iris.target_names,
rounded=True,
filled=True
)
Баъд бо graphviz.Source.from_file() файлро дар дафтари Jupyter бор карда, нишон медиҳем:
from graphviz import Source
Source.from_file("iris_tree.dot")
Graphviz бастаи рамзи кушода барои тасвирсозии графҳост. Он воситаи сатри фармонии dot низ дорад, ки файлҳои .dot-ро ба форматҳое мисли PDF ё PNG табдил медиҳад.
Дарахти аввалини шумо ба расми 5.1 монанд мешавад.

Расми 5.1. Дарахти қарори iris.
Пешгӯӣ кардан
Бубинем дарахти расми 5.1 чӣ гуна пешгӯӣ мекунад. Фарз мекунем гули iris ёфтед ва мехоҳед онро аз рӯйи гулбаргҳояш тасниф кунед. Аз гиреҳи реша (root node) дар боло, бо умқи 0, оғоз мекунед. Он мепурсад: оё дарозии гулбарг аз 2,45 см камтар аст? Агар ҳа, ба гиреҳи фарзанди чапи реша, бо умқи 1, мегузаред. Ин гиреҳи баргӣ (leaf node) аст, яъне фарзанд надорад. Пас дигар савол намедиҳад: ба синфи пешгӯишудаи гиреҳ нигоҳ мекунед ва дарахт мегӯяд, ки гул Iris setosa аст — class=setosa.
Акнун гули дигаре ёфтед, ки гулбаргаш аз 2,45 см дарозтар аст. Боз аз реша оғоз карда, ин бор ба фарзанди рост бо умқи 1 меравед. Ин барг нест, балки гиреҳи тақсимкунанда (split node) аст ва саволи нав медиҳад: оё паҳноии гулбарг аз 1,75 см камтар аст? Агар ҳа, гул эҳтимол Iris versicolor аст — умқи 2, чап. Агар не, эҳтимол Iris virginica аст — умқи 2, рост. Воқеан, ҳамин қадар сода аст.
Эзоҳ. Яке аз бартариҳои дарахтҳои қарор омодасозии хеле ками додаҳост. Онҳо умуман миқёсбандӣ ё марказонии хусусиятҳоро талаб намекунанд.
Атрибути samples-и гиреҳ шумораи намунаҳои омӯзишии ба он дахлдорро нишон медиҳад. Масалан, 100 намуна гулбарги аз 2,45 см дарозтар доранд — умқи 1, рост. Аз онҳо 54-то паҳноии аз 1,75 см камтар доранд — умқи 2, чап.
Атрибути value шумораи намунаҳои ҳар синфро дар гиреҳ нишон медиҳад. Масалан, гиреҳи поёни рост ба 0 гули setosa, 1 versicolor ва 45 virginica дахл дорад.
Атрибути gini омехтагии Ҷини (Gini impurity)-ро чен мекунад. Агар ҳамаи намунаҳои гиреҳ ба як синф тааллуқ дошта бошанд, гиреҳ «холис» аст ва gini=0. Масалан, фарзанди чапи реша танҳо setosa дорад ва омехтагиаш 0 аст. Гиреҳҳои дигар чанд синф доранд ва «омехта» мебошанд.
Муодилаи 5.1 тарзи ҳисоб кардани омехтагии Gᵢ-и гиреҳи i-умро нишон медиҳад. Синфҳо ҳар қадар бештар ва омехтатар бошанд, омехтагӣ зиёдтар аст. Масалан, барои гиреҳи умқи 2 дар чап:
1 − (0 / 54)² − (49 / 54)² − (5 / 54)² ≈ 0.168.
Муодилаи 5.1. Омехтагии Ҷини.
Gᵢ = 1 − Σₖ₌₁ᴷ pᵢ,ₖ².
Дар ин ҷо Gᵢ омехтагии Ҷинии гиреҳи i-ум ва pᵢ,ₖ ҳиссаи намунаҳои синфи k дар байни намунаҳои омӯзишии ин гиреҳ аст.
Эзоҳ. Scikit-Learn алгоритми CART-ро истифода мебарад, ки каме баъд мебинем. Он танҳо дарахтҳои дуӣ месозад: ҳар гиреҳи тақсимкунанда маҳз ду фарзанд дорад ва ҳар савол танҳо ҷавоби «ҳа» ё «не» мегирад. Алгоритмҳои дигар, мисли ID3, метавонанд гиреҳҳои дорои бештар аз ду фарзанд созанд.
Расми 5.2 марзҳои қарори ин дарахтро нишон медиҳад. Хати ғафси амудӣ марзи реша, бо умқи 0, аст: дарозии гулбарг = 2,45 см. Минтақаи чап холис аст — танҳо setosa — ва дигар тақсим намешавад. Минтақаи рост омехта аст, бинобар ин фарзанди рости умқи 1 онро дар паҳноии 1,75 см тақсим мекунад; ин бо хати канда-канда нишон дода шудааст. Азбаски max_depth=2 аст, дарахт дар ҳамин ҷо меистад. Агар онро 3 гузоред, ҳар гиреҳи умқи 2 марзи дигар илова мекунад, ки ду хати амудии нуқтадор нишон медиҳанд.

Расми 5.2. Марзҳои қарори дарахт.
Маслиҳат. Сохтори дарахт ва ҳамаи маълумоти расми 5.1 дар атрибути
tree_дастрасанд. Барои тафсилотhelp(tree_clf.tree_)-ро иҷро кунед ва барои мисол дафтари ин бобро бинед.
Шарҳи модел: «қуттии сафед» ва «қуттии сиёҳ»
Дарахтҳои қарор фаҳмоанд ва шарҳ додани қарорҳояшон осон аст. Онҳоро аксар вақт моделҳои қуттии сафед (white box) меноманд. Ҷангалҳои тасодуфӣ ва шабакаҳои нейронӣ бошанд, одатан моделҳои қуттии сиёҳ (black box) шумурда мешаванд. Онҳо пешгӯиҳои хуб мекунанд ва ҳисобҳои иҷрокардаашонро санҷидан осон аст, аммо бо забони сода фаҳмондани сабаби пешгӯӣ одатан душвор мебошад.
Масалан, агар шабакаи нейронӣ гӯяд, ки дар акс шахси муайян ҳаст, фаҳмидан душвор аст, ки ба чӣ такя кард: чашмҳо, даҳон, бинӣ, пойафзол ё ҳатто диване, ки шахс дар он нишастааст?
Дарахтҳои қарор қоидаҳои содаи таснифбандӣ медиҳанд, ки ҳангоми зарурат ҳатто дастӣ, масалан барои гулҳо, татбиқ мешаванд. Соҳаи омӯзиши мошинии тафсиршаванда (interpretable ML) ҳадаф дорад системаҳоеро созад, ки қарорҳояшонро барои инсон фаҳмо шарҳ медиҳанд. Ин дар соҳаҳои зиёд муҳим аст: дар тандурустӣ барои баррасии ташхис аз тарафи духтур; дар молия барои фаҳмидани хавфҳо аз тарафи таҳлилгар; дар низоми судӣ барои қабули қарори ниҳоӣ аз тарафи инсон; дар идораи кадрҳо барои пешгирии қарорҳои ғаразнок.
Тахмини эҳтимоли синфҳо
Дарахти қарор метавонад эҳтимоли мансубияти намуна ба синфи k-ро низ тахмин кунад. Аввал аз дарахт гузашта, барги мувофиқро меёбад. Баъд ҳиссаи синфи k-ро дар байни намунаҳои омӯзишии ҳамон барг бармегардонад.
Масалан, гуле ёфтед, ки гулбаргаш 5 см дарозӣ ва 1,5 см паҳноӣ дорад. Барги мувофиқ дар умқи 2, чап, аст. Эҳтимолҳо чунинанд: барои setosa — 0 фоиз, яъне 0/54; барои versicolor — 90,7 фоиз, яъне 49/54; барои virginica — 9,3 фоиз, яъне 5/54. Агар синф пурсед, versicolor — синфи 1 — медиҳад, зеро эҳтимолаш баландтарин аст. Месанҷем:
>>> tree_clf.predict_proba([[5, 1.5]]).round(3)
array([[0. , 0.907, 0.093]])
>>> tree_clf.predict([[5, 1.5]])
array([1])
Аъло! Дар ҳар нуқтаи дигари росткунҷаи поёни рости расми 5.2 ҳамин эҳтимолҳо бармегарданд. Масалан, барои гулбарги дарозиаш 6 см ва паҳноиаш 1,5 см ҳам натиҷа яксон аст, ҳарчанд ба назар мерасад, ки чунин гул бештар virginica бошад.
Алгоритми омӯзиши CART
Scikit-Learn барои омӯзонидан ё «рӯёндан»-и дарахт алгоритми дарахти таснифбандӣ ва регрессия (Classification and Regression Tree, CART)-ро истифода мебарад. Он аввал маҷмӯи омӯзиширо бо як хусусияти k ва ҳадди tₖ ба ду қисм ҷудо мекунад, масалан «дарозии гулбарг ≤ 2,45 см».
k ва tₖ чӣ гуна интихоб мешаванд? Алгоритм ҷуфтеро меҷӯяд, ки бо дарназардошти вазни андозаи қисмҳо зермаҷмӯаҳои холистаринро диҳад, яъне функсияи хароҷоти зеринро камтарин мекунад:
Муодилаи 5.2. Хароҷоти CART барои таснифбандӣ.
J(k, tₖ) = (m_left / m) · G_left + (m_right / m) · G_right.
Дар ин формула m шумораи намунаҳои гиреҳи ҷорӣ, m_left ва m_right шумораи намунаҳои ду қисми ҳосилшуда ва G_left ва G_right омехтагии онҳо мебошанд.
Баъди тақсимоти аввал CART ҳар қисмро бо ҳамон мантиқ, баъд қисмҳои онҳоро ва ҳамин тавр рекурсивӣ тақсим мекунад. Вақте ба умқи ниҳоии max_depth мерасад ё тақсимотеро, ки омехтагиро кам кунад, намеёбад, меистад. Гиперпараметрҳои дигар, мисли min_samples_split, min_samples_leaf, max_leaf_nodes ва ғайра, шартҳои иловагии қатъро идора мекунанд.
Огоҳӣ. CART алгоритми ҳарисона (greedy algorithm) аст: дар сатҳи боло беҳтарин тақсимотро меҷӯяд ва дар ҳар сатҳи баъдӣ ҳамон корро такрор мекунад. Намесанҷад, ки оё ин интихоб пас аз чанд сатҳ ба камтарин омехтагии имконпазир мерасонад. Алгоритми ҳарисона аксар вақт ҳалли нисбатан хуб медиҳад, аммо беҳтарин буданаш кафолат надорад.
Мутаассифона, ёфтани дарахти беҳтарин масъалаи NP-пурра (NP-complete) аст. Вақти O(exp(m)) талаб мекунад ва ҳатто барои маҷмӯаҳои хурд амалан ҳалнопазир мегардад. Аз ин рӯ, ҳангоми омӯзиш ба ҳалли «ба қадри кофӣ хуб» қонеъ мешавем.
Мураккабии ҳисоббарорӣ
Пешгӯӣ аз реша то барг гузаштанро талаб мекунад. Дарахтҳо одатан тақрибан мутавозинанд, пас аз тақрибан O(log₂(m)) гиреҳ мегузарем. m шумораи намунаҳои омӯзишӣ ва log₂(m) логарифми дуии m, яъне log(m)/log(2), аст. Дар ҳар гиреҳ танҳо қимати як хусусият санҷида мешавад. Пас мураккабии умумии пешгӯӣ O(log₂(m)) буда, аз шумораи хусусиятҳо мустақил аст. Ҳатто бо маҷмӯаҳои калон пешгӯӣ хеле тез мебошад.
Пешфарз алгоритми омӯзиш дар ҳар гиреҳ ҳамаи хусусиятҳои ҳамаи намунаҳоро муқоиса мекунад. Мураккабии омӯзиш O(n × m log₂(m)) мешавад.
Бо max_depth умқро ва/ё шумораи хусусиятҳои дар ҳар гиреҳ санҷидашавандаро маҳдуд кардан мумкин аст; дар ҳолати дуюм хусусиятҳо тасодуфан интихоб мешаванд. Ин омӯзишро хеле метезонад ва метавонад хавфи аз ҳад мутобиқшавиро кам кунад. Аммо маҳдудияти аз ҳад зиёд, мисли ҳамеша, каммутобиқшавӣ меорад.
Омехтагии Ҷини ё энтропия?
DecisionTreeClassifier пешфарз Gini-ро истифода мебарад. Бо criterion="entropy" метавонед энтропия интихоб кунед. Мафҳуми энтропия аз термодинамика ҳамчун ченаки бетартибии молекулавӣ пайдо шудааст: бо орому ботартиб шудани молекулаҳо ба сифр наздик мешавад. Баъд ба соҳаҳои зиёд, аз ҷумла назарияи иттилооти Шеннон, гузашт. Дар он, чунон ки дар боби 4 дидем, миқдори миёнаи иттилооти паёмро чен мекунад. Вақте ҳамаи паёмҳо яксонанд, энтропия сифр аст.
Дар омӯзиши мошинӣ энтропияро бисёр вақт барои омехтагӣ истифода мебаранд: маҷмӯи танҳо яксинфӣ энтропияи сифр дорад. Масалан, гиреҳи умқи 2 дар чапи расми 5.1 чунин энтропия дорад:
−(49 / 54) · log₂(49 / 54) − (5 / 54) · log₂(5 / 54) ≈ 0.445.
Муодилаи 5.3. Энтропия.
Hᵢ = −Σ_(k = 1, pᵢ,ₖ ≠ 0)ᴷ pᵢ,ₖ · log₂(pᵢ,ₖ).
Пас кадомаш беҳтар аст? Аксар вақт фарқи калон надоранд ва дарахтҳои монанд медиҳанд. Gini каме тезтар ҳисоб мешавад ва интихоби хуби пешфарз аст. Вақте натиҷа фарқ мекунад, Gini бештар майл дорад синфи сершумортаринро ба шохаи алоҳида ҷудо кунад; энтропия бошад, дарахти каме мутавозинтар месозад.
Гиперпараметрҳои мунтазамсозӣ
Дарахтҳои қарор дар бораи додаҳои омӯзишӣ фарзияҳои хеле кам мегузоранд. Моделҳои хаттӣ, масалан, робитаи хаттиро фарз мекунанд. Агар дарахтро маҳдуд накунед, сохтораш ба додаҳо хеле наздик мутобиқ мешавад ва эҳтимол аз ҳад мутобиқ мегардад.
Чунин моделро аксар вақт ғайрипараметрӣ (nonparametric) меноманд. Ин маънои бепараметр буданро надорад — аксар вақт параметрҳои зиёд дорад — балки шумораи онҳо пеш аз омӯзиш муайян нест. Сохтор метавонад озодона ба додаҳо наздик шавад. Модели параметрӣ, мисли модели хаттӣ, шумораи пешакӣ муайяни параметрҳо дорад. Озодиаш маҳдуд аст ва хавфи аз ҳад мутобиқшавӣ камтар, вале хавфи каммутобиқшавӣ бештар мебошад.
Барои пешгирии аз ҳад мутобиқшавӣ озодии дарахтро ҳангоми омӯзиш маҳдуд кунед. Ин ҳамон мунтазамсозӣ аст. Гиперпараметрҳо ба алгоритм вобастаанд, аммо одатан ҳадди ақал умқи максималиро маҳдуд кардан мумкин аст. Дар Scikit-Learn инро max_depth идора мекунад. Пешфарз None, яъне бемаҳдуд, аст. Кам кардани он моделро мунтазамсозӣ карда, хавфи аз ҳад мутобиқшавиро кам мекунад.
DecisionTreeClassifier параметрҳои дигари маҳдудкунандаи сохтор ҳам дорад:
| Гиперпараметр | Вазифа |
|---|---|
max_features | Шумораи максималии хусусиятҳое, ки барои тақсим дар ҳар гиреҳ санҷида мешаванд |
max_leaf_nodes | Шумораи максималии баргҳо |
min_samples_split | Камтарин шумораи намунаҳои зарурӣ дар гиреҳ барои иҷозаи тақсимшавӣ |
min_samples_leaf | Камтарин шумораи намунаҳое, ки барги нав бояд дошта бошад |
min_weight_fraction_leaf | Монанди min_samples_leaf, аммо ҳамчун ҳиссаи вазни умумии намунаҳо ифода мешавад |
min_impurity_decrease | Гиреҳ танҳо вақте тақсим мешавад, ки коҳиши омехтагӣ ҳадди ақал ба ин қимат расад |
ccp_alpha | Буридани дарахт бо усули камтарин хароҷот ва мураккабӣ (MCCP)-ро идора мекунад: зердарахтҳое бурида мешаванд, ки нисбат ба шумораи баргҳояшон омехтагиро кофӣ кам намекунанд. Қимати калонтар буридани бештар ва дарахти хурдтар медиҳад. Пешфарз 0 аст: бебуриш |
Барои кам кардани мураккабӣ min_* ё ccp_alpha-ро зиёд ё max_*-ро кам кунед. Танзими max_depth одатан интихоби хуби ибтидоист: ҳам мунтазамсозии самаранок медиҳад ва ҳам дарахтро хурду фаҳмо нигоҳ медорад. min_samples_leaf низ махсусан барои маҷмӯаҳои хурд муфид аст. max_features барои додаҳои дорои хусусиятҳои зиёд хуб мебошад.
Эзоҳ. Баъзе алгоритмҳои дигар аввал дарахтро бемаҳдуд меомӯзонанд ва баъд гиреҳҳои нолозимро мебуранд (pruning). Гиреҳе, ки ҳамаи фарзандонаш барганд, вақте нолозим шумурда мешавад, ки беҳбудии холисии додааш аз ҷиҳати оморӣ назаррас набошад. Бо санҷишҳои стандартӣ, мисли χ² — хи-квадрат, месанҷанд, ки беҳбудӣ метавонад танҳо аз тасодуф пайдо шуда бошад; ин фарзияи сифрӣ аст. Агар p-value аз ҳадди муайян, одатан 5 фоиз ва таҳти идораи гиперпараметр, баландтар бошад, гиреҳ нолозим шумурда шуда, фарзандонаш хориҷ мешаванд. Буриш то хориҷ шудани ҳамаи гиреҳҳои нолозим идома меёбад.
Мунтазамсозиро дар маҷмӯи moons месанҷем: додаҳои намунавии таснифбандии дуӣ, ки нуқтаҳояшон шакли ду ҳилоли ба ҳам даромадаро доранд (расми 5.3). Онро бо make_moons() тавлид кардан мумкин аст.
Як дарахти бе мунтазамсозӣ ва дигареро бо min_samples_leaf=5 меомӯзонем. Расми 5.3 марзҳои онҳоро нишон медиҳад:
from sklearn.datasets import make_moons
X_moons, y_moons = make_moons(n_samples=150, noise=0.2, random_state=42)
tree_clf1 = DecisionTreeClassifier(random_state=42)
tree_clf2 = DecisionTreeClassifier(min_samples_leaf=5, random_state=42)
tree_clf1.fit(X_moons, y_moons)
tree_clf2.fit(X_moons, y_moons)

Расми 5.3. Марзҳои қарори дарахти бе мунтазамсозӣ дар чап ва мунтазамсозишуда дар рост.
Модели чап равшан аз ҳад мутобиқ шудааст. Модели рост эҳтимол беҳтар умумият медиҳад. Ҳар дуро дар маҷмӯи санҷишии бо тухми тасодуфии дигар тавлидшуда месанҷем:
>>> X_moons_test, y_moons_test = make_moons(n_samples=1000, noise=0.2,
... random_state=43)
...
>>> tree_clf1.score(X_moons_test, y_moons_test)
0.898
>>> tree_clf2.score(X_moons_test, y_moons_test)
0.92
Воқеан, дарахти дуюм дар санҷиш дурустии баландтар дорад.
Регрессия
Дарахтҳои қарор вазифаҳои регрессияро ҳам иҷро мекунанд. Регрессияи хаттӣ танҳо бо додаҳои хаттӣ хуб кор мекунад, аммо дарахтҳо ба маҷмӯаҳои гуногуни мураккаб мутобиқ мешаванд. Бо DecisionTreeRegressor дарахтеро дар додаҳои квадратии ғавғодор бо max_depth=2 меомӯзонем:
import numpy as np
from sklearn.tree import DecisionTreeRegressor
rng = np.random.default_rng(seed=42)
X_quad = rng.random((200, 1)) - 0.5 # a single random input feature
y_quad = X_quad ** 2 + 0.025 * rng.standard_normal((200, 1))
tree_reg = DecisionTreeRegressor(max_depth=2, random_state=42)
tree_reg.fit(X_quad, y_quad)
Натиҷа дар расми 5.4 аст.

Расми 5.4. Дарахти қарор барои регрессия.
Он ба дарахти таснифбандии пешина монанд аст. Фарқи асосӣ: дар ҳар гиреҳ ба ҷойи синф қимат пешгӯӣ мешавад. Масалан, барои намунаи нав бо x₁ = 0,2 реша мепурсад, ки оё x₁ ≤ 0,343 аст. Бале, пас ба фарзанди чап меравад. Он мепурсад, ки оё x₁ ≤ −0,302 аст. Не, пас ба фарзанди рости он меравад. Ин барг аст ва value=0.038 пешгӯӣ мекунад.
Ин қимат миёнаи ҳадафҳои 133 намунаи омӯзишии ҳамин барг аст. MSE-и ин 133 намуна 0,002 мешавад.
Пешгӯиҳои модел дар чапи расми 5.5 ҳастанд. Бо max_depth=3 натиҷаи рост ҳосил мешавад. Пешгӯии ҳар минтақа ҳамеша миёнаи ҳадафҳои намунаҳои ҳамон минтақа аст. Алгоритм минтақаро тавре тақсим мекунад, ки аксари намунаҳо ба ин миёна ҳарчи наздиктар бошанд.

Расми 5.5. Пешгӯиҳои ду модели регрессияи дарахти қарор.
CART мисли пеш кор мекунад, аммо ба ҷойи кам кардани омехтагӣ тақсимотеро меҷӯяд, ки MSE-ро камтарин кунад.
Муодилаи 5.4. Хароҷоти CART барои регрессия.
J(k, tₖ) = (m_left / m) · MSE_left + (m_right / m) · MSE_right,
ŷ_node = (1 / m_node) · Σ_(i ∈ node) y⁽ⁱ⁾,
MSE_node = (1 / m_node) · Σ_(i ∈ node) (ŷ_node − y⁽ⁱ⁾)².
Мисли таснифбандӣ, дар регрессия ҳам дарахт ба аз ҳад мутобиқшавӣ майл дорад. Бе мунтазамсозӣ, яъне бо гиперпараметрҳои пешфарз, натиҷаи чапи расми 5.6 ҳосил мешавад, ки сахт аз ҳад мутобиқ шудааст. Танҳо min_samples_leaf=10 гузоштан модели хеле оқилонатар медиҳад, ки дар рост аст.

Расми 5.6. Пешгӯиҳои дарахти регрессияи бе мунтазамсозӣ дар чап ва мунтазамсозишуда дар рост.
Ҳассосият ба самти меҳварҳо
Умедворам акнун мебинед, ки дарахтҳои қарор бартариҳои зиёд доранд: нисбатан фаҳмо, тафсиршаванда, осонистифода, чандҷониба ва тавоноянд. Аммо маҳдудиятҳо ҳам ҳастанд. Аввал, онҳо марзҳои ортогоналиро дӯст медоранд: ҳамаи тақсимот ба яке аз меҳварҳо амудӣ аст. Аз ҳамин сабаб ба самти ҷойгиршавии додаҳо ҳассосанд.
Масалан, расми 5.7 маҷмӯи содаи бо хати рост ҷудошавандаро нишон медиҳад. Дар чап дарахт онро осон тақсим мекунад. Дар рост, баъди 45° тоб додани додаҳо, марз беҳуда мураккаб мешавад. Ҳар ду модел маҷмӯи омӯзиширо комилан тасниф мекунанд, аммо эҳтимол модели рост хуб умумият намедиҳад.

Расми 5.7. Ҳассосият ба тобдиҳии маҷмӯи омӯзишӣ.
Як роҳи кам кардани мушкил аввал миқёсбандӣ ва баъд татбиқи таҳлили ҷузъҳои асосӣ (principal component analysis, PCA) аст. Онро дар боби 7 муфассал мебинем. Ҳоло кофист бидонед, ки PCA додаҳоро тавре тоб медиҳад, ки ҳамбастагии хусусиятҳо кам мешавад. Ин аксар вақт, вале на ҳамеша, кори дарахтро осон мекунад.
Пайплайни хурде месозем, ки додаҳоро миқёсбандӣ кунад ва бо PCA тоб диҳад, баъд DecisionTreeClassifier меомӯзонем. Расми 5.8 марзҳоро нишон медиҳад. Тобдиҳӣ имкон медиҳад танҳо бо хусусияти z₁, ки функсияи хаттии дарозӣ ва паҳноии аслии гулбарг аст, додаҳо хуб тақсим шаванд. Рамз:
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
pca_pipeline = make_pipeline(StandardScaler(), PCA())
X_iris_rotated = pca_pipeline.fit_transform(X_iris)
tree_clf_pca = DecisionTreeClassifier(max_depth=2, random_state=42)
tree_clf_pca.fit(X_iris_rotated, y_iris)
Маслиҳат. Ҳар ду синфи
DecisionTreeClassifierваDecisionTreeRegressorқиматҳои гумшударо мустақиман дастгирӣ мекунанд; пуркунандаи алоҳида лозим нест.

Расми 5.8. Марзҳои қарори дарахт дар додаҳои iris-и миқёсбандишуда ва бо PCA тобдодашуда.
Дарахтҳои қарор парокандагии баланд доранд
Умуман, мушкили асосӣ парокандагии баланд (high variance) аст: тағйироти хурди додаҳо ё гиперпараметрҳо моделҳои хеле гуногун дода метавонад. Азбаски алгоритми омӯзиши Scikit-Learn стохастикӣ аст, ҳатто бозомӯзии ҳамон дарахт бо айнан ҳамон додаҳо метавонад модели хеле дигар диҳад, мисли расми 5.9, агар random_state-ро муайян накунед. Он ба дарахти пешинаи расми 5.2 тамоман монанд нест.

Расми 5.9. Бозомӯзии ҳамон модел дар ҳамон додаҳо метавонад модели хеле дигар диҳад.
Хушбахтона, бо миёна гирифтани пешгӯиҳои дарахтҳои зиёд парокандагиро хеле кам кардан мумкин аст. Чунин ансамбли дарахтҳо ҷангали тасодуфӣ (random forest) ном дорад ва яке аз навъҳои тавонотарини моделҳост. Дар боби оянда онро мебинед.

Барномасозӣ
Олами Афсонаҳо
Ахбор