Satunnainen metsäluokkaopetusohjelma: Kuinka käyttää puupohjaisia ​​algoritmeja koneoppimiseen

Puupohjaiset algoritmit ovat suosittuja koneoppimismenetelmiä, joita käytetään valvottujen oppimisongelmien ratkaisemiseen. Nämä algoritmit ovat joustavia ja voivat ratkaista minkä tahansa ongelman (luokittelu tai regressio).

Tree-algoritmit käyttävät usein keskimääräistä jatkuvaan ominaisuuksia tai tilassa kategorisen ominaisuuksia tehdessään ennusteita harjoitusnäytteet alueilla ne kuuluvat. Ne tuottavat myös ennusteita erittäin tarkasti , stabiilisti ja helposti tulkittavina .

Esimerkkejä puupohjaisista algoritmeista

Voit käyttää erilaisia ​​puupohjaisia ​​algoritmeja, kuten

  • Päätöspuita
  • Satunnainen metsä
  • Liukuvärjäys
  • Laukku (Bootstrap Aggregation)

Joten jokaisen datatieteilijän tulisi oppia nämä algoritmit ja käyttää niitä koneoppimisprojekteissaan.

Tässä artikkelissa opit lisää Random forest -algoritmista. Tämän artikkelin valmistuttua sinun tulee osata käyttää satunnaista metsäalgoritmia ennustavien mallien ratkaisemiseen ja rakentamiseen scikit-learn-luokitusongelmille.

Mikä on Random Forest?

Satunnainen metsä on yksi suosituimmista puupohjaisista valvotuista oppimisalgoritmeista. Se on myös joustavin ja helppokäyttöisin.

Algoritmia voidaan käyttää sekä luokittelu- että regressio-ongelmien ratkaisemiseen. Satunnainen metsä yhdistää yleensä satoja metsiäpäätöspuitaja kouluttaa sitten jokaisen päätöspuun eri havainnointinäytteellä.

Lopulliset satunnaisen metsän ennusteet tehdään keskittämällä kunkin yksittäisen puun ennusteet.

Satunnaismetsien hyödyt ovat lukuisat. Yksittäinen päätös puiden taipumus overfit koulutukseen tietoja, mutta satunnainen metsä voidaan lieventää, että ongelman keskiarvo ennusteen tulokset eri puista. Tämä antaa satunnaisille metsille suuremman ennakointitarkkuuden kuin yksi päätöksentekopuu.

Satunnainen metsäalgoritmi voi myös auttaa sinua löytämään ominaisuuksia, jotka ovat tärkeitä tietojoukossasi. Se sijaitsee Boruta-algoritmin pohjalla, joka valitsee tärkeät ominaisuudet tietojoukossa.

Satunnaista metsää on käytetty monissa sovelluksissa, esimerkiksi tarjoamaan suosituksia erilaisista tuotteista sähköisen kaupan asiakkaille.

Lääketieteessä satunnaista metsäalgoritmia voidaan käyttää potilaan taudin tunnistamiseen analysoimalla potilaan potilastiedot.

Myös pankkialalla sitä voidaan käyttää helposti sen selvittämiseen, onko asiakas petollinen vai laillinen.

Kuinka Random Forest -algoritmi toimii?

Satunnainen metsäalgoritmi toimii suorittamalla seuraavat vaiheet:

Vaihe 1 : Algoritmi valitsee satunnaiset näytteet toimitetusta aineistosta.

Vaihe 2: Algoritmi luo päätöspuun jokaiselle valitulle näytteelle. Sitten se saa ennustetuloksen jokaisesta luotusta päätöksentekopuusta.

Vaihe 3: Toteutus suoritetaan sitten jokaiselle ennustetulle tulokselle. Luokitteluongelmalle se käyttää tilaa ja regressio-ongelmalle keskiarvoa .

Vaihe 4 : Ja lopuksi algoritmi valitsee eniten äänestetyn ennustetuloksen lopulliseksi ennustukseksi.

Satunnainen metsä käytännössä

Nyt kun tiedät satunnaisen metsäalgoritmin hienot puolet, rakennetaan satunnainen metsäluokitus.

Rakennamme satunnaisen metsäluokittelijan käyttämällä Pima Indians Diabetes -tietojoukkoa. Pima-intiaanien diabeteksen tietojoukko sisältää diabeteksen puhkeamisen ennustamisen viiden vuoden kuluessa toimitettujen lääketieteellisten tietojen perusteella. Tämä on binääriluokitteluongelma.

Tehtävämme on analysoida ja luoda malli Pima Indian Diabetes -tietojoukosta ennustamaan, onko tietyllä potilaalla riski sairastua diabetekseen muiden itsenäisten tekijöiden vuoksi.

Aloitamme tuomalla tärkeitä paketteja, joita käytämme lataamaan tietojoukon ja luomaan satunnaisen metsäluokittelijan. Käytämme scikit-learn-kirjastoa satunnaisen metsäalgoritmin lataamiseen ja käyttämiseen.

# import important packages import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.metrics import accuracy_score from sklearn.preprocessing import StandardScaler, MinMaxScaler import pandas_profiling from matplotlib import rcParams import warnings warnings.filterwarnings("ignore") # figure size in inches rcParams["figure.figsize"] = 10, 6 np.random.seed(42)

Tietojoukko

Lataa sitten datajoukko datahakemistosta:

# Load dataset data = pd.read_csv("../data/pima_indians_diabetes.csv")

Nyt voimme tarkkailla tietojoukon otosta.

 # show sample of the dataset data.sample(5)

Kuten näette, tietojoukossamme on erilaisia ​​ominaisuuksia, joilla on numeeriset arvot.

Ymmärretään luettelo ominaisuuksista, joita meillä on tässä aineistossa.

# show columns data.columns

Tässä tietojoukossa on 8 syöttöominaisuutta ja 1 lähtö / kohde-ominaisuus. Puuttuvien arvojen uskotaan olevan koodattu nolla-arvoilla. Muuttujien nimien merkitys on seuraava (ensimmäisestä viimeiseen ominaisuuteen):

  • Raskauskertojen määrä.
  • Plasman glukoosipitoisuus 2 tunnin ajan suun kautta otettavalla glukoositoleranssitestillä.
  • Diastolinen verenpaine (mm Hg).
  • Triceps-ihon taittopaksuus (mm).
  • 2 tunnin seerumin insuliini (mu U / ml).
  • Painoindeksi (paino kg / (korkeus m) ^ 2).
  • Diabeteksen sukutoiminto.
  • Ikä (vuotta).
  • Luokkamuuttuja (0 tai 1).

Jaetaan sitten tietojoukko itsenäisiksi ominaisuuksiksi ja kohdeominaisuuksiksi. Kohdeominaisuuttamme tälle tietojoukolle kutsutaan luokassa.

# split data into input and taget variable(s) X = data.drop("class", axis=1) y = data["class"]

Tietojoukon esikäsittely

Before we create a model we need to standardize our independent features by using the standardScaler method from scikit-learn.

# standardize the dataset scaler = StandardScaler() X_scaled = scaler.fit_transform(X)

You can learn more on how and why to standardize your data from this article by clicking here.

Splitting the dataset into Training and Test data

We now split our processed dataset into training and test data. The test data will be 10% of the entire processed dataset.

# split into train and test set X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, stratify=y, test_size=0.10, random_state=42 )

Building the Random Forest Classifier

Now is time to create our random forest classifier and then train it on the train set. We will also pass the number of trees (100) in the forest we want to use through theparameter called n_estimators.

# create the classifier classifier = RandomForestClassifier(n_estimators=100) # Train the model using the training sets classifier.fit(X_train, y_train)

The above output shows different parameter values of the random forest classifier used during the training process on the train data.

After training we can perform prediction on the test data.

# predictin on the test set y_pred = classifier.predict(X_test)

Then we check the accuracy using actual and predicted values from the test data.

# Calculate Model Accuracy print("Accuracy:", accuracy_score(y_test, y_pred))

Accuracy: 0.8051948051948052

Our accuracy is around 80.5% which is good. But we can always make it better.

Identify Important Features

As I said before, we can also check the important features by using the feature_importances_ variable from the random forest algorithm in scikit-learn.

# check Important features feature_importances_df = pd.DataFrame( {"feature": list(X.columns), "importance": classifier.feature_importances_} ).sort_values("importance", ascending=False) # Display feature_importances_df

The figure above shows the relative importance of features and their contribution to the model. We can also visualize these features and their  scores using the seaborn and matplotlib libraries.

# visualize important featuers # Creating a bar plot sns.barplot(x=feature_importances_df.feature, y=feature_importances_df.importance) # Add labels to your plt.xlabel("Feature Importance Score") plt.ylabel("Features") plt.title("Visualizing Important Features") plt.xticks( rotation=45, horizontalalignment="right", fontweight="light", fontsize="x-large" ) plt.show()

From the figure above, you can see the triceps_skinfold_thickness feature has low importance and does not contribute much to the prediction.

This means that we can remove this feature and train our random forest classifier again and then see if it can improve its performance on the test data.

# load data with selected features X = data.drop(["class", "triceps_skinfold_thickness"], axis=1) y = data["class"] # standardize the dataset scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # split into train and test set X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, stratify=y, test_size=0.10, random_state=42 )

We will train the random forest algorithm with the selected processed features from our dataset, perform predictions, and then find the accuracy of the model.

# Create a Random Classifier clf = RandomForestClassifier(n_estimators=100) # Train the model using the training sets clf.fit(X_train, y_train) # prediction on test set y_pred = clf.predict(X_test) # Calculate Model Accuracy, print("Accuracy:", accuracy_score(y_test, y_pred))

Accuracy: 0.8181818181818182

Now the model accuracy has increased from 80.5% to 81.8% after we removed the least important feature called triceps_skinfold_thickness.

This suggests that it is very important to check important features and see if you can remove the least important features to increase your model's performance.

Wrapping up

Puupohjaiset algoritmit ovat todella tärkeitä jokaisen datatieteilijän oppimiselle. Tässä artikkelissa olet oppinut puupohjaisten algoritmien perusteet ja luokittelumallin luomisen satunnaisen metsäalgoritmin avulla.

Suosittelen myös, että kokeilet muun tyyppisiä puupohjaisia ​​algoritmeja, kuten Extra-trees algoritmi.

Voit ladata tässä artikkelissa käytetyn tietojoukon ja muistikirjan täältä: //github.com/Davisy/Random-Forest-classification-Tutorial

Onnittelut, olet päässyt tämän artikkelin loppuun!

Jos olet oppinut jotain uutta tai nautit tämän artikkelin lukemisesta, jaa se, jotta muut näkevät sen. Siihen asti nähdään seuraavassa viestissä! Minua voi tavoittaa myös Twitterissä @Davis_McDavid