Véletlen erdőosztályozó oktatóanyag: Hogyan használjuk a faalapú algoritmusokat a gépi tanuláshoz

A faalapú algoritmusok népszerű gépi tanulási módszerek, amelyeket felügyelt tanulási problémák megoldására használnak. Ezek az algoritmusok rugalmasak és bármilyen problémát megoldhatnak (osztályozás vagy regresszió).

A fa alapú algoritmusok általában a folyamatos jellemzők átlagát vagy a kategóriás jellemzők módját használják, amikor előrejelzéseket készítenek a képzési mintákról azokban a régiókban, amelyekhez tartoznak. Nagy pontossággal , stabilitással és könnyen értelmezhető előrejelzéssel is szolgálnak .

Példák faalapú algoritmusokra

Különböző faalapú algoritmusok használhatók, például

  • Döntési fák
  • Véletlen Erdő
  • Színátmenet növelése
  • Zsákolás (Bootstrap összesítés)

Tehát minden adattudósnak meg kell tanulnia ezeket az algoritmusokat, és gépi tanulási projektjeik során alkalmazniuk kell őket.

Ebben a cikkben többet megtudhat a Random forest algoritmusról. A cikk elkészítése után jártasnak kell lennie a véletlenszerű erdei algoritmus használatában a scikit-learn osztályozási problémák prediktív modelljeinek megoldására és felépítésére.

Mi a Random Forest?

A véletlenszerű erdő az egyik legnépszerűbb faalapú felügyelt tanulási algoritmus. Ez a legrugalmasabb és legkönnyebben használható.

Az algoritmus mind osztályozási, mind regressziós problémák megoldására használható. A véletlenszerű erdők általában több százat kombinálnakdöntési fákmajd az egyes döntési fákat a megfigyelések különböző mintájára képezi.

A véletlenszerű erdő végső előrejelzését az egyes fák jóslatainak átlagolásával végezzük.

A véletlenszerű erdők számos előnye van. Az egyes döntési fák általában túlteljesítik a képzési adatokat, de a véletlenszerű erdők enyhíthetik ezt a problémát azáltal, hogy átlagolják a különböző fák előrejelzési eredményeit. Ez a véletlenszerű erdőknek nagyobb prediktív pontosságot biztosít, mint egyetlen döntési fa.

A véletlenszerű erdei algoritmus segíthet az adatkészletben fontos funkciók megtalálásában is . A Boruta algoritmus alján fekszik, amely kiválasztja az adatkészlet fontos jellemzőit.

A véletlenszerű erdőt számos alkalmazásban alkalmazták, például különböző termékekre vonatkozó ajánlások nyújtására az e-kereskedelem ügyfeleinek.

Az orvostudományban véletlenszerű erdei algoritmust lehet használni a beteg betegségének azonosítására a beteg kórlapjának elemzésével.

A bankszektorban is könnyen megállapítható, hogy az ügyfél csaló vagy törvényes-e.

Hogyan működik a Random Forest algoritmus?

A véletlenszerű erdei algoritmus a következő lépések végrehajtásával működik:

1. lépés : Az algoritmus véletlenszerű mintákat választ a megadott adatkészletből.

2. lépés: Az algoritmus minden kiválasztott mintához létrehoz egy döntési fát. Ekkor minden létrehozott döntési fából jóslati eredményt kap.

3. lépés: Ezután minden előre jelzett eredménynél elvégezzük a V otingot. Osztályozási probléma esetén módot , regressziós probléma esetén pedig átlagot fog használni .

4. lépés : Végül az algoritmus kiválasztja a legtöbbet szavazott jóslási eredményt a végső előrejelzésként.

Véletlen erdő a gyakorlatban

Most, hogy ismeri a véletlenszerű erdei algoritmus csínját-bínját, készítsünk egy véletlenszerű erdőosztályozót.

Felépítünk egy véletlenszerű erdőosztályozót a Pima Indians Diabetes adatkészlet felhasználásával. A Pima Indians Diabetes Dataset magában foglalja a cukorbetegség 5 éven belüli megjelenésének előrejelzését a megadott orvosi adatok alapján. Ez egy bináris osztályozási probléma.

Feladatunk a Pima Indian Diabetes adatkészletének elemzése és létrehozása annak megjóslására, hogy egy adott betegnek fennáll-e a cukorbetegség kialakulásának kockázata, más független tényezőkre tekintettel.

Először fontos csomagok importálásával kezdjük, amelyeket felhasználunk az adatkészlet betöltésére és egy véletlenszerű erdőosztályozó létrehozására. A scikit-learn könyvtár segítségével fogjuk betölteni és használni a véletlenszerű erdei algoritmust.

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

Adatkészlet

Ezután töltse be az adatkészletet az adatkönyvtárból:

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

Most megfigyelhetjük az adatkészlet mintáját.

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

Amint láthatja, adatkészletünkben különféle jellemzők vannak számszerű értékekkel.

Értsük meg az ebben az adatkészletben található funkciók listáját.

# show columns data.columns

Ebben az adatkészletben 8 bemeneti és 1 kimeneti / cél jellemző van. A hiányzó értékeket vélhetően nulla értékkel kódolják. A változónevek jelentése a következő (az elsőtől az utolsóig):

  • Terhes alkalmak száma.
  • A plazma glükózkoncentrációja 2 órán át orális glükóz tolerancia tesztben.
  • Diasztolés vérnyomás (Hgmm).
  • Tricepsz bőrhajtásának vastagsága (mm).
  • 2 órás szérum inzulin (mu U / ml).
  • Testtömegindex (súly kg / (magasság m) ^ 2).
  • Cukorbeteg törzskönyv funkció.
  • Kor (év).
  • Osztály változó (0 vagy 1).

Ezután felosztjuk az adatkészletet független tulajdonságokra és céltulajdonságokra. Ennek az adatkészletnek a céltulajdonságát osztálynak nevezzük .

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

Az adatkészlet előfeldolgozása

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

Tree-based algorithms are really important for every data scientist to learn. In this article, you've learned the basics of tree-based algorithms and how to create a classification model by using the random forest algorithm.

I also recommend you try other types of tree-based algorithms such as the Extra-trees algorithm.

You can download the dataset and notebook used in this article here: //github.com/Davisy/Random-Forest-classification-Tutorial

Congratulations, you have made it to the end of this article!

If you learned something new or enjoyed reading this article, please share it so that others can see it. Until then, see you in the next post! I can also be reached on Twitter @Davis_McDavid