logo

Atsitiktinis miško algoritmas

„Random Forest“ yra populiarus mašininio mokymosi algoritmas, priklausantis prižiūrimo mokymosi technikai. Jis gali būti naudojamas ML klasifikavimo ir regresijos problemoms spręsti. Jis pagrįstas koncepcija mokymasis ansamblyje, kuris yra procesas kelių klasifikatorių derinimas, siekiant išspręsti sudėtingą problemą ir pagerinti modelio veikimą.

Kaip rodo pavadinimas, „Atsitiktinis miškas“ yra klasifikatorius, kuriame yra daugybė sprendimų medžių įvairiuose duoto duomenų rinkinio pogrupiuose ir imamas vidurkis, kad pagerintų to duomenų rinkinio nuspėjamąjį tikslumą. Užuot pasikliaujęs vienu sprendimų medžiu, atsitiktinis miškas paima kiekvieno medžio prognozę, remdamasis prognozių daugumos balsais, ir numato galutinį rezultatą.

Didesnis medžių skaičius miške užtikrina didesnį tikslumą ir apsaugo nuo permontavimo problemos.

Prisijunkite prie mysql atnaujinimo

Žemiau esančioje diagramoje paaiškinamas atsitiktinio miško algoritmo veikimas:

Atsitiktinis miško algoritmas

Pastaba: norėdami geriau suprasti atsitiktinį miško algoritmą, turėtumėte žinoti sprendimų medžio algoritmą.

Atsitiktinio miško prielaidos

Kadangi atsitiktinis miškas sujungia kelis medžius, kad prognozuotų duomenų rinkinio klasę, gali būti, kad kai kurie sprendimų medžiai gali numatyti teisingą išvestį, o kiti – ne. Tačiau kartu visi medžiai numato teisingą produkciją. Todėl žemiau pateikiamos dvi geresnio atsitiktinio miško klasifikatoriaus prielaidos:

  • Duomenų rinkinio ypatybių kintamajame turi būti tam tikros faktinės reikšmės, kad klasifikatorius galėtų numatyti tikslius rezultatus, o ne spėjamą rezultatą.
  • Kiekvieno medžio prognozės turi turėti labai mažą koreliaciją.

Kodėl naudoti Random Forest?

Žemiau yra keletas punktų, paaiškinančių, kodėl turėtume naudoti atsitiktinio miško algoritmą:

  • Tai užtrunka mažiau treniruočių laiko, palyginti su kitais algoritmais.
  • Jis numato išvestį labai tiksliai, net ir didelio duomenų rinkinio atveju, kai jis veikia efektyviai.
  • Jis taip pat gali išlaikyti tikslumą, kai trūksta didelės dalies duomenų.

Kaip veikia Random Forest algoritmas?

„Random Forest“ veikia dviem etapais, pirma, sukuria atsitiktinį mišką, sujungiant N sprendimų medį, o antra – prognozuoja kiekvieną medį, sukurtą pirmajame etape.

Darbo procesą galima paaiškinti toliau pateiktais žingsniais ir diagrama:

tinklo architektūra

1 žingsnis: Pasirinkite atsitiktinius K duomenų taškus iš mokymo rinkinio.

2 žingsnis: Sukurkite sprendimų medžius, susietus su pasirinktais duomenų taškais (pogrupiais).

3 veiksmas: Pasirinkite skaičių N sprendimų medžiams, kuriuos norite sukurti.

4 veiksmas: Pakartokite 1 ir 2 veiksmus.

5 veiksmas: Dėl naujų duomenų taškų raskite kiekvieno sprendimų medžio prognozes ir priskirkite naujus duomenų taškus kategorijai, kuri laimi daugumą balsų.

Algoritmo veikimą galima geriau suprasti pagal toliau pateiktą pavyzdį:

Pavyzdys: Tarkime, kad yra duomenų rinkinys, kuriame yra keli vaisių vaizdai. Taigi, šis duomenų rinkinys suteikiamas atsitiktinių miškų klasifikatoriui. Duomenų rinkinys yra padalintas į poaibius ir pateikiamas kiekvienam sprendimų medžiui. Mokymo fazės metu kiekvienas sprendimų medis sukuria numatymo rezultatą, o kai atsiranda naujas duomenų taškas, tada, remdamasis dauguma rezultatų, atsitiktinių miškų klasifikatorius numato galutinį sprendimą. Apsvarstykite toliau pateiktą vaizdą:

Atsitiktinis miško algoritmas

Atsitiktinių miškų programos

Iš esmės yra keturi sektoriai, kuriuose dažniausiai naudojamas atsitiktinis miškas:

    Bankininkystė:Bankų sektorius dažniausiai naudoja šį algoritmą paskolų rizikai identifikuoti.Vaistas:Šio algoritmo pagalba galima nustatyti ligos tendencijas ir ligos riziką.Žemės naudojimas:Pagal šį algoritmą galime nustatyti panašios žemės naudojimo sritis.Rinkodara:Rinkodaros tendencijas galima nustatyti naudojant šį algoritmą.

Atsitiktinio miško privalumai

  • Random Forest gali atlikti tiek klasifikavimo, tiek regresijos užduotis.
  • Jis gali tvarkyti didelius duomenų rinkinius, kurių matmenys yra dideli.
  • Tai padidina modelio tikslumą ir apsaugo nuo permontavimo problemos.

Atsitiktinio miško trūkumai

  • Nors atsitiktinis miškas gali būti naudojamas tiek klasifikavimo, tiek regresijos užduotims atlikti, jis nėra tinkamesnis regresijos užduotims.

„Python“ atsitiktinio miško algoritmo įgyvendinimas

Dabar mes įdiegsime atsitiktinio miško algoritmo medį naudodami Python. Tam naudosime tą patį duomenų rinkinį „user_data.csv“, kurį naudojome ankstesniuose klasifikavimo modeliuose. Naudodami tą patį duomenų rinkinį, galime palyginti Random Forest klasifikatorių su kitais klasifikavimo modeliais, pvz Sprendimų medžio klasifikatorius, KNN, SVM, logistinė regresija ir kt.

Diegimo žingsniai pateikiami žemiau:

java eilutė į int
  • Duomenų išankstinio apdorojimo žingsnis
  • Atsitiktinio miško algoritmo pritaikymas mokymo rinkiniui
  • Testo rezultato numatymas
  • Patikrinkite rezultato tikslumą (sumišimo matricos kūrimas)
  • Testo rinkinio rezultato vizualizavimas.

1. Išankstinio duomenų apdorojimo veiksmas:

Žemiau pateikiamas išankstinio apdorojimo veiksmo kodas:

 # 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) 

Aukščiau pateiktame kode mes iš anksto apdorojome duomenis. Kur mes įkėlėme duomenų rinkinį, kuris pateikiamas taip:

Atsitiktinis miško algoritmas

2. Atsitiktinio miško algoritmo pritaikymas treniruočių rinkiniui:

Dabar mes pritaikysime atsitiktinio miško algoritmą mokymo rinkiniui. Norėdami jį pritaikyti, importuosime RandomForestClassifier klasė iš sklearn.ansamblis biblioteka. Kodas pateiktas žemiau:

 #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) 

Aukščiau pateiktame kode klasifikatoriaus objektas turi šiuos parametrus:

    n_estimators=Reikalingas medžių skaičius Atsitiktiniame miške. Numatytoji reikšmė yra 10. Galime pasirinkti bet kokį skaičių, bet turime pasirūpinti permontavimo problema.kriterijus =Tai funkcija, skirta analizuoti padalijimo tikslumą. Čia mes naudojame „entropiją“, kad gautume informaciją.

Išvestis:

kaip pervardyti katalogą linux
 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. Bandymo rinkinio rezultato numatymas

Kadangi mūsų modelis yra pritaikytas treniruočių rinkiniui, dabar galime numatyti testo rezultatą. Numatymui sukursime naują numatymo vektorių y_pred. Žemiau yra jo kodas:

 #Predicting the test set result y_pred= classifier.predict(x_test) 

Išvestis:

Numatymo vektorius pateikiamas taip:

Atsitiktinis miško algoritmas

Patikrinus aukščiau pateiktą prognozavimo vektorių ir testo rinkinio realųjį vektorių, galime nustatyti neteisingas klasifikatoriaus atliktas prognozes.

4. Sumaišties matricos kūrimas

Dabar sukursime painiavos matricą, kad nustatytų teisingas ir neteisingas prognozes. Žemiau yra jo kodas:

 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Išvestis:

Atsitiktinis miško algoritmas

Kaip matome aukščiau pateiktoje matricoje, yra 4+4= 8 neteisingos prognozės ir 64+28= 92 teisingos prognozės.

5. Treniruotės vizualizavimas Rinkinio rezultatas

Čia pavaizduosime treniruočių rinkinio rezultatą. Norėdami vizualizuoti mokymo rinkinio rezultatą, pavaizduosime atsitiktinio miško klasifikatoriaus grafiką. Klasifikatorius nuspės „taip“ arba „ne“ naudotojams, kurie įsigijo arba neįsigijo visureigio automobilį, kaip tai padarėme Logistinėje regresijoje. Žemiau yra jo kodas:

 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() 

Išvestis:

generuoti atsitiktinį skaičių Java
Atsitiktinis miško algoritmas

Aukščiau pateiktas vaizdas yra Random Forest klasifikatoriaus, dirbančio su mokymo rinkinio rezultatu, vizualizacijos rezultatas. Jis labai panašus į sprendimų medžio klasifikatorių. Kiekvienas duomenų taškas atitinka kiekvieną user_data vartotoją, o violetinės ir žalios sritys yra numatymo sritys. Violetinė sritis klasifikuojama naudotojams, kurie neįsigijo visureigio automobilio, o žalia sritis – naudotojams, įsigijusiems visureigį.

Taigi atsitiktinių miškų klasifikatoriuje mes paėmėme 10 medžių, kurie numatė Taip arba NE kintamajam Pirktas. Klasifikatorius paėmė daugumą prognozių ir pateikė rezultatą.

6. Testo rinkinio rezultato vizualizavimas

Dabar vizualizuosime testo rinkinio rezultatą. Žemiau yra jo kodas:

 #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() 

Išvestis:

Atsitiktinis miško algoritmas

Aukščiau pateiktas vaizdas yra bandymo rinkinio vizualizacijos rezultatas. Galime patikrinti, ar yra minimalus neteisingų prognozių skaičius (8) be Overfitting problemos. Skirtingus rezultatus gausime pakeitę medžių skaičių klasifikatoriuje.