CS 307: Week 11

# Basics
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings

# Machine Learning
from sklearn.datasets import make_blobs
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.mixture import GaussianMixture
from sklearn.ensemble import IsolationForest
# Deal with pandas versus seaborn issues
warnings.simplefilter(action="ignore", category=FutureWarning)

Dimension Reduction

X, _ = make_blobs(n_samples=500, n_features=50, cluster_std=5)
X
array([[ 10.17269451,   3.49621517,   0.93013758, ...,  -8.11226321,
         -6.21200063,   3.209094  ],
       [ -2.72794725,  -0.14436952,   9.0100893 , ...,  -1.5114895 ,
        -12.92370089,  -3.19291496],
       [  1.6528662 ,   4.43967606,   1.5429667 , ...,  -5.91847788,
         -2.26235952,  -2.05393545],
       ...,
       [ -6.17621516,   8.78322719,   3.90233933, ...,   2.36327881,
        -14.64777359,  -1.99756241],
       [  3.28858088,  -2.29186493,  -4.3438314 , ...,   1.41749562,
          2.54734283, -17.40846237],
       [ 12.01911868,   6.35893824,  -2.74117713, ...,   2.52643442,
          0.35434916,  -4.55656682]])
X.shape
(500, 50)
sns.scatterplot(x=X[:, 0], y=X[:, 1])
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

pca = PCA(n_components=0.75)
pca.fit(X)
PCA(n_components=0.75)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
X_pca = pca.fit_transform(X)
X_pca
array([[ 31.89077094, -11.4244946 ,   3.56788724, ...,   3.3458096 ,
         -1.99002678,  -7.63500724],
       [ 37.73907407, -10.6243658 ,  -8.1071009 , ...,  -1.21632252,
          2.20330235,  -1.43010385],
       [ 33.47431956,  -8.97845509,  -7.80269135, ...,   3.71999293,
          8.94516917,   0.60358975],
       ...,
       [ -2.19161844,  41.27552166,   4.77198581, ...,   6.61928782,
          4.1364567 ,   4.67362872],
       [-31.30842446, -15.69988365,  -1.11601459, ...,   4.6702658 ,
         -1.20841298,   5.69836199],
       [ 26.74673295, -22.19718589,   7.19343428, ...,   4.83253565,
          3.99521426,  -3.16960512]])
X_pca.shape
(500, 20)
sns.scatterplot(x=X_pca[:, 0], y=X_pca[:, 1])
plt.xlabel("PCA 1")
plt.ylabel("PCA 2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

Clustering

X, _ = make_blobs(n_samples=500, n_features=2, cluster_std=1)
sns.scatterplot(x=X[:, 0], y=X[:, 1])
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

km = KMeans()
km.fit(X)
KMeans()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
clusters = km.fit_predict(X)
clusters
array([1, 6, 0, 6, 1, 2, 7, 4, 0, 0, 3, 1, 6, 1, 2, 5, 4, 0, 4, 2, 2, 1,
       6, 2, 0, 1, 7, 4, 3, 2, 7, 6, 4, 2, 7, 6, 3, 0, 5, 3, 5, 1, 3, 2,
       4, 3, 2, 7, 2, 0, 2, 1, 2, 3, 3, 1, 0, 0, 5, 3, 2, 3, 0, 1, 0, 7,
       1, 1, 1, 5, 7, 5, 1, 0, 4, 6, 0, 5, 4, 7, 7, 2, 0, 2, 4, 3, 3, 1,
       1, 7, 6, 5, 2, 5, 1, 7, 4, 3, 0, 7, 7, 7, 2, 3, 3, 6, 3, 5, 7, 4,
       5, 6, 4, 5, 5, 3, 3, 4, 7, 2, 0, 6, 4, 4, 3, 0, 1, 2, 3, 1, 5, 7,
       2, 3, 1, 1, 1, 7, 0, 4, 6, 7, 5, 3, 2, 3, 0, 5, 5, 2, 3, 0, 2, 6,
       5, 7, 2, 7, 2, 4, 2, 6, 3, 7, 4, 2, 3, 7, 6, 4, 6, 5, 5, 4, 1, 1,
       3, 0, 4, 4, 4, 0, 5, 2, 1, 7, 2, 3, 3, 4, 4, 1, 3, 3, 2, 7, 1, 7,
       1, 6, 2, 0, 4, 4, 5, 3, 7, 1, 3, 0, 4, 4, 2, 2, 0, 3, 6, 2, 7, 5,
       3, 1, 3, 0, 0, 6, 7, 5, 7, 6, 3, 2, 3, 5, 0, 4, 2, 7, 6, 1, 3, 6,
       0, 0, 2, 3, 5, 4, 0, 7, 7, 5, 2, 2, 1, 2, 3, 0, 5, 5, 7, 4, 2, 1,
       3, 4, 3, 3, 7, 7, 6, 6, 7, 1, 6, 7, 5, 7, 2, 1, 6, 3, 3, 4, 1, 3,
       2, 3, 1, 3, 1, 0, 2, 0, 3, 7, 1, 4, 3, 4, 7, 2, 3, 6, 7, 5, 4, 0,
       3, 4, 4, 6, 1, 3, 1, 5, 4, 6, 4, 2, 2, 5, 5, 1, 1, 7, 1, 2, 3, 2,
       5, 5, 5, 3, 1, 2, 3, 4, 3, 3, 3, 5, 3, 7, 2, 1, 0, 2, 6, 2, 4, 2,
       3, 1, 7, 7, 2, 2, 4, 6, 3, 4, 3, 6, 4, 5, 2, 3, 7, 3, 6, 1, 2, 2,
       6, 4, 5, 6, 3, 2, 0, 6, 1, 0, 7, 5, 2, 1, 5, 7, 7, 5, 1, 7, 7, 3,
       5, 7, 7, 2, 4, 2, 2, 7, 3, 6, 6, 2, 3, 6, 7, 7, 2, 1, 1, 3, 2, 1,
       6, 3, 5, 4, 6, 2, 2, 2, 1, 3, 4, 1, 7, 0, 2, 3, 3, 4, 7, 1, 6, 6,
       5, 7, 1, 3, 0, 4, 0, 2, 5, 6, 6, 4, 3, 7, 3, 3, 5, 3, 6, 0, 7, 4,
       5, 6, 2, 7, 3, 1, 0, 3, 4, 7, 3, 2, 3, 7, 3, 5, 2, 3, 0, 0, 7, 7,
       5, 3, 2, 3, 3, 5, 1, 2, 4, 2, 4, 6, 0, 6, 1, 0], dtype=int32)
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=pd.Categorical(clusters))
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

km3 = KMeans(n_clusters=3)
km3.fit(X)
clusters = km3.fit_predict(X)
clusters
array([0, 0, 1, 0, 0, 2, 1, 0, 1, 1, 2, 0, 0, 0, 2, 1, 0, 1, 0, 2, 2, 0,
       0, 2, 1, 0, 1, 0, 2, 2, 1, 0, 0, 2, 1, 0, 2, 1, 1, 2, 1, 0, 2, 2,
       0, 2, 2, 1, 2, 1, 2, 0, 2, 2, 2, 0, 1, 1, 1, 2, 2, 2, 1, 0, 1, 1,
       0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 2, 1, 2, 0, 2, 2, 0,
       0, 1, 0, 1, 2, 1, 0, 1, 0, 2, 1, 1, 1, 1, 2, 2, 2, 0, 2, 1, 1, 0,
       1, 0, 0, 1, 1, 2, 2, 0, 1, 2, 1, 0, 0, 0, 2, 1, 0, 2, 2, 0, 1, 1,
       2, 2, 0, 0, 0, 1, 1, 0, 0, 1, 1, 2, 2, 2, 1, 1, 1, 2, 2, 1, 2, 0,
       1, 1, 2, 1, 2, 0, 2, 0, 2, 1, 0, 2, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0,
       2, 1, 0, 0, 0, 1, 1, 2, 0, 1, 2, 2, 2, 0, 0, 0, 2, 2, 2, 1, 0, 1,
       0, 0, 2, 1, 0, 0, 1, 2, 1, 0, 2, 1, 0, 0, 2, 2, 1, 2, 0, 2, 1, 1,
       2, 0, 2, 1, 1, 0, 1, 1, 1, 0, 2, 2, 2, 1, 1, 0, 2, 1, 0, 0, 2, 0,
       1, 1, 2, 2, 1, 0, 1, 1, 1, 1, 2, 2, 0, 2, 2, 1, 1, 1, 1, 0, 2, 0,
       2, 0, 2, 2, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 2, 0, 0, 2, 2, 0, 0, 2,
       2, 2, 0, 2, 0, 1, 2, 1, 2, 1, 0, 0, 2, 0, 1, 2, 2, 0, 1, 1, 0, 1,
       2, 0, 0, 0, 0, 2, 0, 1, 0, 0, 0, 2, 2, 1, 1, 0, 0, 1, 0, 2, 2, 2,
       1, 1, 1, 2, 0, 2, 2, 0, 2, 2, 2, 1, 2, 1, 2, 0, 1, 2, 0, 2, 0, 2,
       2, 0, 1, 1, 2, 2, 0, 0, 2, 0, 2, 0, 0, 1, 2, 2, 1, 2, 0, 0, 2, 2,
       0, 0, 1, 0, 2, 2, 1, 0, 0, 1, 1, 1, 2, 0, 1, 1, 1, 1, 0, 1, 1, 2,
       1, 1, 1, 2, 0, 2, 2, 1, 2, 0, 0, 2, 2, 0, 1, 1, 2, 0, 0, 2, 2, 0,
       0, 2, 1, 0, 0, 2, 2, 2, 0, 2, 0, 0, 1, 1, 2, 2, 2, 0, 1, 0, 0, 0,
       1, 1, 0, 2, 1, 0, 1, 2, 1, 0, 0, 0, 2, 1, 2, 2, 1, 2, 0, 1, 1, 0,
       1, 0, 2, 1, 2, 0, 1, 2, 0, 1, 2, 2, 2, 1, 2, 1, 2, 2, 1, 1, 1, 1,
       1, 2, 2, 2, 2, 1, 0, 2, 0, 2, 0, 0, 1, 0, 0, 1], dtype=int32)
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=pd.Categorical(clusters))
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

Density Estimation

X, _ = make_blobs(n_samples=500, centers=2, n_features=1, cluster_std=[1.5, 3], random_state=42)
plt.hist(X, bins=20, density=True)
plt.xlabel("X")
plt.ylabel("Frequency")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

gmm = GaussianMixture(n_components=2)
gmm.fit(X)
gmm.predict_proba(X)
array([[1.26818553e-03, 9.98731814e-01],
       [1.00000000e+00, 1.59175223e-28],
       [1.00000000e+00, 1.61485806e-18],
       [1.00000000e+00, 2.70107719e-14],
       [6.31287489e-04, 9.99368713e-01],
       [1.00000000e+00, 5.63768604e-14],
       [7.88257983e-04, 9.99211742e-01],
       [4.52189518e-03, 9.95478105e-01],
       [4.74357664e-05, 9.99952564e-01],
       [1.19807435e-02, 9.88019257e-01],
       [1.00000000e+00, 8.41779417e-18],
       [1.00000000e+00, 1.18563301e-29],
       [1.00000000e+00, 4.54494624e-20],
       [1.05555724e-04, 9.99894444e-01],
       [1.00000000e+00, 1.90062307e-22],
       [1.96286251e-04, 9.99803714e-01],
       [5.58181276e-05, 9.99944182e-01],
       [1.00000000e+00, 6.49582212e-26],
       [1.00000000e+00, 2.63628609e-16],
       [2.21543523e-04, 9.99778456e-01],
       [9.55179254e-05, 9.99904482e-01],
       [9.48250855e-05, 9.99905175e-01],
       [1.68979346e-04, 9.99831021e-01],
       [1.00000000e+00, 4.38461851e-21],
       [1.00000000e+00, 1.21614544e-14],
       [2.16133093e-04, 9.99783867e-01],
       [1.14945843e-04, 9.99885054e-01],
       [1.00000000e+00, 2.87834762e-11],
       [6.94550430e-04, 9.99305450e-01],
       [9.40203583e-05, 9.99905980e-01],
       [1.00000000e+00, 7.45473466e-12],
       [1.00000000e+00, 1.73398289e-26],
       [7.20540939e-05, 9.99927946e-01],
       [9.98087831e-01, 1.91216855e-03],
       [1.00000000e+00, 4.57700753e-15],
       [1.00000000e+00, 3.69664831e-12],
       [1.07946092e-04, 9.99892054e-01],
       [9.07375449e-05, 9.99909262e-01],
       [2.21180099e-03, 9.97788199e-01],
       [1.98794215e-03, 9.98012058e-01],
       [9.99998822e-01, 1.17824044e-06],
       [9.99806065e-01, 1.93935220e-04],
       [5.33803182e-05, 9.99946620e-01],
       [1.90729813e-04, 9.99809270e-01],
       [1.00000000e+00, 1.98560827e-14],
       [9.99670193e-01, 3.29807059e-04],
       [1.00000000e+00, 1.83330866e-16],
       [6.97710151e-05, 9.99930229e-01],
       [2.18450465e-03, 9.97815495e-01],
       [1.00000000e+00, 4.59073661e-16],
       [1.00000000e+00, 1.36257041e-11],
       [1.00000000e+00, 2.24358916e-10],
       [9.99981364e-01, 1.86355051e-05],
       [1.29303794e-04, 9.99870696e-01],
       [1.40932039e-02, 9.85906796e-01],
       [1.34047909e-03, 9.98659521e-01],
       [2.45427492e-03, 9.97545725e-01],
       [1.00000000e+00, 6.85066094e-14],
       [9.99999999e-01, 1.38746472e-09],
       [1.06157735e-04, 9.99893842e-01],
       [1.16194304e-04, 9.99883806e-01],
       [8.70624668e-05, 9.99912938e-01],
       [2.66555774e-04, 9.99733444e-01],
       [1.00000000e+00, 2.19292802e-15],
       [3.76566336e-04, 9.99623434e-01],
       [9.99999989e-01, 1.05915756e-08],
       [3.95182315e-04, 9.99604818e-01],
       [1.00000000e+00, 7.75341315e-15],
       [7.74270917e-04, 9.99225729e-01],
       [1.00000000e+00, 1.42783286e-15],
       [1.00000000e+00, 8.53183191e-21],
       [1.00199142e-03, 9.98998009e-01],
       [5.88782630e-05, 9.99941122e-01],
       [1.03408204e-02, 9.89659180e-01],
       [8.65244834e-05, 9.99913476e-01],
       [2.51354212e-01, 7.48645788e-01],
       [1.00000000e+00, 1.30444456e-15],
       [1.00000000e+00, 1.53974853e-14],
       [1.50580459e-04, 9.99849420e-01],
       [2.39282359e-03, 9.97607176e-01],
       [9.99999770e-01, 2.30184013e-07],
       [1.00000000e+00, 3.67309369e-18],
       [4.59392199e-05, 9.99954061e-01],
       [7.16004392e-05, 9.99928400e-01],
       [1.00000000e+00, 2.82895224e-11],
       [1.00000000e+00, 1.26476797e-13],
       [2.20110122e-04, 9.99779890e-01],
       [1.23332296e-04, 9.99876668e-01],
       [1.59949423e-04, 9.99840051e-01],
       [1.00000000e+00, 3.63535152e-11],
       [9.66225392e-05, 9.99903377e-01],
       [1.00000000e+00, 6.47500066e-26],
       [6.61158392e-05, 9.99933884e-01],
       [1.00000000e+00, 2.33203928e-11],
       [9.99999447e-01, 5.52752427e-07],
       [6.33802405e-05, 9.99936620e-01],
       [9.99999959e-01, 4.09098750e-08],
       [2.66116002e-04, 9.99733884e-01],
       [1.00000000e+00, 5.21170655e-12],
       [1.00000000e+00, 2.37779167e-47],
       [1.14695370e-03, 9.98853046e-01],
       [1.00000000e+00, 1.81324995e-15],
       [9.99993954e-01, 6.04639611e-06],
       [1.00000000e+00, 2.47868294e-19],
       [1.00000000e+00, 4.94719252e-10],
       [2.15973739e-04, 9.99784026e-01],
       [1.00000000e+00, 8.27757703e-16],
       [3.32441945e-03, 9.96675581e-01],
       [9.99999986e-01, 1.43109584e-08],
       [1.00000000e+00, 7.80164160e-14],
       [1.00000000e+00, 1.34377649e-13],
       [5.57826747e-04, 9.99442173e-01],
       [5.50472254e-05, 9.99944953e-01],
       [5.23116931e-05, 9.99947688e-01],
       [4.66591820e-04, 9.99533408e-01],
       [1.00000000e+00, 4.24668114e-22],
       [4.59036253e-05, 9.99954096e-01],
       [3.59804402e-03, 9.96401956e-01],
       [1.00000000e+00, 1.24600645e-30],
       [1.49958494e-04, 9.99850042e-01],
       [1.00000000e+00, 8.13952370e-19],
       [5.61148239e-02, 9.43885176e-01],
       [9.99000530e-04, 9.99000999e-01],
       [1.00000000e+00, 3.87751686e-35],
       [6.21701903e-05, 9.99937830e-01],
       [2.12055247e-04, 9.99787945e-01],
       [2.87810461e-04, 9.99712190e-01],
       [1.15207046e-04, 9.99884793e-01],
       [1.46500040e-04, 9.99853500e-01],
       [3.21273925e-03, 9.96787261e-01],
       [9.78227505e-04, 9.99021772e-01],
       [4.10710203e-04, 9.99589290e-01],
       [2.86951089e-04, 9.99713049e-01],
       [6.14626554e-05, 9.99938537e-01],
       [5.53583959e-05, 9.99944642e-01],
       [3.89111009e-03, 9.96108890e-01],
       [5.85651313e-05, 9.99941435e-01],
       [9.99996712e-01, 3.28792830e-06],
       [1.00000000e+00, 1.14914187e-18],
       [1.00000000e+00, 2.30945714e-29],
       [2.00880365e-03, 9.97991196e-01],
       [1.00000000e+00, 1.87482900e-22],
       [1.00000000e+00, 1.26342155e-20],
       [1.00000000e+00, 1.07288753e-15],
       [3.69696186e-04, 9.99630304e-01],
       [1.76598765e-02, 9.82340124e-01],
       [1.38396805e-04, 9.99861603e-01],
       [9.99977619e-01, 2.23811609e-05],
       [9.99982310e-01, 1.76902201e-05],
       [9.99999982e-01, 1.82280151e-08],
       [1.00000000e+00, 7.93124767e-20],
       [1.00000000e+00, 4.41358153e-23],
       [1.01871393e-03, 9.98981286e-01],
       [2.81147506e-03, 9.97188525e-01],
       [1.11026044e-04, 9.99888974e-01],
       [1.45172590e-04, 9.99854827e-01],
       [2.18075414e-03, 9.97819246e-01],
       [1.48615489e-04, 9.99851385e-01],
       [9.07333841e-04, 9.99092666e-01],
       [1.00000000e+00, 3.77781147e-29],
       [9.99999971e-01, 2.91063461e-08],
       [4.19457271e-03, 9.95805427e-01],
       [8.46806802e-05, 9.99915319e-01],
       [1.53001573e-03, 9.98469984e-01],
       [1.00202120e-03, 9.98997979e-01],
       [1.00000000e+00, 7.52173171e-22],
       [5.62060753e-04, 9.99437939e-01],
       [1.00000000e+00, 1.07678879e-19],
       [5.23623539e-05, 9.99947638e-01],
       [1.00000000e+00, 5.15217958e-30],
       [9.99999998e-01, 1.67324739e-09],
       [9.99999997e-01, 2.85700594e-09],
       [1.00000000e+00, 2.34175937e-14],
       [2.36730233e-03, 9.97632698e-01],
       [2.93772631e-03, 9.97062274e-01],
       [2.02481030e-02, 9.79751897e-01],
       [9.99992400e-01, 7.60027084e-06],
       [6.55546991e-04, 9.99344453e-01],
       [2.88246863e-04, 9.99711753e-01],
       [1.00000000e+00, 1.39749308e-10],
       [1.67140329e-04, 9.99832860e-01],
       [9.76915919e-05, 9.99902308e-01],
       [1.00000000e+00, 6.37031067e-24],
       [5.08384083e-04, 9.99491616e-01],
       [8.21627098e-05, 9.99917837e-01],
       [1.36138357e-04, 9.99863862e-01],
       [1.69508641e-01, 8.30491359e-01],
       [9.34908717e-05, 9.99906509e-01],
       [1.00000000e+00, 1.96729960e-16],
       [9.07538775e-01, 9.24612249e-02],
       [1.00000000e+00, 1.24982879e-15],
       [7.26312411e-05, 9.99927369e-01],
       [2.45249113e-04, 9.99754751e-01],
       [1.00000000e+00, 4.17016588e-11],
       [1.00000000e+00, 1.69864806e-23],
       [1.07059671e-03, 9.98929403e-01],
       [5.14392542e-05, 9.99948561e-01],
       [1.00000000e+00, 1.26284481e-28],
       [1.45316829e-01, 8.54683171e-01],
       [1.00000000e+00, 1.97410686e-13],
       [6.24451503e-02, 9.37554850e-01],
       [1.00000000e+00, 8.94975827e-27],
       [1.00000000e+00, 4.26292171e-15],
       [1.00000000e+00, 1.06498061e-14],
       [3.38494058e-04, 9.99661506e-01],
       [1.00000000e+00, 3.91611049e-25],
       [1.00000000e+00, 1.21666893e-27],
       [9.99999996e-01, 3.93509378e-09],
       [5.54615318e-05, 9.99944538e-01],
       [1.46546851e-02, 9.85345315e-01],
       [1.00000000e+00, 4.20404100e-10],
       [1.96051394e-03, 9.98039486e-01],
       [5.35672664e-02, 9.46432734e-01],
       [1.00000000e+00, 3.70643965e-27],
       [5.10935293e-04, 9.99489065e-01],
       [9.99999975e-01, 2.49308904e-08],
       [1.41893959e-03, 9.98581060e-01],
       [7.29438081e-05, 9.99927056e-01],
       [1.00000000e+00, 8.31581952e-24],
       [3.12955565e-03, 9.96870444e-01],
       [1.00000000e+00, 4.71080555e-18],
       [1.00000000e+00, 9.54723281e-21],
       [1.00000000e+00, 4.11600412e-11],
       [9.89180979e-05, 9.99901082e-01],
       [5.00189692e-05, 9.99949981e-01],
       [1.00000000e+00, 1.65061209e-12],
       [4.60024744e-03, 9.95399753e-01],
       [1.00000000e+00, 3.83147596e-16],
       [3.08398934e-04, 9.99691601e-01],
       [1.00000000e+00, 7.35774353e-23],
       [9.99999999e-01, 1.04341494e-09],
       [1.53798697e-04, 9.99846201e-01],
       [2.83063062e-03, 9.97169369e-01],
       [1.00000000e+00, 6.07726764e-22],
       [1.00000000e+00, 8.66371504e-11],
       [9.99994534e-01, 5.46595676e-06],
       [9.99999981e-01, 1.91642943e-08],
       [1.00000000e+00, 1.68870338e-24],
       [6.02031052e-02, 9.39796895e-01],
       [1.00000000e+00, 7.00137711e-27],
       [1.52466796e-02, 9.84753320e-01],
       [6.95604856e-04, 9.99304395e-01],
       [6.45178670e-04, 9.99354821e-01],
       [9.99999970e-01, 2.99489515e-08],
       [6.13875288e-04, 9.99386125e-01],
       [9.08606842e-04, 9.99091393e-01],
       [1.00000000e+00, 9.32823818e-26],
       [9.99999998e-01, 2.30875788e-09],
       [4.54696889e-05, 9.99954530e-01],
       [9.82744935e-01, 1.72550646e-02],
       [9.97130138e-01, 2.86986185e-03],
       [2.05295556e-04, 9.99794704e-01],
       [1.00000000e+00, 8.64720662e-28],
       [9.97762234e-04, 9.99002238e-01],
       [1.47417022e-04, 9.99852583e-01],
       [1.00000000e+00, 2.64970038e-10],
       [8.96830557e-05, 9.99910317e-01],
       [1.00000000e+00, 1.42955095e-16],
       [9.99999991e-01, 9.24222243e-09],
       [1.00000000e+00, 1.26701306e-12],
       [1.00000000e+00, 2.13720181e-17],
       [1.00000000e+00, 7.93041645e-36],
       [1.41385542e-04, 9.99858614e-01],
       [8.48049163e-05, 9.99915195e-01],
       [9.92751527e-01, 7.24847344e-03],
       [1.00000000e+00, 1.16945576e-20],
       [1.00000000e+00, 4.06890764e-16],
       [6.71081968e-05, 9.99932892e-01],
       [1.83076922e-04, 9.99816923e-01],
       [1.00000000e+00, 9.54837859e-25],
       [1.06284689e-04, 9.99893715e-01],
       [5.38924238e-03, 9.94610758e-01],
       [4.15458702e-03, 9.95845413e-01],
       [1.00000000e+00, 5.05545536e-12],
       [5.49416474e-04, 9.99450584e-01],
       [9.15220032e-05, 9.99908478e-01],
       [9.99998549e-01, 1.45118190e-06],
       [9.27318237e-04, 9.99072682e-01],
       [3.13870862e-04, 9.99686129e-01],
       [1.00000000e+00, 1.57939772e-21],
       [1.00000000e+00, 3.55777442e-19],
       [1.00000000e+00, 9.91699910e-17],
       [1.84624853e-03, 9.98153751e-01],
       [1.23153244e-04, 9.99876847e-01],
       [1.11470891e-04, 9.99888529e-01],
       [1.85104918e-04, 9.99814895e-01],
       [4.67948465e-04, 9.99532052e-01],
       [4.01487583e-04, 9.99598512e-01],
       [1.00000000e+00, 1.04568874e-11],
       [2.85546707e-04, 9.99714453e-01],
       [1.00000000e+00, 1.04456756e-25],
       [1.00000000e+00, 1.67273397e-17],
       [5.27475484e-03, 9.94725245e-01],
       [1.00000000e+00, 1.89028602e-16],
       [5.01302953e-05, 9.99949870e-01],
       [3.87453120e-04, 9.99612547e-01],
       [1.00000000e+00, 3.77709852e-18],
       [1.11901551e-03, 9.98880984e-01],
       [9.99995479e-01, 4.52075367e-06],
       [1.00000000e+00, 4.33556740e-13],
       [1.00000000e+00, 2.67956487e-21],
       [5.39453059e-04, 9.99460547e-01],
       [6.07759760e-04, 9.99392240e-01],
       [1.00000000e+00, 4.11485372e-11],
       [1.00000000e+00, 5.97826527e-36],
       [9.99999999e-01, 1.42470334e-09],
       [9.99999517e-01, 4.83277399e-07],
       [1.00000000e+00, 8.73202422e-23],
       [1.00000000e+00, 2.50881754e-20],
       [3.09047326e-04, 9.99690953e-01],
       [1.00000000e+00, 6.68488630e-16],
       [1.00000000e+00, 3.13853148e-18],
       [1.00000000e+00, 4.84219871e-15],
       [9.99996825e-01, 3.17492845e-06],
       [9.99999954e-01, 4.60742010e-08],
       [1.00000000e+00, 8.43828062e-32],
       [1.86788424e-04, 9.99813212e-01],
       [1.00000000e+00, 6.53295104e-19],
       [1.00000000e+00, 9.34786835e-12],
       [1.64277602e-03, 9.98357224e-01],
       [2.15156385e-04, 9.99784844e-01],
       [1.50426509e-03, 9.98495735e-01],
       [1.00000000e+00, 2.28933303e-15],
       [7.90985631e-05, 9.99920901e-01],
       [1.00000000e+00, 1.78510136e-10],
       [1.00000000e+00, 3.75493142e-21],
       [1.19275029e-03, 9.98807250e-01],
       [1.00000000e+00, 5.38463682e-23],
       [1.00000000e+00, 1.26320844e-13],
       [1.00000000e+00, 1.36792942e-11],
       [6.51896440e-04, 9.99348104e-01],
       [4.48184398e-04, 9.99551816e-01],
       [1.00000000e+00, 6.46358158e-12],
       [9.99999999e-01, 5.60766647e-10],
       [3.33390403e-04, 9.99666610e-01],
       [1.00000000e+00, 9.79777766e-21],
       [1.00000000e+00, 1.71387588e-17],
       [3.60626596e-04, 9.99639373e-01],
       [1.00000000e+00, 5.35796400e-20],
       [6.48950233e-05, 9.99935105e-01],
       [3.71173133e-04, 9.99628827e-01],
       [7.61481951e-05, 9.99923852e-01],
       [9.99999999e-01, 6.11266853e-10],
       [1.00000000e+00, 1.83789410e-29],
       [7.01655094e-04, 9.99298345e-01],
       [1.00000000e+00, 3.00795505e-17],
       [1.00000000e+00, 6.41401871e-29],
       [1.75012679e-03, 9.98249873e-01],
       [1.00000000e+00, 3.66782873e-17],
       [1.00000000e+00, 2.46253266e-21],
       [1.00000000e+00, 7.37087197e-14],
       [1.00000000e+00, 1.82469207e-33],
       [6.25905730e-05, 9.99937409e-01],
       [6.02573849e-04, 9.99397426e-01],
       [5.60640089e-04, 9.99439360e-01],
       [2.12682924e-03, 9.97873171e-01],
       [1.33340999e-04, 9.99866659e-01],
       [1.00000000e+00, 2.21289398e-15],
       [7.78460173e-05, 9.99922154e-01],
       [1.31312110e-03, 9.98686879e-01],
       [1.00000000e+00, 5.95110635e-11],
       [1.30028981e-04, 9.99869971e-01],
       [7.72621091e-04, 9.99227379e-01],
       [1.00000000e+00, 3.00573351e-23],
       [1.00000000e+00, 2.61478777e-18],
       [1.00000000e+00, 6.18274122e-21],
       [1.00000000e+00, 1.21484028e-19],
       [1.93275008e-04, 9.99806725e-01],
       [1.13681158e-04, 9.99886319e-01],
       [3.99417373e-04, 9.99600583e-01],
       [9.08092320e-04, 9.99091908e-01],
       [1.00000000e+00, 1.98457450e-11],
       [4.55678459e-05, 9.99954432e-01],
       [9.99999999e-01, 1.28683727e-09],
       [2.12472259e-02, 9.78752774e-01],
       [2.18167390e-03, 9.97818326e-01],
       [1.88858052e-04, 9.99811142e-01],
       [1.00000000e+00, 3.51005033e-11],
       [1.00000000e+00, 1.97724893e-20],
       [1.00000000e+00, 3.59225766e-13],
       [9.99993495e-01, 6.50463916e-06],
       [1.00000000e+00, 9.00639630e-28],
       [1.00000000e+00, 1.09806448e-14],
       [1.00000000e+00, 3.13532433e-12],
       [1.00000000e+00, 8.75836159e-21],
       [1.00000000e+00, 4.74195888e-18],
       [9.99999996e-01, 4.00304448e-09],
       [2.34969206e-04, 9.99765031e-01],
       [1.00000000e+00, 1.39672277e-21],
       [1.00000000e+00, 5.08269929e-18],
       [1.00000000e+00, 9.09284410e-24],
       [5.02796149e-04, 9.99497204e-01],
       [1.93940449e-04, 9.99806060e-01],
       [1.00000000e+00, 2.46790140e-25],
       [1.00000000e+00, 5.35459466e-17],
       [1.00000000e+00, 3.53786543e-36],
       [1.00000000e+00, 2.15548989e-14],
       [4.79678292e-04, 9.99520322e-01],
       [1.00000000e+00, 4.74137268e-10],
       [7.01275329e-04, 9.99298725e-01],
       [1.00000000e+00, 7.00328330e-27],
       [9.99945673e-01, 5.43272277e-05],
       [1.00000000e+00, 4.50976122e-34],
       [1.00000000e+00, 1.79270235e-13],
       [9.99953053e-01, 4.69470836e-05],
       [1.00000000e+00, 1.68770466e-30],
       [9.99999987e-01, 1.34656107e-08],
       [1.00000000e+00, 1.95866310e-15],
       [1.80681130e-04, 9.99819319e-01],
       [1.00000000e+00, 2.66957046e-16],
       [9.99999999e-01, 1.21169382e-09],
       [1.41738751e-04, 9.99858261e-01],
       [3.77338852e-04, 9.99622661e-01],
       [1.01229742e-04, 9.99898770e-01],
       [4.79826985e-05, 9.99952017e-01],
       [1.00000000e+00, 4.20441791e-33],
       [6.70153245e-04, 9.99329847e-01],
       [6.28860241e-05, 9.99937114e-01],
       [1.00000000e+00, 1.73521361e-16],
       [6.38880990e-03, 9.93611190e-01],
       [1.49443794e-04, 9.99850556e-01],
       [6.53210835e-01, 3.46789165e-01],
       [1.00000000e+00, 1.37124816e-19],
       [5.64760895e-03, 9.94352391e-01],
       [9.99999994e-01, 6.08752989e-09],
       [1.00000000e+00, 5.89822295e-24],
       [1.00000000e+00, 2.48925345e-13],
       [5.23008512e-04, 9.99476991e-01],
       [1.00000000e+00, 1.26713538e-11],
       [1.00000000e+00, 1.94531172e-18],
       [4.90250715e-04, 9.99509749e-01],
       [1.00000000e+00, 1.72114076e-20],
       [4.77857374e-04, 9.99522143e-01],
       [3.26057254e-03, 9.96739427e-01],
       [1.38759928e-03, 9.98612401e-01],
       [6.73856118e-04, 9.99326144e-01],
       [8.87084385e-03, 9.91129156e-01],
       [2.32241226e-04, 9.99767759e-01],
       [2.19241339e-04, 9.99780759e-01],
       [3.74154045e-04, 9.99625846e-01],
       [1.40059197e-03, 9.98599408e-01],
       [1.00000000e+00, 3.98500004e-17],
       [9.99999649e-01, 3.50981911e-07],
       [1.00000000e+00, 1.98405130e-10],
       [9.99999898e-01, 1.02480609e-07],
       [1.00000000e+00, 2.97036917e-22],
       [8.37761208e-05, 9.99916224e-01],
       [1.00000000e+00, 2.20349007e-11],
       [5.81424271e-04, 9.99418576e-01],
       [9.99999719e-01, 2.81101292e-07],
       [7.24296097e-04, 9.99275704e-01],
       [1.00000000e+00, 1.28364199e-32],
       [5.66739121e-05, 9.99943326e-01],
       [1.00000000e+00, 1.16954494e-14],
       [7.40281318e-04, 9.99259719e-01],
       [9.90285468e-01, 9.71453161e-03],
       [6.46374937e-05, 9.99935363e-01],
       [1.00000000e+00, 1.84961746e-30],
       [5.38258476e-05, 9.99946174e-01],
       [1.00000000e+00, 1.00666444e-15],
       [1.81260177e-03, 9.98187398e-01],
       [1.92898665e-02, 9.80710134e-01],
       [9.99999999e-01, 1.35179947e-09],
       [1.00000000e+00, 4.47771958e-31],
       [3.91473760e-04, 9.99608526e-01],
       [4.62894368e-05, 9.99953711e-01],
       [1.00000000e+00, 1.71469369e-35],
       [1.88767213e-03, 9.98112328e-01],
       [1.48075441e-04, 9.99851925e-01],
       [1.00000000e+00, 8.74936346e-20],
       [4.56795389e-05, 9.99954320e-01],
       [1.00000000e+00, 4.58923930e-14],
       [4.64838507e-04, 9.99535161e-01],
       [3.21725966e-04, 9.99678274e-01],
       [6.44245643e-05, 9.99935575e-01],
       [1.00000000e+00, 1.00694255e-23],
       [3.97738723e-02, 9.60226128e-01],
       [2.13245902e-03, 9.97867541e-01],
       [1.00000000e+00, 1.45787118e-22],
       [5.28376679e-04, 9.99471623e-01],
       [6.06609372e-04, 9.99393391e-01],
       [9.99999944e-01, 5.60713705e-08],
       [1.00000000e+00, 1.60128020e-14],
       [9.99999993e-01, 7.35664224e-09],
       [1.00000000e+00, 3.94313563e-16],
       [1.00000000e+00, 7.14642580e-29],
       [2.16139128e-04, 9.99783861e-01],
       [3.82913995e-01, 6.17086005e-01],
       [1.85500992e-02, 9.81449901e-01],
       [6.75697806e-05, 9.99932430e-01],
       [1.00000000e+00, 4.40243471e-16],
       [6.78134806e-04, 9.99321865e-01],
       [9.99827056e-01, 1.72944391e-04],
       [1.00000000e+00, 6.24763593e-14],
       [1.00000000e+00, 1.35826343e-36],
       [1.04181333e-04, 9.99895819e-01],
       [9.99999999e-01, 8.26403616e-10],
       [1.00000000e+00, 2.48469041e-17],
       [1.00000000e+00, 2.91590185e-21],
       [1.00000000e+00, 2.83028759e-15]])
np.exp(gmm.score_samples(X))
array([0.11217744, 0.02445606, 0.06226147, 0.06522433, 0.13321608,
       0.06470491, 0.12728797, 0.069246  , 0.02470865, 0.04327551,
       0.06389991, 0.02085994, 0.05757796, 0.10829297, 0.04843044,
       0.13733477, 0.04760992, 0.03407464, 0.06594942, 0.13995179,
       0.10093274, 0.10036603, 0.13280781, 0.05387754, 0.06565944,
       0.13948962, 0.11395836, 0.05585184, 0.13078597, 0.0996973 ,
       0.05841382, 0.03182571, 0.07593488, 0.01081952, 0.06601245,
       0.05961138, 0.10983587, 0.0968472 , 0.092877  , 0.09659023,
       0.0283812 , 0.01547332, 0.04195465, 0.13658018, 0.06540787,
       0.01431674, 0.06582982, 0.07267638, 0.09330797, 0.06608493,
       0.05731056, 0.05137263, 0.02105142, 0.12087174, 0.03976262,
       0.11028716, 0.08928353, 0.06454829, 0.0469024 , 0.1086885 ,
       0.11463666, 0.09340655, 0.14229941, 0.06614962, 0.14205307,
       0.04151041, 0.14160529, 0.06584648, 0.12780018, 0.0661795 ,
       0.05497017, 0.1199696 , 0.05404131, 0.04666131, 0.09287912,
       0.00757769, 0.06618115, 0.06554462, 0.12829241, 0.09015641,
       0.03292948, 0.06312466, 0.01798125, 0.07530234, 0.0558867 ,
       0.06400345, 0.13983397, 0.11822031, 0.13077187, 0.05537656,
       0.10181936, 0.0340691 , 0.06704054, 0.05627228, 0.03047864,
       0.06244322, 0.03777481, 0.14228674, 0.05903663, 0.00067423,
       0.11555534, 0.06616737, 0.02396228, 0.05997482, 0.04948306,
       0.13947527, 0.06616514, 0.07905493, 0.04068604, 0.06443938,
       0.06394531, 0.13605068, 0.04587859, 0.00283029, 0.1394082 ,
       0.04986198, 0.01776469, 0.07647159, 0.01804215, 0.12811297,
       0.06147437, 0.01834737, 0.12006526, 0.0085521 , 0.06029394,
       0.1391086 , 0.14273303, 0.11410162, 0.12707853, 0.08018284,
       0.12073486, 0.14118355, 0.14272172, 0.0590018 , 0.04658337,
       0.07395426, 0.05341276, 0.02558601, 0.06187798, 0.02174796,
       0.09622613, 0.04840596, 0.05560097, 0.06617922, 0.14219965,
       0.03526081, 0.12439148, 0.02059031, 0.02118316, 0.04001978,
       0.05839506, 0.04579288, 0.11943829, 0.08464859, 0.11171934,
       0.12666441, 0.09336763, 0.12771874, 0.12308995, 0.02241913,
       0.03872321, 0.07158011, 0.09102273, 0.10572378, 0.11996865,
       0.05086718, 0.13588851, 0.0588316 , 0.03942006, 0.01978457,
       0.04642106, 0.04502693, 0.06531194, 0.09052617, 0.08316795,
       0.03273955, 0.02336082, 0.13228001, 0.1427386 , 0.05246263,
       0.13241863, 0.10265814, 0.04226423, 0.13791303, 0.08835952,
       0.12357058, 0.00952451, 0.09925103, 0.06585493, 0.00533959,
       0.06618136, 0.07672926, 0.14147803, 0.0550929 , 0.04405341,
       0.11782709, 0.03701489, 0.02412076, 0.01043314, 0.06355835,
       0.01723063, 0.0307252 , 0.06603049, 0.06571896, 0.14270696,
       0.03722725, 0.02752175, 0.0441801 , 0.04681517, 0.03895186,
       0.04987874, 0.09707499, 0.01885334, 0.02928751, 0.13781886,
       0.03915324, 0.10833235, 0.07715472, 0.04275023, 0.08105334,
       0.06336768, 0.05515192, 0.05512005, 0.10359778, 0.03307222,
       0.06087037, 0.06871837, 0.06604708, 0.14287272, 0.04672025,
       0.04762768, 0.12919025, 0.08441909, 0.05049361, 0.05352991,
       0.02422916, 0.03988147, 0.03985163, 0.01760534, 0.03032136,
       0.03814346, 0.13074583, 0.13267963, 0.03864386, 0.13388953,
       0.1230467 , 0.03470175, 0.04558541, 0.01395057, 0.00725863,
       0.01008941, 0.13840991, 0.02699244, 0.12010491, 0.12735898,
       0.05098204, 0.09588808, 0.06573409, 0.0418819 , 0.06125529,
       0.06464788, 0.00755056, 0.12542796, 0.09115024, 0.00854282,
       0.05547764, 0.06606035, 0.06862501, 0.13541238, 0.03882275,
       0.1087713 , 0.06396636, 0.07188067, 0.05908848, 0.13637188,
       0.09754663, 0.02780852, 0.12241507, 0.14287184, 0.05215223,
       0.06044762, 0.06557328, 0.09917203, 0.11813618, 0.1119821 ,
       0.13573723, 0.13936138, 0.14143883, 0.05780298, 0.14270219,
       0.0348987 , 0.06446427, 0.0645991 , 0.06584083, 0.03339363,
       0.14179957, 0.06315237, 0.11637312, 0.02473355, 0.0626707 ,
       0.05305234, 0.13675051, 0.13412614, 0.05512063, 0.00738297,
       0.04683455, 0.03085316, 0.04703013, 0.05667643, 0.14287338,
       0.06614376, 0.06296657, 0.06599743, 0.02568011, 0.03744276,
       0.01504405, 0.1359983 , 0.06120944, 0.05800769, 0.10324914,
       0.139401  , 0.10631277, 0.0661446 , 0.08490373, 0.05190301,
       0.05361922, 0.11424735, 0.04615414, 0.06400462, 0.05730316,
       0.13242062, 0.14002874, 0.05866495, 0.04917616, 0.14276069,
       0.05519367, 0.0644829 , 0.14237554, 0.05782235, 0.06503186,
       0.14216907, 0.08133261, 0.04896387, 0.021441  , 0.1305158 ,
       0.0648879 , 0.02315582, 0.10103989, 0.06501846, 0.05290947,
       0.06448741, 0.01144346, 0.06104912, 0.13432675, 0.13594296,
       0.09423774, 0.12250632, 0.06614859, 0.08341821, 0.11099212,
       0.05434346, 0.1211743 , 0.12786085, 0.04509381, 0.06277878,
       0.05444506, 0.05900135, 0.13693505, 0.11325445, 0.14149424,
       0.12306417, 0.05658937, 0.01521691, 0.04709487, 0.03188792,
       0.09335299, 0.13630887, 0.05544855, 0.05630717, 0.0628946 ,
       0.02376967, 0.02705523, 0.06570556, 0.0598789 , 0.0550126 ,
       0.063374  , 0.04413456, 0.14090723, 0.05194098, 0.06344013,
       0.04291318, 0.13811833, 0.13702523, 0.0364081 , 0.06524937,
       0.00708012, 0.06536085, 0.13895114, 0.04958668, 0.13053022,
       0.03032181, 0.01841401, 0.01031467, 0.06365824, 0.01876559,
       0.01840517, 0.04085323, 0.06616104, 0.1350135 , 0.06595312,
       0.04724824, 0.12554683, 0.14203591, 0.10530541, 0.02667144,
       0.0121631 , 0.1317186 , 0.06157441, 0.06580962, 0.0590895 ,
       0.12796298, 0.00487272, 0.05917033, 0.06259974, 0.04301246,
       0.04212389, 0.06331014, 0.1373698 , 0.05744691, 0.06246497,
       0.13857387, 0.05609004, 0.13901543, 0.07969418, 0.10910154,
       0.13157661, 0.05039403, 0.14073353, 0.13976097, 0.14210578,
       0.10878082, 0.06507112, 0.03174709, 0.05165878, 0.03520216,
       0.04922782, 0.09008347, 0.05638423, 0.13514379, 0.03236899,
       0.1296597 , 0.01318037, 0.04947638, 0.06567734, 0.12906014,
       0.00809059, 0.06459945, 0.01851578, 0.04302933, 0.06617698,
       0.0998146 , 0.03361572, 0.04696904, 0.01685546, 0.1416999 ,
       0.01987535, 0.0080242 , 0.09839694, 0.12755756, 0.05853619,
       0.01621363, 0.06486161, 0.1394685 , 0.14284633, 0.06423959,
       0.0430993 , 0.02240914, 0.09414582, 0.04795443, 0.13716851,
       0.13417064, 0.03689347, 0.06552443, 0.04250122, 0.06605351,
       0.02330818, 0.13949016, 0.0060319 , 0.03433645, 0.06934779,
       0.06607671, 0.13141272, 0.01572851, 0.06462334, 0.00655451,
       0.10737192, 0.04821442, 0.06475601, 0.05319493, 0.06611443])
plt.hist(X, bins=20, alpha=0.5, density=True)
x = np.linspace(X.min(), X.max(), 1000)
logprob = gmm.score_samples(x.reshape(-1, 1))
pdf = np.exp(logprob)
plt.plot(x, pdf, "-r", label="GMM")
plt.xlabel("X")
plt.ylabel("Density")
plt.legend()
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

Outlier Detection

X, _ = make_blobs(n_samples=500, centers=3, n_features=2, cluster_std=1.5, random_state=42)
outliers = np.random.RandomState(42).uniform(low=-10, high=10, size=(25, 2))
X = np.vstack((X, outliers))
sns.scatterplot(x=X[:, 0], y=X[:, 1])
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()

iso = IsolationForest()
iso.fit(X)
IsolationForest()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
inout = iso.fit_predict(X)
inout
array([ 1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1,  1, -1,  1, -1, -1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1, -1,
       -1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1, -1,  1, -1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,
       -1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1, -1, -1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1, -1,  1, -1,  1, -1,
        1,  1, -1,  1,  1,  1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1, -1, -1,  1,  1, -1,  1, -1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,
        1,  1,  1,  1, -1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1, -1,
        1,  1,  1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1,  1, -1,  1,  1,  1,  1,
        1,  1,  1, -1,  1,  1, -1,  1,  1, -1,  1,  1,  1, -1,  1,  1, -1,
        1,  1,  1,  1, -1,  1, -1, -1,  1, -1,  1,  1,  1,  1,  1, -1,  1,
        1,  1,  1, -1,  1,  1, -1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,
        1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,
        1,  1,  1,  1, -1, -1, -1, -1, -1,  1,  1,  1, -1,  1, -1, -1,  1,
        1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,
        1, -1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  1,  1,
        1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1, -1, -1,  1, -1, -1,
       -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1])
sns.scatterplot(x=X[:, 0], y=X[:, 1], hue=pd.Categorical(inout))
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(color="lightgrey", linestyle="-", linewidth=0.5)
plt.show()