- Дървото на решенията е a Техника за контролирано обучение който може да се използва както за проблеми с класификация, така и за регресия, но най-вече се предпочита за решаване на проблеми с класификация. Това е дървовидно структуриран класификатор, където вътрешните възли представляват характеристиките на набор от данни, клоновете представляват правилата за вземане на решения и всеки листов възел представлява резултата.
- В дървото на решенията има два възела, които са Възел за решение и Листен възел. Възлите за решения се използват за вземане на всяко решение и имат множество разклонения, докато листовите възли са резултат от тези решения и не съдържат никакви допълнителни разклонения.
- Решенията или тестът се извършват въз основа на характеристиките на дадения набор от данни.
- Нарича се дърво на решенията, защото, подобно на дървото, започва с коренния възел, който се разширява върху допълнителни клонове и изгражда дървоподобна структура.
- За да изградим дърво, използваме CART алгоритъм, което означава Алгоритъм за класификация и регресионно дърво.
- Дървото на решенията просто задава въпрос и въз основа на отговора (Да/Не), допълнително разделя дървото на поддървета.
- Диаграмата по-долу обяснява общата структура на дървото на решенията:
Забележка: Дървото на решенията може да съдържа категорични данни (ДА/НЕ), както и числови данни.
Защо да използвате дървета на решенията?
Има различни алгоритми в машинното обучение, така че изборът на най-добрия алгоритъм за даден набор от данни и проблем е основната точка, която трябва да запомните, докато създавате модел на машинно обучение. По-долу са изброени двете причини за използване на дървото на решенията:
- Дърветата на решенията обикновено имитират човешката мисловна способност, докато вземате решение, така че е лесно за разбиране.
- Логиката зад дървото на решенията може лесно да бъде разбрана, защото показва дървовидна структура.
Терминологии на дървото на решенията
Как работи алгоритъмът на дървото на решенията?
В дървото на решенията, за прогнозиране на класа на даден набор от данни, алгоритъмът започва от коренния възел на дървото. Този алгоритъм сравнява стойностите на коренния атрибут с атрибута на запис (реален набор от данни) и въз основа на сравнението следва разклонението и прескача към следващия възел.
За следващия възел алгоритъмът отново сравнява стойността на атрибута с другите под-възли и продължава напред. Той продължава процеса, докато достигне листовия възел на дървото. Пълният процес може да бъде разбран по-добре с помощта на алгоритъма по-долу:
Пример: Да предположим, че има кандидат, който има предложение за работа и иска да реши дали да приеме предложението или не. И така, за да се реши този проблем, дървото на решенията започва с основния възел (атрибут на заплата от ASM). Основният възел се разделя допълнително на следващия възел за решение (разстояние от офиса) и един листов възел въз основа на съответните етикети. Следващият възел за вземане на решения допълнително се разделя на един възел за вземане на решения (съоръжение за кабина) и един листов възел. Накрая възелът за решение се разделя на два листови възела (Приети оферти и Отхвърлена оферта). Разгледайте диаграмата по-долу:
'abc's in numbers'
Мерки за избор на атрибути
Докато внедрявате дърво на решенията, възниква основният проблем как да изберете най-добрия атрибут за основния възел и за подвъзлите. И така, за решаване на такива проблеми има техника, която се нарича as Мярка за избор на атрибут или ASM. Чрез това измерване можем лесно да изберем най-добрия атрибут за възлите на дървото. Има две популярни техники за ASM, които са:
1. Придобиване на информация:
- Придобиването на информация е измерването на промените в ентропията след сегментирането на набор от данни въз основа на атрибут.
- Той изчислява колко информация ни предоставя дадена функция за даден клас.
- Според стойността на придобитата информация, ние разделяме възела и изграждаме дървото на решенията.
- Алгоритъмът на дървото на решенията винаги се опитва да максимизира стойността на придобиването на информация и първо се разделя възел/атрибут, който има най-висока печалба на информация. Може да се изчисли по следната формула:
Information Gain= Entropy(S)- [(Weighted Avg) *Entropy(each feature)
Ентропия: Ентропията е метрика за измерване на примесите в даден атрибут. Той определя произволността на данните. Ентропията може да се изчисли като:
Entropy(s)= -P(yes)log2 P(yes)- P(no) log2 P(no)
Където,
2. Индекс Джини:
- Индексът на Джини е мярка за нечистота или чистота, използвана при създаването на дърво на решенията в алгоритъма CART (Дърво за класификация и регресия).
- Атрибут с нисък индекс Джини трябва да бъде предпочитан в сравнение с висок индекс Джини.
- Той създава само двоични разделяния, а алгоритъмът CART използва индекса Gini за създаване на двоични разделяния.
- Индексът на Джини може да се изчисли по следната формула:
Gini Index= 1- ∑<sub>j</sub>P<sub>j</sub><sup>2</sup>
Подрязване: Получаване на дърво за оптимално решение
Подрязването е процес на изтриване на ненужните възли от дърво, за да се получи оптималното дърво на решенията.
Прекалено голямото дърво увеличава риска от пренастройване, а малко дърво може да не улови всички важни характеристики на набора от данни. Следователно, техника, която намалява размера на дървото за обучение, без да намалява точността, е известна като подрязване. Има основно два вида дърво резитба използвана технология:
Предимства на дървото на решенията
- Лесно е за разбиране, тъй като следва същия процес, който човек следва, докато взема решение в реалния живот.
- Може да бъде много полезно за решаване на проблеми, свързани с вземане на решения.
- Помага да се мисли за всички възможни резултати за даден проблем.
- Има по-малко изискване за почистване на данни в сравнение с други алгоритми.
Недостатъци на дървото на решенията
- Дървото на решенията съдържа много слоеве, което го прави сложно.
- Възможно е да има проблем с пренастройката, който може да бъде решен с помощта на Алгоритъм на произволна гора.
- За повече етикети на клас изчислителната сложност на дървото на решенията може да се увеличи.
Внедряване на Python на дървото на решенията
Сега ще приложим дървото на решенията с помощта на Python. За целта ще използваме набора от данни „ потребителски_данни.csv ,' който сме използвали в предишни модели на класификация. Като използваме същия набор от данни, можем да сравним класификатора на дървото на решенията с други модели на класификация, като напр KNN SVM, Логистична регресия и др.
Пийт Дейвидсън националност
Стъпките също ще останат същите, които са дадени по-долу:
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. Монтиране на алгоритъм на дървото на решенията към комплекта за обучение
Сега ще монтираме модела към комплекта за обучение. За целта ще импортираме DecisionTreeClassifier клас от sklearn.дърво библиотека. По-долу е кодът за него:
jquery родител
#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. Прогнозиране на резултата от теста
Сега ще предвидим резултата от тестовия набор. Ще създадем нов вектор за прогнозиране y_pred. По-долу е кодът за него:
#Predicting the test set result y_pred= classifier.predict(x_test)
Изход:
В изходното изображение по-долу са дадени прогнозираният изход и реалният изход от теста. Можем ясно да видим, че има някои стойности в прогнозния вектор, които са различни от реалните векторни стойности. Това са грешки в прогнозите.
конвертиране на низ в int
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. Визуализиране на резултата от тренировъчния набор:
Тук ще визуализираме резултата от тренировъчния набор. За да визуализираме резултата от набора за обучение, ще начертаем графика за класификатора на дървото на решенията. Класификаторът ще предвиди „да“ или „не“ за потребителите, които са закупили или не са закупили автомобила SUV, както направихме в логистичната регресия. По-долу е кодът за него:
#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. Визуализиране на резултата от тестовия набор:
Визуализацията на резултата от тестовия набор ще бъде подобна на визуализацията на тренировъчния набор, с изключение на това, че тренировъчният набор ще бъде заменен с тестовия набор.
генератор на случайни числа в c
#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()
Изход:
Както можем да видим на изображението по-горе, има някои зелени точки от данни в лилавата област и обратно. И така, това са неправилните прогнози, които обсъдихме в матрицата на объркването.