Als mir das Diagramm in der Hauptkomponentenanalyse usw. gezeigt wurde und ich die Erklärung erhielt, dass "die Verteilung dieser beiden Daten nicht so unterschiedlich ist", hatte ich die Gelegenheit zu denken: "Ist es wirklich?" Ich tat.
Erstellen Sie zwei Arten von Datendaten1 und Daten2, die aus drei Dimensionen von x, y und z bestehen, wie folgt.
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))]
Nach der Analyse der Hauptkomponenten: "Hey, unterscheiden sich diese beiden Datensätze nicht signifikant in der Verteilung?" (Doya-Gesicht)
%matplotlib inline
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA #Hauptkomponentenanalysator
#Führen Sie eine Hauptkomponentenanalyse durch
pca = PCA()
pca.fit(data)
#Zuordnen von Daten zum Hauptkomponentenraum=Dimensionskomprimierung
feature = pca.transform(data)
#Zeichnen Sie mit der ersten und zweiten Hauptkomponente
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()
"Wenn ja, zeige ich Ihnen den kumulierten Beitragssatz. Der kumulierte Beitragssatz bis zur zweiten Hauptkomponente (PC2) beträgt fast 100%, nicht wahr?"
#Veranschaulichen Sie den kumulierten Beitragssatz
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()
"Können Sie mir die Streudiagrammprozession zeigen?"
(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()
"Ist es nicht eine ganz andere Sache ?! Zeigen Sie mir die Streudiagrammmatrix der Originaldaten!"
"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()
Sie müssen die Daten aus mehreren Blickwinkeln betrachten. Eine der Methoden ist die Datenstandardisierung. Wenn Sie dies tun, ändert sich das Aussehen der Daten.
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 #Hauptkomponentenanalysator
#Führen Sie eine Hauptkomponentenanalyse durch
pca = PCA()
pca.fit(zscore(data, axis=0))
#Zuordnen von Daten zum Hauptkomponentenraum=Dimensionskomprimierung
feature = pca.transform(zscore(data, axis=0))
#Zeichnen Sie mit der ersten und zweiten Hauptkomponente
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()
#Veranschaulichen Sie den kumulierten Beitragssatz
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