Quand on m'a montré l'intrigue dans l'analyse en composantes principales etc. et que j'ai reçu l'explication que "la distribution de ces deux données n'est pas si différente", j'ai eu l'occasion de penser "Est-ce vraiment?", Alors j'ai essayé de produire des données qui ne le sont pas J'ai fait.
Créez deux types de données data1 et data2 constitués de trois dimensions x, y et z comme suit.
import numpy as np
x = np.random.normal(50,10, size=(500))
y = np.random.normal(50,10, size=(500))
z = np.random.normal(50, 1, size=(500))
x1 = x[np.where(z > 51, True, False)]
y1 = y[np.where(z > 51, True, False)]
z1 = z[np.where(z > 51, True, False)]
x2 = x[np.where(z < 49, True, False)]
y2 = y[np.where(z < 49, True, False)]
z2 = z[np.where(z < 49, True, False)]
data1 = np.concatenate([x1, y1, z1]).reshape(3, (len(x1))).transpose(1, 0)
data2 = np.concatenate([x2, y2, z2]).reshape(3, (len(x2))).transpose(1, 0)
data = np.concatenate([data1, data2])
colors = ["red" if i >len(data1) else "blue" for i in range(len(data1)+len(data2))]
Après avoir analysé les principaux composants, "Hé, ces deux ensembles de données ne sont-ils pas significativement différents en termes de distribution?" (Visage de Doya)
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA #Analyseur de composants principaux
#Effectuer une analyse des composants principaux
pca = PCA()
pca.fit(data)
#Mappage des données sur l'espace des composants principaux=Compression de dimension
feature = pca.transform(data)
#Tracé avec les premier et deuxième composants principaux
plt.figure(figsize=(8, 8))
plt.scatter(feature[:len(data1), 0], feature[:len(data1), 1], alpha=0.8)
plt.scatter(feature[len(data1):, 0], feature[len(data1):, 1], alpha=0.8)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.grid()
plt.show()
"Si c'est le cas, je vais vous montrer le taux de cotisation cumulé. Le taux de cotisation cumulé jusqu'à la deuxième composante principale (PC2) est proche de 100%, n'est-ce pas?"
#Illustrer le taux de cotisation cumulatif
import matplotlib.ticker as ticker
import numpy as np
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0] + list( np.cumsum(pca.explained_variance_ratio_)), "-o")
plt.xlabel("Number of principal components")
plt.ylabel("Cumulative contribution ratio")
plt.grid()
plt.show()
"Pouvez-vous me montrer la procession du nuage de points?"
(Dockin !!)
import pandas as pd
from pandas.tools import plotting
plotting.scatter_matrix(pd.DataFrame(feature, columns=['PC1', 'PC2', 'PC3']), figsize=(8, 8), color=colors)
plt.show()
"N'est-ce pas une chose complètement différente?! Montrez-moi la matrice de diagramme de dispersion des données originales!"
"Susume Sumimen"
import pandas as pd
from pandas.tools import plotting
plotting.scatter_matrix(pd.DataFrame(data, columns=['x', 'y', 'z']), figsize=(8, 8), color=colors)
plt.show()
Vous devez regarder les données sous plusieurs angles. L'une des méthodes est la standardisation des données. Faire cela changera l'apparence des données.
import numpy as np
def zscore(x, axis = None):
xmean = x.mean(axis=axis, keepdims=True)
xstd = np.std(x, axis=axis, keepdims=True)
zscore = (x-xmean)/xstd
return zscore
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA #Analyseur de composants principaux
#Effectuer une analyse des composants principaux
pca = PCA()
pca.fit(zscore(data, axis=0))
#Mappage des données sur l'espace des composants principaux=Compression de dimension
feature = pca.transform(zscore(data, axis=0))
#Tracé avec les premier et deuxième composants principaux
plt.figure(figsize=(8, 8))
plt.scatter(feature[:len(data1), 0], feature[:len(data1), 1], alpha=0.8)
plt.scatter(feature[len(data1):, 0], feature[len(data1):, 1], alpha=0.8)
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.grid()
plt.show()
#Illustrer le taux de cotisation cumulatif
import matplotlib.ticker as ticker
import numpy as np
plt.gca().get_xaxis().set_major_locator(ticker.MaxNLocator(integer=True))
plt.plot([0] + list( np.cumsum(pca.explained_variance_ratio_)), "-o")
plt.xlabel("Number of principal components")
plt.ylabel("Cumulative contribution ratio")
plt.grid()
plt.show()
import pandas as pd
from pandas.tools import plotting
plotting.scatter_matrix(pd.DataFrame(feature, columns=['PC1', 'PC2', 'PC3']), figsize=(8, 8), color=colors)
plt.show()
import pandas as pd
from pandas.tools import plotting
plotting.scatter_matrix(pd.DataFrame(zscore(data, axis=0), columns=['x', 'y', 'z']), figsize=(8, 8), color=colors)
plt.show()
/Users/kot/miniconda3/envs/py3new/lib/python3.6/site-packages/ipykernel_launcher.py:3: FutureWarning: 'pandas.tools.plotting.scatter_matrix' is deprecated, import 'pandas.plotting.scatter_matrix' instead.
This is separate from the ipykernel package so we can avoid doing imports until