Random Forest je populární algoritmus strojového učení, který patří k technice učení pod dohledem. Může být použit pro klasifikační i regresní problémy v ML. Vychází z konceptu souborové učení, což je proces kombinace více klasifikátorů k vyřešení složitého problému a ke zlepšení výkonu modelu.
Jak název napovídá, 'Random Forest je klasifikátor, který obsahuje řadu rozhodovacích stromů pro různé podmnožiny daného souboru dat a bere průměr ke zlepšení prediktivní přesnosti tohoto souboru dat.' Místo toho, aby se spoléhalo na jeden rozhodovací strom, náhodný les bere předpověď z každého stromu a na základě většinového hlasování předpovědí a předpovídá konečný výstup.
Větší počet stromů v lese vede k vyšší přesnosti a zabraňuje problémům s přesazováním.
java metody
Níže uvedený diagram vysvětluje fungování algoritmu Random Forest:
Poznámka: Abyste lépe porozuměli algoritmu Random Forest, měli byste znát algoritmus rozhodovacího stromu.
Předpoklady pro Random Forest
Vzhledem k tomu, že náhodná doménová struktura kombinuje více stromů k predikci třídy datové sady, je možné, že některé rozhodovací stromy mohou předpovídat správný výstup, zatímco jiné nikoli. Ale společně všechny stromy předpovídají správný výstup. Níže jsou proto uvedeny dva předpoklady pro lepší klasifikátor náhodného lesa:
- V proměnné funkce datové sady by měly být nějaké skutečné hodnoty, aby klasifikátor mohl předvídat přesné výsledky spíše než odhadovaný výsledek.
- Předpovědi z každého stromu musí mít velmi nízké korelace.
Proč používat Random Forest?
Níže jsou uvedeny některé body, které vysvětlují, proč bychom měli používat algoritmus Random Forest:
- Ve srovnání s jinými algoritmy trvá trénink méně času.
- Předpovídá výstup s vysokou přesností, a to i pro velký soubor dat, který běží efektivně.
- Dokáže také zachovat přesnost, když chybí velká část dat.
Jak funguje algoritmus Random Forest?
Random Forest funguje ve dvou fázích, první je vytvořit náhodnou doménovou strukturu kombinací N rozhodovacího stromu a druhá je vytvářet předpovědi pro každý strom vytvořený v první fázi.
Pracovní proces lze vysvětlit níže uvedenými kroky a diagramem:
Krok 1: Vyberte náhodných K datových bodů z trénovací sady.
Krok 2: Sestavte rozhodovací stromy spojené s vybranými datovými body (podmnožiny).
Krok 3: Vyberte počet N pro rozhodovací stromy, které chcete postavit.
Krok 4: Opakujte kroky 1 a 2.
bash pro smyčku 1 až 10
Krok 5: Pro nové datové body najděte předpovědi každého rozhodovacího stromu a přiřaďte nové datové body kategorii, která získá většinu hlasů.
Fungování algoritmu lze lépe pochopit na níže uvedeném příkladu:
Příklad: Předpokládejme, že existuje datová sada, která obsahuje více obrázků ovoce. Tato datová sada je tedy přiřazena náhodnému klasifikátoru lesa. Datová sada je rozdělena do podmnožin a dána každému rozhodovacímu stromu. Během trénovací fáze každý rozhodovací strom vytváří výsledek predikce, a když se objeví nový datový bod, pak na základě většiny výsledků klasifikátor Random Forest předpovídá konečné rozhodnutí. Zvažte následující obrázek:
Aplikace Random Forest
Náhodné lesy se většinou používají ve čtyřech sektorech:
Výhody Random Forest
- Random Forest je schopen provádět klasifikační i regresní úkoly.
- Je schopen zpracovávat velké datové sady s vysokou dimenzí.
- Zvyšuje přesnost modelu a zabraňuje problémům s přesazením.
Nevýhody Random Forest
- Přestože lze náhodný les použít pro klasifikační i regresní úlohy, není vhodnější pro regresní úlohy.
Implementace algoritmu Random Forest v Pythonu
Nyní implementujeme strom Random Forest Algorithm pomocí Pythonu. K tomu použijeme stejnou datovou sadu 'user_data.csv', kterou jsme používali v předchozích klasifikačních modelech. Použitím stejného datasetu můžeme porovnat klasifikátor Random Forest s jinými klasifikačními modely jako např Klasifikátor rozhodovacího stromu, KNN, SVM, logistická regrese atd.
kolik uncí je 10 mililitrů
Kroky implementace jsou uvedeny níže:
- Krok předběžného zpracování dat
- Přizpůsobení algoritmu náhodného lesa k tréninkové sadě
- Předpovídání výsledku testu
- Testovací přesnost výsledku (Creation of Confusion matrix)
- Vizualizace výsledku testovací sady.
1. Krok předběžného zpracování dat:
Níže je uveden kód pro krok předběžného zpracování:
# 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)
Ve výše uvedeném kódu jsme data předem zpracovali. Kde jsme načetli datovou sadu, která je dána jako:
2. Přizpůsobení algoritmu Random Forest do trénovací sady:
Nyní přizpůsobíme trénovací množinu algoritmus Random Forest. Aby se to vešlo, naimportujeme RandomForestClassifier třídy z sklearn.soubor knihovna. Kód je uveden níže:
#Fitting Decision Tree classifier to the training set from sklearn.ensemble import RandomForestClassifier classifier= RandomForestClassifier(n_estimators= 10, criterion='entropy') classifier.fit(x_train, y_train)
Ve výše uvedeném kódu má objekt klasifikátoru následující parametry:
Výstup:
RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy', max_depth=None, max_features='auto', 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, n_estimators=10, n_jobs=None, oob_score=False, random_state=None, verbose=0, warm_start=False)
3. Předvídání výsledku testovací sady
Vzhledem k tomu, že náš model je přizpůsoben tréninkové sadě, nyní můžeme předpovědět výsledek testu. Pro predikci vytvoříme nový predikční vektor y_pred. Níže je pro něj uveden kód:
#Predicting the test set result y_pred= classifier.predict(x_test)
Výstup:
Vektor predikce je dán takto:
Kontrolou výše uvedeného predikčního vektoru a reálného vektoru testovací sady můžeme určit nesprávné předpovědi provedené klasifikátorem.
co je myspace
4. Vytvoření Confusion Matrix
Nyní vytvoříme matici zmatků pro určení správných a nesprávných předpovědí. Níže je pro něj uveden kód:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Výstup:
Jak můžeme vidět ve výše uvedené matici, existují 4+4= 8 nesprávných předpovědí a 64+28= 92 správných předpovědí.
5. Vizualizace tréninku Nastavte výsledek
Zde si vizualizujeme výsledek tréninkové sestavy. Pro vizualizaci výsledku trénovací sady vyneseme graf pro klasifikátor Random Forest. Klasifikátor předpoví ano nebo ne pro uživatele, kteří si koupili nebo nezakoupili vůz SUV, jako jsme to udělali v Logistic Regression. Níže je pro něj uveden kód:
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()) for i, 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('Random Forest Algorithm (Training set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Výstup:
Výše uvedený obrázek je výsledkem vizualizace pro klasifikátor Random Forest pracující s výsledkem trénovací sady. Je velmi podobný klasifikátoru rozhodovacího stromu. Každý datový bod odpovídá každému uživateli uživatelských dat a fialové a zelené oblasti jsou oblasti predikce. Fialová oblast je klasifikována pro uživatele, kteří si nezakoupili vůz SUV, a zelená oblast je určena pro uživatele, kteří si zakoupili SUV.
pokud jinak bash
Takže v klasifikátoru Random Forest jsme vzali 10 stromů, které předpověděly Ano nebo NE pro proměnnou Zakoupené. Klasifikátor vzal většinu předpovědí a poskytl výsledek.
6. Vizualizace výsledku testovací sady
Nyní si vizualizujeme výsledek testovací sady. Níže je pro něj uveden kód:
#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()) for i, 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('Random Forest Algorithm(Test set)') mtp.xlabel('Age') mtp.ylabel('Estimated Salary') mtp.legend() mtp.show()
Výstup:
Výše uvedený obrázek je výsledkem vizualizace pro testovací sadu. Můžeme zkontrolovat, zda existuje minimální počet nesprávných předpovědí (8) bez problému Overfitting. Jiné výsledky získáme změnou počtu stromů v klasifikátoru.