Random Forest je priljubljen algoritem strojnega učenja, ki spada v tehniko nadzorovanega učenja. Uporablja se lahko za probleme klasifikacije in regresije v ML. Temelji na konceptu ansambelsko učenje, ki je proces združevanje več klasifikatorjev za rešitev kompleksnega problema in izboljšanje učinkovitosti modela.
Kot že ime pove, 'Random Forest je klasifikator, ki vsebuje številna drevesa odločanja na različnih podmnožicah danega nabora podatkov in vzame povprečje za izboljšanje napovedne natančnosti tega nabora podatkov.' Namesto da bi se zanašal na eno odločitveno drevo, naključni gozd vzame napoved iz vsakega drevesa in na podlagi večine glasov napovedi ter napove končni rezultat.
Večje število dreves v gozdu vodi do večje natančnosti in preprečuje problem prekomernega opremljanja.
nedefiniran naklon
Spodnji diagram pojasnjuje delovanje algoritma Random Forest:
Opomba: če želite bolje razumeti algoritem naključnega gozda, morate poznati algoritem drevesa odločanja.
Predpostavke za naključni gozd
Ker naključni gozd združuje več dreves za napovedovanje razreda nabora podatkov, je možno, da nekatera odločitvena drevesa napovedujejo pravilen rezultat, druga pa ne. Toda skupaj vsa drevesa napovejo pravilen rezultat. Zato sta spodaj dve predpostavki za boljši klasifikator naključnih gozdov:
- V spremenljivki značilnosti nabora podatkov bi moralo biti nekaj dejanskih vrednosti, tako da lahko klasifikator predvidi natančne rezultate namesto ugibanega rezultata.
- Napovedi iz vsakega drevesa morajo imeti zelo nizke korelacije.
Zakaj uporabljati Random Forest?
Spodaj je nekaj točk, ki pojasnjujejo, zakaj bi morali uporabiti algoritem Random Forest:
- V primerjavi z drugimi algoritmi potrebuje manj časa za usposabljanje.
- Predvidi rezultate z visoko natančnostjo, tudi za velik nabor podatkov, ki ga izvaja učinkovito.
- Prav tako lahko ohrani natančnost, ko manjka velik delež podatkov.
Kako deluje algoritem Random Forest?
Naključni gozd deluje v dveh fazah, prva je ustvariti naključni gozd s kombiniranjem N odločitvenega drevesa, druga pa je narediti napovedi za vsako drevo, ustvarjeno v prvi fazi.
Delovni proces je mogoče razložiti v spodnjih korakih in diagramu:
Korak 1: Izberite naključne K podatkovne točke iz vadbenega niza.
mysql štetje
2. korak: Zgradite odločitvena drevesa, povezana z izbranimi podatkovnimi točkami (podnabori).
3. korak: Izberite število N za odločitvena drevesa, ki jih želite zgraditi.
4. korak: Ponovite 1. in 2. korak.
5. korak: Za nove podatkovne točke poiščite napovedi vsakega odločitvenega drevesa in dodelite nove podatkovne točke kategoriji, ki je dobila večino glasov.
Delovanje algoritma je mogoče bolje razumeti s spodnjim primerom:
primer: Recimo, da obstaja nabor podatkov, ki vsebuje več slik sadja. Torej je ta niz podatkov dan klasifikatorju naključnega gozda. Nabor podatkov je razdeljen na podmnožice in dan vsakemu odločitvenemu drevesu. Med fazo usposabljanja vsako drevo odločitev ustvari rezultat napovedi in ko se pojavi nova podatkovna točka, na podlagi večine rezultatov klasifikator Random Forest napove končno odločitev. Razmislite o spodnji sliki:
Aplikacije naključnega gozda
Obstajajo predvsem štirje sektorji, kjer se večinoma uporablja naključni gozd:
Prednosti naključnega gozda
- Random Forest je sposoben izvajati naloge klasifikacije in regresije.
- Sposoben je obdelovati velike nabore podatkov z visoko dimenzijo.
- Izboljša natančnost modela in preprečuje težave s prekomernim opremljanjem.
Slabosti naključnega gozda
- Čeprav se naključni gozd lahko uporablja za naloge klasifikacije in regresije, ni bolj primeren za naloge regresije.
Izvedba algoritma naključnega gozda v Pythonu
Zdaj bomo implementirali drevo algoritma naključnega gozda z uporabo Pythona. Za to bomo uporabili isti nabor podatkov 'user_data.csv', ki smo ga uporabili v prejšnjih modelih klasifikacije. Z uporabo istega nabora podatkov lahko primerjamo klasifikator Random Forest z drugimi modeli klasifikacije, kot je npr. Klasifikator odločitvenega drevesa, KNN, SVM, logistična regresija itd.
Koraki za izvedbo so navedeni spodaj:
- Korak predhodne obdelave podatkov
- Prilagajanje algoritma naključnega gozda naboru za usposabljanje
- Napovedovanje rezultata testa
- Test točnosti rezultata (Creation of Confusion matrix)
- Vizualizacija rezultatov testnega niza.
1. Korak predhodne obdelave podatkov:
Spodaj je koda za korak predhodne obdelave:
# 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)
V zgornji kodi smo predhodno obdelali podatke. Kam smo naložili nabor podatkov, ki je podan kot:
2. Prilagajanje algoritma Random Forest učnemu nizu:
Zdaj bomo algoritem naključnega gozda prilagodili naboru za usposabljanje. Da bi ga prilagodili, bomo uvozili RandomForestClassifier razreda iz sklearn.ansambel knjižnica. Koda je navedena spodaj:
ram igralec
#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)
V zgornji kodi ima objekt klasifikatorja spodnje parametre:
Izhod:
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. Predvidevanje rezultata testnega niza
Ker je naš model prilagojen vadbenemu nizu, lahko sedaj napovemo rezultat testa. Za napoved bomo ustvarili nov napovedni vektor y_pred. Spodaj je koda zanj:
komisija za izbor kadrov pomen
#Predicting the test set result y_pred= classifier.predict(x_test)
Izhod:
Vektor napovedi je podan kot:
S preverjanjem zgornjega napovednega vektorja in testnega niza realnega vektorja lahko ugotovimo nepravilne napovedi, ki jih je izvedel klasifikator.
4. Ustvarjanje matrike zmede
Sedaj bomo ustvarili matriko zmede, da bomo določili pravilne in nepravilne napovedi. Spodaj je koda zanj:
#Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred)
Izhod:
Kot lahko vidimo v zgornji matriki, obstajajo 4+4= 8 napačnih napovedi in 64+28= 92 pravilnih napovedi.
5. Vizualizacija rezultata vadbene serije
Tukaj bomo vizualizirali rezultat vadbenega sklopa. Za vizualizacijo rezultata učnega niza bomo izrisali graf za klasifikator naključnega gozda. Klasifikator bo predvidel da ali ne za uporabnike, ki so bodisi kupili ali niso kupili avtomobil SUV, kot smo storili v logistični regresiji. Spodaj je koda zanj:
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()
Izhod:
Zgornja slika je rezultat vizualizacije za klasifikator Random Forest, ki dela z rezultatom učnega niza. Zelo je podoben klasifikatorju drevesa odločitev. Vsaka podatkovna točka ustreza vsakemu uporabniku user_data, vijolična in zelena območja pa so območja napovedi. Vijolična regija je razvrščena za uporabnike, ki niso kupili avtomobila SUV, zelena regija pa je za uporabnike, ki so kupili SUV.
Torej, v klasifikatorju Random Forest smo vzeli 10 dreves, ki so napovedala Da ali NE za spremenljivko Purchased. Klasifikator je prevzel večino napovedi in zagotovil rezultat.
propozicijska logika
6. Vizualizacija rezultata testnega niza
Zdaj bomo vizualizirali rezultat testnega niza. Spodaj je koda zanj:
#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()
Izhod:
Zgornja slika je rezultat vizualizacije za testni niz. Preverimo lahko, ali obstaja minimalno število nepravilnih napovedi (8) brez težave s prekomernim opremljanjem. S spreminjanjem števila dreves v klasifikatorju bomo dobili drugačne rezultate.