Have you ever tried to plot XGBoost tree in python and visualise it in the form of tree. So here, In this recipe we will be training XGBoost Classifier, predicting the output and plot the graph.
So this is the recipe on how we visualise XGBoost tree in Python
from sklearn import datasets from sklearn import metrics from xgboost import XGBClassifier, plot_tree from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt plt.style.use('ggplot')
We have imported all the modules that would be needed like metrics, datasets, XGBClassifier , plot_tree etc. We will see the use of each modules step by step further.
We have imported inbuilt breast_cancer dataset from the module datasets and stored the data in X and the target in y. We have also used train_test_split to split the dataset into two parts such that 30% of data is in test and rest in train.
dataset = datasets.load_breast_cancer()
X = dataset.data; y = dataset.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
We have made an object for the model and fitted the train data. Then we have used the test data to test the model by predicting the output from the model for test data.
model_XGB = XGBClassifier()
expected_y = y_test
predicted_y = model_XGB.predict(X_test)
Now we are calcutaing other scores for the model using classification_report and confusion matrix by passing expected and predicted values of target of test set.
print(metrics.classification_report(expected_y, predicted_y, target_names=dataset.target_names))
We are ploting the tree for XGBClassifier by passing the required parameters from plot_tree.
plot_tree(model_XGB, num_trees=4); plt.show()
plot_tree(model_XGB, num_trees=0, rankdir='LR'); plt.show()
So the final output comes as:
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1, colsample_bynode=1, colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3, min_child_weight=1, missing=None, n_estimators=100, n_jobs=1, nthread=None, objective='binary:logistic', random_state=0, reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None, silent=None, subsample=1, verbosity=1) XGBClassifier: precision recall f1-score support malignant 0.99 0.94 0.96 70 benign 0.96 0.99 0.98 101 micro avg 0.97 0.97 0.97 171 macro avg 0.97 0.97 0.97 171 weighted avg 0.97 0.97 0.97 171 [[ 66 4] [ 1 100]]