In [32]:
import numpy as np
import pandas as pa
import matplotlib.pyplot as plt

from numpy.linalg import eig, inv

import warnings
warnings.filterwarnings("ignore")
In [33]:
dict = {'X1': [1, 2, 3, 4, 5, 1, 2, 3, 3, 5, 6],
       'X2': [2, 3, 3, 5, 5, 0, 1, 1, 2, 3, 5],
       'C': [1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]}
data = pa.DataFrame(data=dict)
In [34]:
X = data[['X1', 'X2']]
In [35]:
plt.grid()
plt.scatter(data.X1, data.X2, c=data.C)
Out[35]:
<matplotlib.collections.PathCollection at 0x7fdba550db10>
No description has been provided for this image

Avec une ACP :¶

In [36]:
Z = X - X.mean()
S = len(X) * X.cov()
lambdas, vect = eig(S)
print(lambdas)
print(vect)
[ 6.9605153 56.6394847]
[[-0.72676058 -0.68689087]
 [ 0.68689087 -0.72676058]]
In [37]:
v = vect[:,1]
print(v)
[-0.68689087 -0.72676058]
In [38]:
Y = np.dot(v.T, Z.T)
In [39]:
plt.grid()
plt.scatter(Y, np.ones(len(Y)), c=data.C)
Out[39]:
<matplotlib.collections.PathCollection at 0x7fdba55f0d90>
No description has been provided for this image

Pas top top pour la séparation des classes ...¶

Avec une LDA :¶

In [40]:
#On calcule les moyennes :
mu1 = np.mean(data[['X1', 'X2']][data.C==1])
mu2 = np.mean(data[['X1', 'X2']][data.C==2])
print(mu1)
print(mu2)
X1    3.0
X2    3.6
dtype: float64
X1    3.333333
X2    2.000000
dtype: float64
In [41]:
#On calcule les matrices de dispersion (scatter matrices)
S1 = (len(X[data.C==1]) - 1) * X[data.C==1].cov()
S2 = (len(X[data.C==2]) - 1) * X[data.C==2].cov()
print(S1)
print(S2)
      X1   X2
X1  10.0  8.0
X2   8.0  7.2
           X1    X2
X1  17.333333  16.0
X2  16.000000  16.0
In [42]:
#dispersion intra-classes :
Sw = S1 + S2
print(Sw)
           X1    X2
X1  27.333333  24.0
X2  24.000000  23.2
In [43]:
#Inverse de la matrice Sw :
invSw = inv(Sw)
print(invSw)
[[ 0.39908257 -0.41284404]
 [-0.41284404  0.47018349]]
In [44]:
#Vecteur de la meilleur direction : 
v = np.matmul(invSw, mu1 - mu2)
print(v)
[-0.79357798  0.88990826]
In [45]:
#Et on projette les données :
#print(v)
#print(X.T)
y = np.dot(v.T, X.T)
print(y)
[ 0.98623853  1.08256881  0.28899083  1.27522936  0.48165138 -0.79357798
 -0.69724771 -1.49082569 -0.60091743 -1.29816514 -0.31192661]
In [46]:
#Et on projette : 
plt.grid()
plt.scatter(y, np.ones(len(y)), c=data.C)
Out[46]:
<matplotlib.collections.PathCollection at 0x7fdba5736710>
No description has been provided for this image

yyyoooouuuuuupppppppiiiii :-)

In [ ]: