how random forest classifier work
como isso funciona

Agora que você conhece os detalhes do algoritmo de floresta aleatória, vamos criar um classificador de floresta aleatório.

Vamos construir um classificador florestal aleatório usando o conjunto de dados de diabéticos dos índios Pima. O conjunto de dados de diabetes Pima Indians envolve prever o início do diabetes dentro de 5 anos, com base nos detalhes médicos fornecidos. Este é um problema de classificação binária.

Nossa tarefa é analisar e criar um modelo no conjunto de dados Pima Indian Diabetes para prever se um paciente em particular corre o risco de desenvolver diabetes, dados outros fatores independentes.

Começaremos importando pacotes importantes que usaremos para carregar o conjunto de dados e criar um classificador de floresta aleatório. Vamos usar o scikit-learn biblioteca para carregar e usar o algoritmo de floresta aleatória.

# import important packagesimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns%matplotlib inlinefrom sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.metrics import accuracy_scorefrom sklearn.preprocessing import StandardScaler, MinMaxScalerimport pandas_profilingfrom matplotlib import rcParamsimport warningswarnings.filterwarnings("ignore")# figure size in inchesrcParams["figure.figsize"] = 10, 6np.random.seed(42)

Conjunto de dados

Em seguida, carregue o conjunto de dados do diretório de dados:

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

Agora podemos observar a amostra do conjunto de dados.

# show sample of the datasetdata.sample(5)

5 rows

Como você pode ver, em nosso conjunto de dados, temos recursos diferentes com valores numéricos.

Vamos entender a lista de recursos que temos neste conjunto de dados.

# show columnsdata.columns

columns

Neste conjunto de dados, existem 8 recursos de entrada e 1 recurso de saída / destino. Acredita-se que os valores ausentes sejam codificados com valores zero. O significado dos nomes das variáveis ​​é o seguinte (do primeiro ao último recurso):

  • Número de vezes que está grávida.
  • Concentração de glicose no plasma duas horas em um teste de tolerância à glicose por via oral.
  • Pressão arterial diastólica (mm Hg).
  • Prega cutânea tricipital (mm).
  • Insulina sérica de 2 horas (mu U / ml).
  • Índice de massa corporal (peso em kg / (altura em m) ^ 2).
  • Função de pedigree de diabetes.
  • Anos de idade).
  • Variável de classe (0 ou 1).

Em seguida, dividimos o conjunto de dados em recursos independentes e de destino. Nosso recurso de destino para esse conjunto de dados é chamado classe.

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

Pré-processamento do Conjunto de Dados

Antes de criarmos um modelo, precisamos padronizar nossos recursos independentes usando o standardScaler método do scikit-learn.

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

Você pode saber mais sobre como e por que padronizar seus dados neste artigo clicando em aqui.

Dividindo o conjunto de dados em dados de Treinamento e Teste

Agora, dividimos nosso conjunto de dados processado em dados de treinamento e teste. Os dados de teste serão 10% de todo o conjunto de dados processados.

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

Construindo o Classificador Aleatório de Floresta

Agora é hora de criar nosso classificador de floresta aleatório e treiná-lo no conjunto de trens. Também passaremos o número de árvores (100) na floresta que queremos usar através do parâmetro chamado n_estimators.

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

default parameters

A saída acima mostra diferentes valores de parâmetros do classificador aleatório de floresta usado durante o processo de treinamento nos dados do trem.

Após o treinamento, podemos executar a previsão nos dados do teste.

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

Em seguida, verificamos a precisão usando valores reais e previstos dos dados de teste.

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

Precisão: 0.8051948051948052

Nossa precisão é de cerca de 80,5%, o que é bom. Mas sempre podemos melhorar.

Identificar recursos importantes

Como eu disse antes, também podemos verificar os recursos importantes usando o feature_importances_ variável do algoritmo de floresta aleatória no scikit-learn.

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

feature importance list
Caracteristicas importantes

A figura acima mostra a importância relativa dos recursos e sua contribuição para o modelo. Também podemos visualizar esses recursos e suas pontuações usando as bibliotecas seaborn e matplotlib.

# visualize important featuers# Creating a bar plotsns.barplot(x=feature_importances_df.feature, y=feature_importances_df.importance)# Add labels to yourplt.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()

visualize feature importance

Na figura acima, você pode ver o recurso triceps_skinfold_thickness tem baixa importância e não contribui muito para a previsão.

Isso significa que podemos remover esse recurso e treinar nosso classificador aleatório de floresta novamente e, em seguida, ver se ele pode melhorar seu desempenho nos dados de teste.

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

Vamos treinar o algoritmo de floresta aleatória com os recursos processados ​​selecionados do nosso conjunto de dados, executar previsões e, em seguida, encontrar a precisão do modelo.

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

Precisão: 0.8181818181818182

Agora, a precisão do modelo aumentou de 80,5% para 81,8% depois que removemos o recurso menos importante chamado triceps_skinfold_thickness.

Isso sugere que é muito importante verificar recursos importantes e verificar se você pode remover os recursos menos importantes para aumentar o desempenho do seu modelo.

Algoritmos baseados em árvore são realmente importantes para todo cientista de dados aprender. Neste artigo, você aprendeu o básico de algoritmos baseados em árvore e como criar um modelo de classificação usando o algoritmo de floresta aleatória.

Também recomendo que você tente outros tipos de algoritmos baseados em árvore, como o Algoritmo extra-árvores.

Você pode baixar o conjunto de dados e o bloco de anotações usados ​​neste artigo aqui: https://github.com/Davisy/Random-Forest-classification-Tutorial

Parabéns, você chegou ao final deste artigo!

Se você aprendeu algo novo ou gostou de ler este artigo, compartilhe-o para que outros possam vê-lo. Até lá, até o próximo post! Também posso ser encontrado no Twitter @Davis_McDavid