- Стабло одлучивања је а Техника учења под надзором који се може користити и за проблеме класификације и за проблеме регресије, али углавном је пожељнији за решавање проблема класификације. То је класификатор са структуром дрвета, где унутрашњи чворови представљају карактеристике скупа података, гране представљају правила одлучивања и сваки листни чвор представља исход.
- У стаблу одлучивања постоје два чвора, а то су Чвор одлуке и Леаф Ноде. Чворови одлуке се користе за доношење било које одлуке и имају више грана, док су листови чворови излаз тих одлука и не садрже даље гране.
- Одлуке или тест се врше на основу карактеристика датог скупа података.
- Зове се стабло одлучивања јер, слично дрвету, почиње са коренским чвором, који се шири на даље гране и конструише структуру налик стаблу.
- Да бисмо направили дрво, користимо ЦАРТ алгоритам, који стоји за Алгоритам стабла класификације и регресије.
- Стабло одлучивања једноставно поставља питање и на основу одговора (да/не) даље дели стабло на подстабла.
- Дијаграм испод објашњава општу структуру стабла одлучивања:
Напомена: Стабло одлучивања може да садржи категоричке податке (ДА/НЕ) као и нумеричке податке.
Зашто користити стабла одлучивања?
Постоје различити алгоритми у машинском учењу, тако да је одабир најбољег алгоритма за дати скуп података и проблем главна тачка коју треба запамтити приликом креирања модела машинског учења. У наставку су наведена два разлога за коришћење стабла одлучивања:
- Дрвеће одлучивања обично опонаша способност људског размишљања док доноси одлуку, тако да је лако разумети.
- Логика иза стабла одлучивања може се лако разумети јер показује структуру налик стаблу.
Терминологије стабла одлука
Како функционише алгоритам стабла одлучивања?
дереференцинг показивач ц
У стаблу одлучивања, за предвиђање класе датог скупа података, алгоритам почиње од коренског чвора стабла. Овај алгоритам упоређује вредности роот атрибута са атрибутом записа (стварног скупа података) и на основу поређења прати грану и скаче на следећи чвор.
За следећи чвор, алгоритам поново упоређује вредност атрибута са другим подчворовима и креће даље. Наставља процес све док не дође до лисног чвора дрвета. Комплетан процес се може боље разумети коришћењем следећег алгоритма:
Пример: Претпоставимо да постоји кандидат који има понуду за посао и жели да одлучи да ли да прихвати понуду или не. Дакле, да би се решио овај проблем, стабло одлучивања почиње са коренским чвором (атрибут плате од стране АСМ-а). Основни чвор се даље дели на следећи чвор одлуке (удаљеност од канцеларије) и један лисни чвор на основу одговарајућих ознака. Следећи чвор одлучивања се даље дели на један чвор одлучивања (Цаб фацилити) и један лисни чвор. Коначно, чвор одлуке се дели на два лисна чвора (Прихваћене понуде и Одбијена понуда). Размотрите дијаграм испод:
Мере избора атрибута
Приликом имплементације стабла одлучивања, главно питање се јавља како одабрати најбољи атрибут за основни чвор и за подчворове. Дакле, за решавање таквих проблема постоји техника која се зове као Мера избора атрибута или АСМ. Овим мерењем можемо лако изабрати најбољи атрибут за чворове дрвета. Постоје две популарне технике за АСМ, а то су:
1. Добивање информација:
- Добитак информација је мерење промена ентропије након сегментације скупа података на основу атрибута.
- Израчунава колико информација нам функција пружа о класи.
- Према вредности добити информације, делимо чвор и градимо стабло одлучивања.
- Алгоритам стабла одлучивања увек покушава да максимизира вредност добити информације, а чвор/атрибут који има највећи добитак информација се први дели. Може се израчунати користећи следећу формулу:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Ентропија: Ентропија је метрика за мерење нечистоће у датом атрибуту. Он одређује случајност у подацима. Ентропија се може израчунати као:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Где,
2. Гини индекс:
- Гини индекс је мера нечистоће или чистоће која се користи приликом креирања стабла одлучивања у алгоритму ЦАРТ(Цлассифицатион анд Регрессион Трее).
- Треба дати предност атрибуту са ниским Гини индексом у поређењу са високим Гини индексом.
- Он само ствара бинарне поделе, а ЦАРТ алгоритам користи Гини индекс за креирање бинарних подела.
- Гини индекс се може израчунати користећи следећу формулу:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Обрезивање: добијање стабла оптималне одлуке
Обрезивање је процес брисања непотребних чворова са дрвета како би се добило оптимално стабло одлучивања.
Превелико стабло повећава ризик од преоптерећења, а мало дрво можда неће обухватити све важне карактеристике скупа података. Стога је техника која смањује величину стабла учења без смањења тачности позната као обрезивање. Постоје углавном две врсте дрвета орезивање коришћена технологија:
Предности стабла одлучивања
- Лако је разумети јер прати исти процес који човек прати док доноси било коју одлуку у стварном животу.
- Може бити веома корисно за решавање проблема везаних за одлучивање.
- Помаже размишљање о свим могућим исходима за проблем.
- Постоји мањи захтев за чишћење података у поређењу са другим алгоритмима.
Недостаци стабла одлучивања
- Стабло одлучивања садржи много слојева, што га чини сложеним.
- Можда има проблем са прекомерним уградњом, који се може решити помоћу Алгоритам случајне шуме.
- За више ознака класа, сложеност израчунавања стабла одлучивања може се повећати.
Питхон имплементација стабла одлучивања
Сада ћемо имплементирати стабло одлучивања користећи Питхон. За ово ћемо користити скуп података ' усер_дата.цсв ,' које смо користили у претходним моделима класификације. Коришћењем истог скупа података, можемо упоредити класификатор стабла одлука са другим моделима класификације као што су КНН СВМ, Логистичка регресија итд.
Кораци ће такође остати исти, који су дати у наставку:
1. Корак претходне обраде података:
Испод је код за корак пре обраде:
# importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv('user_data.csv') #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test)
У горњем коду смо претходно обрадили податке. Где смо учитали скуп података, који је дат као:
2. Подешавање алгоритма стабла одлучивања у скуп за обуку
Сада ћемо модел уклопити у сет за обуку. За ово ћемо увести ДецисионТрееЦлассифиер разред из склеарн.трее библиотека. Испод је код за то:
#Fitting Decision Tree classifier to the training set From sklearn.tree import DecisionTreeClassifier classifier= DecisionTreeClassifier(criterion='entropy', random_state=0) classifier.fit(x_train, y_train)
У горњем коду смо креирали објекат класификатора, у који смо пренели два главна параметра;
Испод је излаз за ово:
додавање стринга у јава
Out[8]: DecisionTreeClassifier(class_weight=None, criterion='entropy', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort=False, random_state=0, splitter='best')
3. Предвиђање резултата теста
Сада ћемо предвидети резултат тестног скупа. Направићемо нови вектор предвиђања и_пред. Испод је код за то:
#Predicting the test set result y_pred= classifier.predict(x_test)
Излаз:
На доњој слици излаза, дати су предвиђени излаз и стварни тестни излаз. Јасно можемо видети да постоје неке вредности у вектору предвиђања, које се разликују од вредности реалног вектора. Ово су грешке предвиђања.
4. Тестирајте тачност резултата (Креирање матрице конфузије)
У горњем излазу смо видели да је било неких нетачних предвиђања, тако да ако желимо да знамо број тачних и нетачних предвиђања, морамо да користимо матрицу конфузије. Испод је код за то:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Излаз:
На горњој излазној слици можемо видети матрицу конфузије која има 6+3= 9 нетачних предвиђања и 62+29=91 тачна предвиђања. Стога можемо рећи да је у поређењу са другим моделима класификације класификатор Децисион Трее направио добро предвиђање.
5. Визуелизација резултата скупа обуке:
Овде ћемо визуелизовати резултат скупа за обуку. Да бисмо визуелизовали резултат скупа за обуку, нацртаћемо график за класификатор стабла одлука. Класификатор ће предвидети да или не за кориснике који су купили или нису купили СУВ аутомобил као што смо то урадили у Логистичкој регресији. Испод је код за то:
#Visulaizing the trianing set result from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Излаз:
Горе наведени излаз је потпуно другачији од осталих модела класификације. Има и вертикалне и хоризонталне линије које деле скуп података према старости и процењеној варијабли плате.
Као што видимо, дрво покушава да ухвати сваки скуп података, што је случај прекомерног прилагођавања.
6. Визуелизација резултата тестног скупа:
Визуелизација резултата тестног скупа биће слична визуелизацији скупа за обуку, осим што ће сет за обуку бити замењен тестним скупом.
#Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap(('purple','green' ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) fori, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap(('purple', 'green'))(i), label = j) mtp.title('Decision Tree Algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Излаз:
Као што видимо на горњој слици, постоје неке зелене тачке података унутар љубичастог региона и обрнуто. Дакле, ово су нетачна предвиђања о којима смо расправљали у матрици конфузије.