[PYTHON] Als mir ein Diagramm wie die Hauptkomponentenanalyse gezeigt wurde, "unterscheiden sich die Verteilungen dieser beiden Daten nicht signifikant"?

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.

Daten erstellen

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))]

Hauptkomponentenanalyse

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()

output_3_0.png

Kumulativer Beitragssatz

"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()

output_5_0.png

Streudiagramm-Matrix

"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()

output_7_1.png

"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()

output_9_1.png

Datenstandardisierung

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()

output_12_0.png

#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()

output_13_0.png

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()

output_14_1.png

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

output_15_1.png

Recommended Posts

Als mir ein Diagramm wie die Hauptkomponentenanalyse gezeigt wurde, "unterscheiden sich die Verteilungen dieser beiden Daten nicht signifikant"?
[GWAS] Zeichnen Sie die Ergebnisse der Hauptkomponentenanalyse (PCA) von PLINK auf