Poprawa wydajności modeli ML

Poprawa wydajności z zespołami

Zespoły mogą zwiększyć wyniki uczenia maszynowego dzięki połączeniu kilku modeli. Zasadniczo modele zespołowe składają się z kilku indywidualnie szkolonych, nadzorowanych modeli uczenia się, a ich wyniki są łączone na różne sposoby, aby osiągnąć lepszą wydajność predykcyjną w porównaniu z pojedynczym modelem. Metody zespołowe można podzielić na dwie następujące grupy -

Sekwencyjne metody zespołowe

Jak sama nazwa wskazuje, w tego rodzaju metodach zespołowych podstawowe osoby uczące się są generowane sekwencyjnie. Motywacją takich metod jest wykorzystanie zależności między podstawowymi uczniami.

Metody zespołowe równoległe

Jak sama nazwa wskazuje, w tego rodzaju metodach zespołowych podstawowe osoby uczące się są generowane równolegle. Motywacją do stosowania takich metod jest wykorzystywanie niezależności wśród uczniów podstawowych.

Metody uczenia się w zespole

Poniżej przedstawiono najpopularniejsze metody uczenia się zespołowego, tj. Metody łączenia prognoz z różnych modeli -

Parcianka

Termin „pakowanie” jest również znany jako agregacja bootstrap. W metodach zbiorczych model zespolony próbuje poprawić dokładność przewidywania i zmniejszyć wariancję modelu poprzez łączenie prognoz poszczególnych modeli trenowanych na losowo generowanych próbkach szkoleniowych. Ostateczna prognoza modelu zespołowego zostanie podana poprzez obliczenie średniej wszystkich prognoz z poszczególnych estymatorów. Jednym z najlepszych przykładów metod workowania są losowe lasy.

Wzmocnienie

W metodzie wspomagającej główną zasadą budowania modelu zespołowego jest budowanie go przyrostowo poprzez sekwencyjne szkolenie każdego estymatora modelu podstawowego. Jak sama nazwa wskazuje, w zasadzie składa się z kilku tygodniowych podstawowych uczniów, przeszkolonych sekwencyjnie na wielu iteracjach danych szkoleniowych, aby zbudować potężny zespół. Podczas szkolenia uczniów bazujących na tygodniach, wyższe wagi są przypisywane tym uczniom, którzy zostali wcześniej błędnie sklasyfikowani. Przykładem metody boostingu jest AdaBoost.

Głosowanie

W tym zespolonym modelu uczenia się budowanych jest wiele modeli różnych typów, a niektóre proste statystyki, takie jak obliczanie średniej lub mediany itp., Są wykorzystywane do łączenia prognoz. Ta prognoza posłuży jako dodatkowe dane wejściowe do treningu, aby dokonać ostatecznej prognozy.

Algorytmy zespołu pakowania

Poniżej przedstawiono trzy algorytmy zestawu workowania -

Drzewo decyzyjne w workach

Ponieważ wiemy, że metody grupowania zbiorów dobrze współpracują z algorytmami o dużej wariancji i pod tym względem najlepszym z nich jest algorytm drzewa decyzyjnego. W poniższym przepisie Pythona zamierzamy zbudować złożony model drzewa decyzyjnego w workach, używając funkcji sklearn BaggingClassifier z DecisionTreeClasifier (algorytmem drzew klasyfikacyjnych i regresyjnych) na zbiorze danych dotyczących cukrzycy Indian Pima.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak to zrobiliśmy w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()

Musimy podać liczbę drzew, które zamierzamy zbudować. Tutaj budujemy 150 drzew -

num_trees = 150

Następnie zbuduj model za pomocą następującego skryptu -

model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)

Oblicz i wydrukuj wynik w następujący sposób -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7733766233766234

Powyższe dane wyjściowe pokazują, że otrzymaliśmy około 77% dokładności naszego modelu klasyfikatora z workowanym drzewem decyzyjnym.

Losowy las

Jest to rozszerzenie zapakowanych drzew decyzyjnych. W przypadku klasyfikatorów indywidualnych pobierane są próbki zbioru uczącego z zamianą, ale drzewa są konstruowane w taki sposób, aby zmniejszyć korelację między nimi. Rozważa się również losowy podzbiór cech, aby wybrać każdy punkt podziału, zamiast chciwie wybierać najlepszy punkt podziału w konstrukcji każdego drzewa.

W poniższym przepisie Pythona zamierzamy zbudować losowy model zespołu lasu z wykorzystaniem klasy sklearn RandomForestClassifier w zbiorze danych o cukrzycy Pima Indians.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Musimy podać liczbę drzew, które zamierzamy zbudować. Tutaj budujemy 150 drzew z punktami podziału wybranymi z 5 cech -

num_trees = 150
max_features = 5

Następnie zbuduj model za pomocą następującego skryptu -

model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)

Oblicz i wydrukuj wynik w następujący sposób -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7629357484620642

Powyższe dane wyjściowe pokazują, że otrzymaliśmy około 76% dokładności naszego workowego modelu losowego klasyfikatora lasu.

Dodatkowe drzewa

Jest to kolejne rozszerzenie metody zbiorczego drzewa decyzyjnego w workach. W tej metodzie losowe drzewa są konstruowane z próbek zbioru uczącego.

W poniższym przepisie Pythona zamierzamy zbudować dodatkowy model zespołu drzewa przy użyciu klasy sklearn ExtraTreesClassifier ze zbioru danych o cukrzycy Pima Indians.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

seed = 7
kfold = KFold(n_splits=10, random_state=seed)

Musimy podać liczbę drzew, które zamierzamy zbudować. Tutaj budujemy 150 drzew z punktami podziału wybranymi z 5 cech -

num_trees = 150
max_features = 5

Następnie zbuduj model za pomocą następującego skryptu -

model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)

Oblicz i wydrukuj wynik w następujący sposób -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7551435406698566

Powyższe dane wyjściowe pokazują, że otrzymaliśmy około 75,5% dokładności naszego modelu klasyfikatora dodatkowych drzew w workach.

Zwiększanie algorytmów zespołu

Poniżej przedstawiono dwa najpopularniejsze algorytmy wzmacniające zespoły -

AdaBoost

Jest to jeden z najbardziej skutecznych algorytmów wzmacniających. Głównym kluczem tego algorytmu jest sposób, w jaki nadają wagi instancjom w zbiorze danych. Z tego powodu algorytm musi zwracać mniejszą uwagę na instancje podczas konstruowania kolejnych modeli.

W poniższym przepisie Pythona zamierzamy zbudować model zespołu Ada Boost do klasyfikacji przy użyciu klasy sklearn klasy AdaBoostClassifier w zbiorze danych o cukrzycy Indianie Pima.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Musimy podać liczbę drzew, które zamierzamy zbudować. Tutaj budujemy 150 drzew z punktami podziału wybranymi z 5 cech -

num_trees = 50

Następnie zbuduj model za pomocą następującego skryptu -

model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)

Oblicz i wydrukuj wynik w następujący sposób -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7539473684210527

Powyższe dane wyjściowe pokazują, że otrzymaliśmy około 75% dokładności naszego modelu zespołu klasyfikatorów AdaBoost.

Stochastic Gradient Boosting

Nazywa się to również Gradient Boosting Machines. W poniższym przepisie Pythona zamierzamy zbudować model Stochastic Gradient Boostingensemble do klasyfikacji przy użyciu klasy Sklearn GradientBoostingClassifier w zbiorze danych o cukrzycy Pima Indians.

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

seed = 5
kfold = KFold(n_splits=10, random_state=seed)

Musimy podać liczbę drzew, które zamierzamy zbudować. Tutaj budujemy 150 drzew z punktami podziału wybranymi z 5 cech -

num_trees = 50

Następnie zbuduj model za pomocą następującego skryptu -

model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)

Oblicz i wydrukuj wynik w następujący sposób -

results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7746582365003418

Powyższe dane wyjściowe pokazują, że otrzymaliśmy około 77,5% dokładności naszego modelu zespołowego klasyfikatora Gradient Boosting.

Algorytmy zespołu głosowania

Jak już wspomniano, głosowanie najpierw tworzy dwa lub więcej samodzielnych modeli ze szkoleniowego zestawu danych, a następnie klasyfikator z głosowaniem zawinie model wraz z obliczeniem średniej prognoz dla podmodelu, gdy będą potrzebne nowe dane.

W poniższym przepisie Pythona zamierzamy zbudować model zespołu Voting do klasyfikacji przy użyciu klasy sklearn klasy VotingClassifier w zbiorze danych dotyczących cukrzycy Indianie Pima. Łączymy razem prognozy regresji logistycznej, klasyfikatora drzewa decyzyjnego i SVM w celu rozwiązania problemu klasyfikacyjnego w następujący sposób -

Najpierw zaimportuj wymagane pakiety w następujący sposób -

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

Teraz musimy załadować zestaw danych dotyczących cukrzycy Pima, tak jak w poprzednich przykładach -

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

Następnie podaj dane wejściowe do 10-krotnej weryfikacji krzyżowej w następujący sposób -

kfold = KFold(n_splits=10, random_state=7)

Następnie musimy stworzyć pod-modele w następujący sposób -

estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))

Teraz utwórz model zespołu z głosowaniem, łącząc przewidywania z utworzonych powyżej modeli podrzędnych.

ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())

Wynik

0.7382262474367738

Powyższe dane wyjściowe pokazują, że uzyskaliśmy około 74% dokładności naszego modelu zespołu klasyfikatora głosowania.