Random Forest je populárny algoritmus strojového učenia, ktorý patrí k technike učenia pod dohľadom. Môže byť použitý pre klasifikačné aj regresné problémy v ML. Vychádza z koncepcie súborové učenie, čo je proces kombinovanie viacerých klasifikátorov na vyriešenie zložitého problému a na zlepšenie výkonu modelu.
Ako už názov napovedá, 'Náhodný les je klasifikátor, ktorý obsahuje množstvo rozhodovacích stromov pre rôzne podmnožiny daného súboru údajov a berie priemer na zlepšenie prediktívnej presnosti tohto súboru údajov.' Namiesto spoliehania sa na jeden rozhodovací strom náhodný les berie predpoveď z každého stromu a na základe väčšiny hlasov predpovedí a predpovedá konečný výstup.
Väčší počet stromov v lese vedie k vyššej presnosti a predchádza problémom s presádzaním.
vôl vs býk
Nasledujúci diagram vysvetľuje fungovanie algoritmu Random Forest:
Poznámka: Aby ste lepšie porozumeli algoritmu Random Forest Algorithm, mali by ste poznať algoritmus rozhodovacieho stromu.
Predpoklady pre náhodný les
Keďže náhodný les kombinuje viacero stromov na predpovedanie triedy súboru údajov, je možné, že niektoré rozhodovacie stromy môžu predpovedať správny výstup, zatiaľ čo iné nie. Ale spolu všetky stromy predpovedajú správny výstup. Nižšie sú preto uvedené dva predpoklady pre lepší klasifikátor náhodného lesa:
- V premennej funkcie množiny údajov by mali byť nejaké skutočné hodnoty, aby klasifikátor mohol predpovedať presné výsledky a nie hádaný výsledok.
- Predpovede z každého stromu musia mať veľmi nízke korelácie.
Prečo používať Random Forest?
Nižšie je niekoľko bodov, ktoré vysvetľujú, prečo by sme mali použiť algoritmus Random Forest:
- V porovnaní s inými algoritmami trvá tréning menej času.
- Predpovedá výstup s vysokou presnosťou, a to aj pre veľký súbor údajov, ktorý funguje efektívne.
- Dokáže zachovať presnosť aj vtedy, keď chýba veľká časť údajov.
Ako funguje algoritmus Random Forest?
Náhodný les funguje v dvoch fázach, po prvé je to vytvorenie náhodného lesa spojením N rozhodovacieho stromu a po druhé, predpovede pre každý strom vytvorený v prvej fáze.
Pracovný proces je možné vysvetliť v nasledujúcich krokoch a diagrame:
Krok 1: Vyberte náhodných K údajových bodov z tréningovej množiny.
Krok 2: Zostavte rozhodovacie stromy spojené s vybratými údajovými bodmi (podmnožiny).
Krok 3: Zvoľte si číslo N pre rozhodovacie stromy, ktoré chcete postaviť.
Krok 4: Opakujte kroky 1 a 2.
pole reťazcov c
Krok 5: Pre nové údajové body nájdite predpovede každého rozhodovacieho stromu a priraďte nové údajové body ku kategórii, ktorá získa väčšinu hlasov.
Fungovanie algoritmu možno lepšie pochopiť na nasledujúcom príklade:
Príklad: Predpokladajme, že existuje množina údajov, ktorá obsahuje viacero obrázkov ovocia. Tento súbor údajov sa teda pridelí klasifikátoru náhodného lesa. Súbor údajov je rozdelený na podmnožiny a priradený ku každému rozhodovaciemu stromu. Počas trénovacej fázy každý rozhodovací strom vytvára výsledok predikcie a keď sa objaví nový údajový bod, potom na základe väčšiny výsledkov klasifikátor Random Forest predpovedá konečné rozhodnutie. Zvážte nasledujúci obrázok:
Aplikácie náhodného lesa
Náhodné lesy sa väčšinou používajú v štyroch sektoroch:
Výhody náhodného lesa
- Náhodný les je schopný vykonávať klasifikačné aj regresné úlohy.
- Je schopný spracovať veľké súbory údajov s vysokou dimenziou.
- Zvyšuje presnosť modelu a zabraňuje problémom s nadmernou montážou.
Nevýhody náhodného lesa
- Hoci náhodný les môže byť použitý pre klasifikačné aj regresné úlohy, nie je vhodnejší pre regresné úlohy.
Implementácia algoritmu Random Forest v jazyku Python
Teraz implementujeme strom Random Forest Algorithm pomocou Pythonu. Na tento účel použijeme rovnaký súbor údajov 'user_data.csv', ktorý sme použili v predchádzajúcich klasifikačných modeloch. Použitím rovnakého datasetu môžeme porovnať klasifikátor Random Forest s inými klasifikačnými modelmi ako napr Klasifikátor rozhodovacieho stromu, KNN, SVM, logistická regresia atď.
ako prerobiť vo Photoshope
Kroky implementácie sú uvedené nižšie:
- Krok predbežného spracovania údajov
- Prispôsobenie algoritmu náhodného lesa k množine tréningu
- Predpovedanie výsledku testu
- Otestujte presnosť výsledku (Vytvorenie matice zmätku)
- Vizualizácia výsledku testovacej súpravy.
1. Krok predbežného spracovania údajov:
Nižšie je uvedený kód pre krok predbežného spracovania:
# 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)
Vo vyššie uvedenom kóde sme predspracovali údaje. Kde sme načítali súbor údajov, ktorý je uvedený ako:
2. Prispôsobenie algoritmu Random Forest k trénovacej množine:
Teraz prispôsobíme algoritmus Random Forest do trénovacej množiny. Aby sa zmestil, dovezieme RandomForestClassifier triedy z sklearn.súbor knižnica. Kód je uvedený nižšie:
#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)
Vo vyššie uvedenom kóde má objekt klasifikátora nasledujúce parametre:
Výkon:
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. Predpovedanie výsledku testovacej súpravy
Keďže náš model je prispôsobený tréningovej súprave, teraz môžeme predpovedať výsledok testu. Pre predikciu vytvoríme nový predikčný vektor y_pred. Nižšie je uvedený kód:
#Predicting the test set result y_pred= classifier.predict(x_test)
Výkon:
Vektor predpovede je daný ako:
Kontrolou vyššie uvedeného predikčného vektora a testovacej množiny reálneho vektora môžeme určiť nesprávne predpovede vykonané klasifikátorom.
parseint java
4. Vytvorenie Confusion Matrix
Teraz vytvoríme maticu zmätku na určenie správnych a nesprávnych predpovedí. Nižšie je uvedený kód:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Výkon:
Ako môžeme vidieť vo vyššie uvedenej matici, existujú 4+4= 8 nesprávnych predpovedí a 64+28= 92 správnych predpovedí.
5. Vizualizácia tréningu Nastavte výsledok
Tu budeme vizualizovať výsledok tréningovej zostavy. Na vizualizáciu výsledku tréningovej množiny nakreslíme graf pre klasifikátor náhodných lesov. Klasifikátor predpovedá áno alebo nie používateľom, ktorí si kúpili alebo nezakúpili vozidlo SUV, ako sme to urobili v prípade logistickej regresie. Nižšie je 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ýkon:
Vyššie uvedený obrázok je výsledkom vizualizácie pre klasifikátor Random Forest pracujúci s výsledkom tréningovej množiny. Je veľmi podobný klasifikátoru rozhodovacieho stromu. Každý údajový bod zodpovedá každému používateľovi user_data a fialová a zelená oblasť sú oblasti predikcie. Fialová oblasť je klasifikovaná pre používateľov, ktorí si nekúpili SUV, a zelená oblasť je určená pre používateľov, ktorí si kúpili SUV.
počítačové siete
Takže v klasifikátore Random Forest sme vzali 10 stromov, ktoré predpovedali Áno alebo NIE pre premennú Zakúpené. Klasifikátor zobral väčšinu predpovedí a poskytol výsledok.
6. Vizualizácia výsledku testovacej súpravy
Teraz si vizualizujeme výsledok testovacej sady. Nižšie je 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ýkon:
Vyššie uvedený obrázok je výsledkom vizualizácie pre testovaciu súpravu. Môžeme skontrolovať, či existuje minimálny počet nesprávnych predpovedí (8) bez problému Overfitting. Odlišné výsledky získame zmenou počtu stromov v klasifikátore.