Scikit Learn - Drzewa decyzyjne
W tym rozdziale poznamy metodę uczenia się w Sklearn nazywaną drzewami decyzyjnymi.
Decisions tress (DT) to najpotężniejsza nieparametryczna metoda nadzorowanego uczenia się. Mogą być używane do zadań klasyfikacyjnych i regresyjnych. Głównym celem DT jest stworzenie modelu przewidującego docelową wartość zmiennej poprzez poznanie prostych reguł decyzyjnych wywnioskowanych z cech danych. Drzewa decyzyjne mają dwie główne jednostki; jeden to węzeł główny, w którym dane są podzielone, a drugi to węzły decyzyjne lub liście, w których otrzymaliśmy ostateczne dane wyjściowe.
Algorytmy drzewa decyzyjnego
Poniżej opisano różne algorytmy drzew decyzyjnych -
ID3
Został opracowany przez Rossa Quinlana w 1986 roku. Nazywa się go również Iteratywnym dychotomizerem 3. Głównym celem tego algorytmu jest znalezienie tych cech kategorialnych dla każdego węzła, które przyniosą największe zyski informacyjne dla celów kategorialnych.
Pozwala rozwinąć drzewo do maksymalnego rozmiaru, a następnie, aby poprawić zdolność drzewa do niewidocznych danych, stosuje krok przycinania. Wynikiem tego algorytmu byłoby drzewo wielościeżkowe.
C4.5
Jest następcą ID3 i dynamicznie definiuje dyskretny atrybut, który dzieli ciągłą wartość atrybutu na dyskretny zestaw interwałów. To jest powód, dla którego usunął ograniczenie funkcji kategorycznych. Konwertuje wyuczone drzewo ID3 na zestawy reguł „IF-THEN”.
Aby określić kolejność, w jakiej te reguły powinny być stosowane, najpierw zostanie oceniona dokładność każdej reguły.
C5.0
Działa podobnie jak C4.5, ale zużywa mniej pamięci i tworzy mniejsze zestawy reguł. Jest dokładniejszy niż C4.5.
WÓZEK
Nazywa się to algorytmem drzew klasyfikacyjnych i regresyjnych. Zasadniczo generuje binarne podziały za pomocą funkcji i progu, które dają największy przyrost informacji w każdym węźle (zwanym indeksem Giniego).
Jednorodność zależy od indeksu Giniego, im wyższa wartość indeksu Giniego, tym większa byłaby jednorodność. Jest podobny do algorytmu C4.5, z tą różnicą, że nie oblicza zestawów reguł i nie obsługuje również numerycznych zmiennych docelowych (regresja).
Klasyfikacja za pomocą drzew decyzyjnych
W tym przypadku zmienne decyzyjne są jakościowe.
Sklearn Module - Biblioteka Scikit-learn zawiera nazwę modułu DecisionTreeClassifier do wykonywania klasyfikacji wieloklasowej na zbiorze danych.
Parametry
Poniższa tabela zawiera parametry używane przez sklearn.tree.DecisionTreeClassifier moduł -
Sr.No | Parametr i opis |
---|---|
1 | criterion - ciąg, opcjonalnie domyślnie = „gini” Reprezentuje funkcję mierzenia jakości podziału. Obsługiwane kryteria to „gini” i „entropia”. Domyślnie jest to gini, które oznacza nieczystość Giniego, podczas gdy entropia służy do uzyskiwania informacji. |
2 | splitter - string, opcjonalne domyślne = „best” Informuje model, którą strategię od „najlepszej” lub „losowej”, aby wybrać podział w każdym węźle. |
3 | max_depth - int lub None, opcjonalnie domyślnie = None Ten parametr decyduje o maksymalnej głębokości drzewa. Wartość domyślna to None, co oznacza, że węzły będą się rozszerzać, dopóki wszystkie liście nie będą czyste lub dopóki wszystkie liście nie będą zawierać mniej niż min_smaples_split próbek. |
4 | min_samples_split - int, float, opcjonalnie default = 2 Ten parametr zapewnia minimalną liczbę próbek wymaganych do podzielenia węzła wewnętrznego. |
5 | min_samples_leaf - int, float, opcjonalnie domyślnie = 1 Ten parametr zapewnia minimalną liczbę próbek, które muszą znajdować się w węźle liścia. |
6 | min_weight_fraction_leaf - float, opcjonalnie domyślnie = 0. Z tym parametrem model otrzyma minimalny ważony ułamek sumy wag wymaganych, aby znajdować się w węźle liścia. |
7 | max_features - int, float, string lub None, opcjonalnie default = None Daje modelowi liczbę funkcji, które należy wziąć pod uwagę przy poszukiwaniu najlepszego podziału. |
8 | random_state - int, instancja RandomState lub None, opcjonalne, default = none Ten parametr reprezentuje ziarno wygenerowanej liczby pseudolosowej, która jest używana podczas tasowania danych. Poniżej znajdują się opcje -
|
9 | max_leaf_nodes - int lub None, opcjonalnie domyślnie = None Ten parametr pozwoli wyhodować drzewo z max_leaf_nodes w najlepszy sposób. Wartością domyślną jest brak, co oznacza, że byłaby nieograniczona liczba węzłów liści. |
10 | min_impurity_decrease - float, opcjonalnie domyślnie = 0. Ta wartość działa jako kryterium podziału węzła, ponieważ model podzieli węzeł, jeśli ten podział spowoduje spadek zanieczyszczenia większy lub równy min_impurity_decrease value. |
11 | min_impurity_split - float, domyślnie = 1e-7 Stanowi próg wczesnego zatrzymania wzrostu drzew. |
12 | class_weight - dict, lista dykt, „zrównoważony” lub brak, domyślnie = brak Reprezentuje wagi związane z klasami. Formularz to {class_label: weight}. Jeśli użyjemy opcji domyślnej, oznacza to, że wszystkie klasy mają mieć wagę jeden. Z drugiej strony, jeśli wybierzeszclass_weight: balanced, użyje wartości y do automatycznego dostosowania wag. |
13 | presort - bool, opcjonalne domyślne = False Informuje model, czy należy wstępnie posortować dane, aby przyspieszyć znajdowanie najlepszych podziałów dopasowania. Wartość domyślna to false, ale ustawienie true może spowolnić proces uczenia. |
Atrybuty
Poniższa tabela zawiera atrybuty używane przez sklearn.tree.DecisionTreeClassifier moduł -
Sr.No | Parametr i opis |
---|---|
1 | feature_importances_ - tablica kształtów = [n_features] Ten atrybut zwróci ważność funkcji. |
2 | classes_: - tablica shape = [n_classes] lub lista takich tablic Reprezentuje etykiety klas, tj. Problem z pojedynczym wyjściem lub listę tablic etykiet klas, tj. Problem z wieloma wyjściami. |
3 | max_features_ - wew Reprezentuje wydedukowaną wartość parametru max_features. |
4 | n_classes_ - int lub list Reprezentuje liczbę klas, tj. Problem z jednym wyjściem lub listę klas dla każdego wyjścia, tj. Problem z wieloma wyjściami. |
5 | n_features_ - wew Podaje liczbę features kiedy wykonywana jest metoda fit (). |
6 | n_outputs_ - wew Podaje liczbę outputs kiedy wykonywana jest metoda fit (). |
Metody
Poniższa tabela zawiera metody używane przez sklearn.tree.DecisionTreeClassifier moduł -
Sr.No | Parametr i opis |
---|---|
1 | apply(self, X [, check_input]) Ta metoda zwróci indeks liścia. |
2 | decision_path(self, X [, check_input]) Jak sama nazwa wskazuje, ta metoda zwróci ścieżkę decyzji w drzewie |
3 | fit(self, X, y [, sample_weight,…]) fit () zbuduje klasyfikator drzewa decyzyjnego z podanego zbioru uczącego (X, y). |
4 | get_depth(samego siebie) Jak sama nazwa wskazuje, ta metoda zwróci głębokość drzewa decyzyjnego |
5 | get_n_leaves(samego siebie) Jak sama nazwa wskazuje, ta metoda zwróci liczbę liści drzewa decyzyjnego. |
6 | get_params(ja [, głęboki]) Możemy użyć tej metody, aby uzyskać parametry do estymatora. |
7 | predict(self, X [, check_input]) Przewiduje wartość klasy dla X. |
8 | predict_log_proba(ja, X) Przewiduje logarytm prawdopodobieństwa klas dostarczonych przez nas próbek wejściowych, X. |
9 | predict_proba(self, X [, check_input]) Przewiduje prawdopodobieństwa klas dostarczonych przez nas próbek wejściowych, X. |
10 | score(self, X, y [, sample_weight]) Jak sama nazwa wskazuje, metoda score () zwróci średnią dokładność danych testowych i etykiet. |
11 | set_params(własne, \ * \ * parametry) Tą metodą możemy ustawić parametry estymatora. |
Przykład implementacji
Poniższy skrypt Pythona będzie używał sklearn.tree.DecisionTreeClassifier moduł do skonstruowania klasyfikatora do przewidywania mężczyzny lub kobiety na podstawie naszego zbioru danych zawierającego 25 próbek i dwie cechy, a mianowicie `` wysokość '' i `` długość włosów '' -
from sklearn import tree
from sklearn.model_selection import train_test_split
X=[[165,19],[175,32],[136,35],[174,65],[141,28],[176,15]
,[131,32],[166,6],[128,32],[179,10],[136,34],[186,2],[12
6,25],[176,28],[112,38],[169,9],[171,36],[116,25],[196,2
5], [196,38], [126,40], [197,20], [150,25], [140,32],[136,35]]
Y=['Man','Woman','Woman','Man','Woman','Man','Woman','Ma
n','Woman','Man','Woman','Man','Woman','Woman','Woman','
Man','Woman','Woman','Man', 'Woman', 'Woman', 'Man', 'Man', 'Woman', 'Woman']
data_feature_names = ['height','length of hair']
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.3, random_state = 1)
DTclf = tree.DecisionTreeClassifier()
DTclf = clf.fit(X,Y)
prediction = DTclf.predict([[135,29]])
print(prediction)
Wynik
['Woman']
Możemy również przewidzieć prawdopodobieństwo każdej klasy za pomocą następującej metody Python Predict_proba () w następujący sposób -
Przykład
prediction = DTclf.predict_proba([[135,29]])
print(prediction)
Wynik
[[0. 1.]]
Regresja z drzewami decyzyjnymi
W tym przypadku zmienne decyzyjne są ciągłe.
Sklearn Module - Biblioteka Scikit-learn zawiera nazwę modułu DecisionTreeRegressor do stosowania drzew decyzyjnych w problemach regresji.
Parametry
Parametry używane przez DecisionTreeRegressor są prawie takie same, jak te, które zostały użyte w programie DecisionTreeClassifiermoduł. Różnica polega na parametrze „kryterium”. DlaDecisionTreeRegressor moduły ‘criterion: string, opcjonalny parametr default = „mse” 'ma następujące wartości -
mse- Oznacza średni kwadrat błędu. Odpowiada redukcji wariancji jako kryterium wyboru cechy. Minimalizuje utratę L2 przy użyciu średniej z każdego węzła końcowego.
freidman_mse - Używa również błędu średniokwadratowego, ale z wynikiem poprawy Friedmana.
mae- Oznacza średni błąd bezwzględny. Minimalizuje utratę L1 przy użyciu mediany każdego węzła końcowego.
Inną różnicą jest to, że nie ma ‘class_weight’ parametr.
Atrybuty
Atrybuty DecisionTreeRegressor są również takie same jak te z DecisionTreeClassifiermoduł. Różnica polega na tym, że nie ma‘classes_’ i ‘n_classes_atrybuty.
Metody
Metody DecisionTreeRegressor są również takie same jak te z DecisionTreeClassifiermoduł. Różnica polega na tym, że nie ma‘predict_log_proba()’ i ‘predict_proba()’atrybuty.
Przykład implementacji
Metoda fit () w modelu regresji drzewa decyzyjnego przyjmuje zmiennoprzecinkowe wartości y. zobaczmy prosty przykład implementacji przy użyciuSklearn.tree.DecisionTreeRegressor -
from sklearn import tree
X = [[1, 1], [5, 5]]
y = [0.1, 1.5]
DTreg = tree.DecisionTreeRegressor()
DTreg = clf.fit(X, y)
Po dopasowaniu możemy użyć tego modelu regresji do prognozowania w następujący sposób -
DTreg.predict([[4, 5]])
Wynik
array([1.5])