This website works better with desktop in both themes, for mobile devices please change to light theme.

Algorithm’s Classification Boundaries#

[1]:
from mightypy.make import spiral_data
from graphpkg.static import grid_classification_boundary
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np

from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import (
    AdaBoostClassifier,
    GradientBoostingClassifier,
    RandomForestClassifier
)
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier

import warnings
warnings.filterwarnings("ignore")

2 classes, simple spiral data#

[2]:
data_limit = 30
data = np.hstack(spiral_data(data_limit=data_limit))

np.random.shuffle(data)
X, y = data[...,[0,1]], data[...,2]

sns.scatterplot(x=X[...,0],y=X[...,1],hue=y, palette='dark')
plt.show()
../_images/Intuition_classification_boundaries_3_0.png
[3]:
lr_model = LogisticRegression().fit(X,y)
dt_model = DecisionTreeClassifier().fit(X,y)
rf_model = RandomForestClassifier(n_estimators=200).fit(X, y)
ab_model = AdaBoostClassifier(n_estimators=200).fit(X, y)
gb_model = GradientBoostingClassifier().fit(X, y)
knn_model = KNeighborsClassifier().fit(X, y)
svc_model = SVC().fit(X, y)

models_list = [
    {
        "name" : "Logistic Regression",
        "function" : lr_model.predict
    },{
        "name": "Decision Tree",
        "function": dt_model.predict
    },{
        "name": "Random Forest",
        "function": rf_model.predict
    },{
        "name" : "Adaboost",
        "function" : ab_model.predict
    },{
        "name" : "Gradientboost",
        "function" : gb_model.predict
    },{
        "name" : "KNN",
        "function" : knn_model.predict
    }, {
        "name": "SVC",
        "function": svc_model.predict
    },
]

grid_classification_boundary(models_list=models_list, data=data, size=data_limit,
                            figsize=(15,15),  canvas_details=100)
plt.show()

../_images/Intuition_classification_boundaries_4_0.png

3 classes, simple spiral data#

[4]:
data_limit = 30

data = np.hstack(spiral_data(n_classes=3, data_limit=data_limit))
np.random.shuffle(data)
X, y = data[...,[0,1]], data[...,2]

sns.scatterplot(x=X[...,0],y=X[...,1],hue=y, palette='dark')
plt.show()
../_images/Intuition_classification_boundaries_6_0.png
[5]:
lr_model = LogisticRegression().fit(X,y)
dt_model = DecisionTreeClassifier().fit(X,y)
rf_model = RandomForestClassifier(n_estimators=200).fit(X, y)
ab_model = AdaBoostClassifier(n_estimators=200).fit(X, y)
gb_model = GradientBoostingClassifier().fit(X, y)
knn_model = KNeighborsClassifier().fit(X, y)
svc_model = SVC().fit(X, y)

models_list = [
    {
        "name" : "Logistic Regression",
        "function" : lr_model.predict
    },{
        "name": "Decision Tree",
        "function": dt_model.predict
    },{
        "name": "Random Forest",
        "function": rf_model.predict
    },{
        "name" : "Adaboost",
        "function" : ab_model.predict
    },{
        "name" : "Gradientboost",
        "function" : gb_model.predict
    },{
        "name" : "KNN",
        "function" : knn_model.predict
    }, {
        "name": "SVC",
        "function": svc_model.predict
    },
]

grid_classification_boundary(models_list=models_list, data=data, size=data_limit,
                            figsize=(15,15),  canvas_details=100)
plt.show()
../_images/Intuition_classification_boundaries_7_0.png

3 classes, Complex spiral data#

[6]:
data_limit = 100
data = np.hstack(spiral_data(n_classes=3, data_limit=data_limit))
np.random.shuffle(data)
X, y = data[...,[0,1]], data[...,2]

sns.scatterplot(x=X[...,0],y=X[...,1],hue=y, palette='dark')
plt.show()
../_images/Intuition_classification_boundaries_9_0.png
[7]:
lr_model = LogisticRegression().fit(X,y)
dt_model = DecisionTreeClassifier().fit(X,y)
rf_model = RandomForestClassifier(n_estimators=200).fit(X, y)
ab_model = AdaBoostClassifier(n_estimators=200).fit(X, y)
gb_model = GradientBoostingClassifier().fit(X, y)
knn_model = KNeighborsClassifier().fit(X, y)
svc_model = SVC().fit(X, y)

models_list = [
    {
        "name" : "Logistic Regression",
        "function" : lr_model.predict
    },{
        "name": "Decision Tree",
        "function": dt_model.predict
    },{
        "name": "Random Forest",
        "function": rf_model.predict
    },{
        "name" : "Adaboost",
        "function" : ab_model.predict
    },{
        "name" : "Gradientboost",
        "function" : gb_model.predict
    },{
        "name" : "KNN",
        "function" : knn_model.predict
    }, {
        "name": "SVC",
        "function": svc_model.predict
    },
]

grid_classification_boundary(models_list=models_list, data=data, size=data_limit,
                            figsize=(15,15),  canvas_details=100)
plt.show()
../_images/Intuition_classification_boundaries_10_0.png

5 classes, simple spiral data#

[8]:
data_limit = 30
data = np.hstack(spiral_data(n_classes=5, data_limit=data_limit))
np.random.shuffle(data)
X, y = data[...,[0,1]], data[...,2]

sns.scatterplot(x=X[...,0],y=X[...,1],hue=y, palette='dark')
plt.show()
../_images/Intuition_classification_boundaries_12_0.png
[9]:
lr_model = LogisticRegression().fit(X,y)
dt_model = DecisionTreeClassifier().fit(X,y)
rf_model = RandomForestClassifier(n_estimators=200).fit(X, y)
ab_model = AdaBoostClassifier(n_estimators=200).fit(X, y)
gb_model = GradientBoostingClassifier().fit(X, y)
knn_model = KNeighborsClassifier().fit(X, y)
svc_model = SVC().fit(X, y)

models_list = [
    {
        "name" : "Logistic Regression",
        "function" : lr_model.predict
    },{
        "name": "Decision Tree",
        "function": dt_model.predict
    },{
        "name": "Random Forest",
        "function": rf_model.predict
    },{
        "name" : "Adaboost",
        "function" : ab_model.predict
    },{
        "name" : "Gradientboost",
        "function" : gb_model.predict
    },{
        "name" : "KNN",
        "function" : knn_model.predict
    }, {
        "name": "SVC",
        "function": svc_model.predict
    },
]

grid_classification_boundary(models_list=models_list, data=data, size=data_limit,
                            figsize=(15,15),  canvas_details=100)
plt.show()
../_images/Intuition_classification_boundaries_13_0.png