Урок за случаен класификатор на горите: Как да използваме алгоритми, базирани на дървета, за машинно обучение

Дървесните алгоритми са популярни методи за машинно обучение, използвани за решаване на контролирани учебни проблеми. Тези алгоритми са гъвкави и могат да решат всякакъв вид проблем (класификация или регресия).

Базираните на дървета алгоритми са склонни да използват средното за непрекъснати характеристики или режим за категорични характеристики, когато правят прогнози за учебни проби в регионите, към които принадлежат. Те също така създават прогнози с висока точност , стабилност и лесна интерпретация .

Примери за базирани на дървета алгоритми

Има различни алгоритми, базирани на дърво, които можете да използвате, като

  • Дървета за вземане на решения
  • Случайна гора
  • Повишаване на градиента
  • Багаж (агрегиране на Bootstrap)

Така че всеки учен по данни трябва да научи тези алгоритми и да ги използва в своите проекти за машинно обучение.

В тази статия ще научите повече за алгоритъма Random Forest. След като завършите тази статия, трябва да сте опитни в използването на алгоритъма на случайни гори за решаване и изграждане на прогнозни модели за класификационни проблеми с scikit-learn.

Какво е Random Forest?

Случайната гора е един от най-популярните дървесни алгоритми за контролирано обучение. Той е и най-гъвкавият и лесен за използване.

Алгоритъмът може да се използва за решаване както на класификационни, така и на регресионни проблеми. Случайната гора има тенденция да съчетава стотицидървета за вземане на решенияи след това обучава всяко дърво за решения на различна извадка от наблюденията.

Окончателните прогнози за случайната гора се правят чрез осредняване на прогнозите за всяко отделно дърво.

Ползите от случайните гори са многобройни. Отделните дървета за вземане на решения са склонни да се пренасочват към данните за обучение, но случайната гора може да смекчи този проблем, като осреднява резултатите от прогнозите от различни дървета. Това дава на случайните гори по-висока точност на прогнозиране, отколкото едно дърво за вземане на решения.

Алгоритъмът за случайни гори също може да ви помогне да намерите функции, които са важни във вашия набор от данни. Той лежи в основата на алгоритъма на Boruta, който избира важни функции в набор от данни.

Случайната гора се използва в различни приложения, например за предоставяне на препоръки за различни продукти на клиентите в електронната търговия.

В медицината може да се използва произволен горски алгоритъм за идентифициране на болестта на пациента чрез анализ на медицинската карта на пациента.

Също така в банковия сектор той може да се използва за лесно определяне дали клиентът е измамен или легитимен.

Как работи алгоритъмът Random Forest?

Алгоритъмът за случайни гори работи, като изпълни следните стъпки:

Стъпка 1 : Алгоритъмът избира случайни извадки от предоставения набор от данни.

Стъпка 2: Алгоритъмът ще създаде дърво за решения за всяка избрана проба. След това ще получи резултат от прогнозиране от всяко създадено дърво за решения.

Стъпка 3: След това ще се извърши гласуване за всеки прогнозиран резултат. За проблем с класификацията ще използва режим , а за проблем с регресията ще използва средно .

Стъпка 4 : И накрая, алгоритъмът ще избере резултата от най-много гласувания като окончателно предсказание.

Случайна гора на практика

Сега, след като знаете тънкостите на алгоритъма за случайни гори, нека изградим случаен класификатор на горите.

Ще изградим случаен класификатор на горите, използвайки набора от данни за диабет Pima Indians. Наборът от данни за диабета на Pima Indians включва прогнозиране на появата на диабет в рамките на 5 години въз основа на предоставените медицински подробности. Това е двоичен проблем с класификацията.

Нашата задача е да анализираме и създадем модел на набора от данни на Pima Indian Diabetes, за да предскажем дали даден пациент е изложен на риск от развитие на диабет, предвид други независими фактори.

Ще започнем с импортиране на важни пакети, които ще използваме, за да заредим набора от данни и да създадем произволен класификатор на гората. Ще използваме библиотеката scikit-learn, за да заредим и използваме алгоритъма за случайни гори.

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

Набор от данни

След това заредете набора от данни от директорията с данни:

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

Сега можем да наблюдаваме извадката от набора от данни.

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

As you can see, in our dataset we have different features with numerical values.

Let's understand the list of features we have in this dataset.

# show columns data.columns

In this dataset, there are 8 input features and 1 output / target feature. Missing values are believed to be encoded with zero values. The meaning of the variable names are as follows (from the first to the last feature):

  • Number of times pregnant.
  • Plasma glucose concentration a 2 hours in an oral glucose tolerance test.
  • Diastolic blood pressure (mm Hg).
  • Triceps skinfold thickness (mm).
  • 2-hour serum insulin (mu U/ml).
  • Body mass index (weight in kg/(height in m)^2).
  • Diabetes pedigree function.
  • Age (years).
  • Class variable (0 or 1).

Then we split the dataset into independent features and target feature. Our target feature for this dataset is called class.

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

Preprocessing the Dataset

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