[PYTHON] Hauptkomponentenanalyse Analysieren Sie handschriftliche Zahlen mit PCA. Teil 2

Ich möchte PCA nach Artikel von gestern weiterhin verwenden. Ich hatte vor, LDA zu erklären, aber ich habe meinen Zeitplan ein wenig geändert und heute habe ich nur noch PCA.

Im Chaos ...

Das Folgende ist eine Grafik von 43000 handgeschriebenen numerischen Daten, die von PCA in zwei Dimensionen abgelegt wurden. PCA_ALL2-compressor.png PCA_ALL_reps-compressor.png
Dies ist die grafische Darstellung des Ergebnisses einer unangemessenen Analyse des Ablegens von 784-dimensionalen handgeschriebenen Zeichen in zwei Dimensionen. "1" und "0" sind getrennt, aber "2", "3", "5", "6", "8" sind eine Gruppe, "4", "7". "9" überlappt sich als eine andere Gruppe. .. .. Besonders die obige Grafik ist Chaos. .. ..

Wenn jedoch die Hauptkomponenten von 2 Dimensionen auf ** 30 Dimensionen ** erhöht werden, wird das Produktbeitragsverhältnis 70% bei ** 0,731 ** überschreiten, sodass ich das Gefühl habe, dass die Ergebnisse überraschend gut sein werden.

Klicken Sie hier, um den Python-Code für den Beitragssatz anzuzeigen. Mit der Bibliothek ist es einfach ^^

n_comp = 30

pca = decomp.PCA(n_components = n_comp)
pca.fit(dataset.getData())       #Wenden Sie die Hauptkomponentenanalyse auf alle 43000 handschriftlichen Zahlen an
E = pca.explained_variance_ratio_
print "explained", E             #Beitragssatz jeder Hauptkomponente
print "cumsum E", np.cumsum(E)   #Kumulativer Beitragssatz

Visualisierung der Hauptkomponenten

Nun möchte ich testen, wie viel diese Hauptkomponente und die Daten nach der Dimensionsreduzierung ausgedrückt werden können.

In diesem Beispiel werden die Daten von 784 Dimensionen auf 30 Dimensionen komprimiert. Daher gibt es da 30 Hauptkomponenten

{\bf a_1} = \{ a_{1,1},a_{1,2},a_{1,3},...,a_{1,784} \}    \\
...                             \\
{\bf a_{30}} = \{ a_{30,1},a_{30,2},a_{30,3},...,a_{30,784} \}

Dies und die numerischen Daten "0" können ausgedrückt werden als

{\bf x_0} = \{ x_{0,1},x_{0,2},x_{0,3},....x_{0,30} \}

Kann durch 30 Vektoren dargestellt werden. Die Bedeutung der Hauptkomponentenanalyse besteht darin, dass sie mit 30 Komponenten ausgedrückt werden kann, die ohne Verwendung eines großen Vektors von 784 Komponenten nicht ausgedrückt werden könnten. Also, um dies auf Bilddaten zurückzuführen

ImageData_0 = x_{0,1}{\bf a_1} + x_{0,2}{\bf a_2} + ... + x_{0,30}{\bf a_30}

Ich werde die Berechnung machen.

Zunächst möchte ich grafisch sehen, wie jede Hauptkomponente $ {\ bf a_i} $ in einem Bild aussehen würde. Von oben links $ {\ bf a_1}, {\ bf a_2}, ... $.

PCA-comps-compressor.png

Wow, es stellte sich heraus, dass es eher ein unangenehmer Graph als ein Chaos war. .. .. Ist es wirklich okay? .. .. Sorge. .. ..

Klicken Sie hier, um den Python-Code anzuzeigen, der diese Hauptkomponente grafisch darstellt.

n_comp = 30

fig = plt.figure(figsize=(10, 12))
for i in range(n_comp):
    plot_digits(pca.components_[i], size, 6, 5, i+1, "comp:%d exp:%.3f" % (i+1, E[0]), fontsize=9)

plt.savefig("PCA components.png ")
plt.show()

### Anzeigebild von numerischen Daten, die in 30 Dimensionen abgelegt wurden ###

Übrigens sind die Daten jeder Zahl der folgende 30-dimensionale Vektor.

0 [-1701.4516848    360.5515562    501.80559391   335.42365557  -442.37893255
   738.40404869   653.87543763  -176.60067741     7.52017489    67.8462729
   -34.2218036    -46.55184177   -70.43577469  -342.69209695   377.83995173
    -5.66582709   317.76574823   -87.61261823   -94.53116795   175.02827
  -213.08659782   272.41196629     7.16761158   -22.635149     -34.60858894
  -264.48697639   -76.62192789    14.02612973   -80.42733958    87.6849867 ] 

1 [ 661.59577975  699.31132821 -183.28203965  120.61139445  -81.08181052
  489.46188551 -683.47083797   85.55938661 -348.5480522   202.97854522
  364.55994931  -21.26575592  404.44144851  -97.05254548   61.83993555
  -86.78002717   17.65814358 -285.48469649   18.82730277 -207.64273128
   44.24360034 -221.89436971   57.22745918 -148.67496175   14.34358893
   41.55603106 -333.7236588   208.97888078   59.81363057  -84.55446472] 

2 [   2.61889858  667.83425383  623.25708606 -240.73842216  807.87987427
  448.08932462  809.91470435 -532.39654183 -541.55909038  172.17476512
   -9.56195501  282.15421246  219.11044719 -220.93747327   43.0973319
  146.33386437  181.93836014  116.40958486   13.92428748 -105.6101748
  185.89765605 -291.55100581   87.49435262   84.58855469  145.02361174
   51.72930638   47.85132163  261.13345514  -24.44843863   50.79510831] 

3 [ 114.38181469   20.72714258  504.58355599  -89.64933421 -253.97294532
  325.980776   -360.69326214   66.35769716  -14.68477165 -130.43479691
 -447.40395968  111.99175081  -31.50682548  183.41780399 -519.83792854
 -256.85478577 -113.73387925 -342.03579127 -252.46793099   42.67143142
 -127.42356394  186.64626798  181.90229759  219.77068914 -163.18068948
  135.98266763  131.31762106  264.38488399  133.3078287     7.35507795] 

4 [ 165.75560243 -300.18276053   64.14548517  759.70626076 -425.8443787
  157.39033697 -304.0991401   276.40898204   45.86721541 -295.47758088
    2.74648031  256.88429711  -87.73418977 -175.36126677   40.05170784
  -87.53632407   54.27888133 -199.84899771  -11.82620089 -298.09170974
 -232.16000555   89.85484106  292.73288896  125.82278044  -68.7010304
  193.42367936 -184.23850425   82.89710955  214.44949617 -191.17837477] 

5 [-350.22936554 -141.01297399  389.03065738 -619.26138386  288.79058105
 -500.15719527 -538.72021671 -205.96174636  365.50575542  -60.49472136
   44.4873806  -135.66792908 -112.30051758  592.00954779  211.90849699
 -222.04781047   76.68101573 -173.22893185  -74.82330789 -328.13687912
   54.20947384   29.24886881  -54.30828897  109.31639119 -148.5643377
  231.27705194  -56.10174144  104.02362596   -5.79036367  127.80551682] 

6 [-187.86580218   90.04418067 -744.54442254  350.31041481 -332.06715871
 -180.95934671 -162.1086696    16.39830485 -374.48172442   83.73143967
  130.89870535   80.7921533    -8.58842498   84.6122807  -146.77018343
 -138.92568721  158.65298533  103.19544849 -212.53071491 -278.06266361
  176.32032658  318.61200636  -25.04615495 -331.00041428  -68.16511766
   -8.6657172   131.68031183  163.86737242   80.71525      17.82871763] 

7 [ 672.32316444 -464.80397448  313.66005881 -136.13073047 -325.54440893
  352.67672269  333.35838571  149.05717471  110.00701405  233.97083611
  202.69128282 -211.99648309 -121.59390141 -235.10689307 -183.46670371
 -262.11364747  164.16735123 -102.47910648  257.00098676 -242.83922531
 -205.03185461   85.07389889  159.82922651 -153.57362576   15.46211732
 -282.58840157   38.47973654   40.80311292  -28.29748845  -68.67282582] 

8 [ -2.63682307e+02  -3.92782426e+02  -4.82817090e+02  -1.08732309e+03
   3.16636550e+02   9.40608014e+01   9.62990473e+00  -3.44484518e+02
  -3.42655267e+02   2.44390233e+02  -3.28347935e+02   1.00384644e+00
   4.64562686e+02  -3.92400283e+02  -1.99550884e+01   2.25400966e+02
  -3.93818241e+02  -1.72862773e+02   6.53585372e+01  -2.10524955e+02
   3.71808324e+02   7.97760442e+01   1.02030888e+02  -2.09960791e+02
  -1.65077930e+02   3.51481675e+02   1.99475148e+02  -3.71063678e+02
   6.48734732e+01  -1.68703356e+02] 

9 [ 306.52927212 -351.81955452 -469.10137206 -647.33110927  112.86683552
  215.02556985  -54.15071035 -363.34083069 -211.26631969 -706.20430501
    8.02149574  249.34094422 -166.86167523  211.93010084 -226.5338007
   85.19449155  185.16142027  148.70012599 -141.61039606  200.31039523
  116.4385829   282.81894609   40.49368393   49.44160736 -236.56002282
   42.07184296 -210.24357152 -226.30974581  166.15458766  175.76515424] 

Dann werden die Daten wiederhergestellt, indem jede Komponente dieses Vektors mit dem Vektor der Hauptkomponente multipliziert wird. Ist es okay, mit der Hauptkomponente kurz vor ...

Klicken Sie hier, um den Python-Code anzuzeigen, der die Berechnung durchgeführt hat.

#Abrufen von Daten nach der Dimensionsreduktion nacheinander von jeder Zahl
transformed = [pca.transform(dataset.getByLabel(i, num=1)) for i in range(10)]
label_data_10dim = []
for l in range(10):
    vec = []
    for i, t in zip(range(len(transformed[l][0])), transformed[l][0]):
        vec.append(t * np.array(pca.components_[i]))    #Multiplizieren Sie das Datenelement mit dem Hauptkomponentenvektor.
    S = np.sum(vec,axis=0)       #Addiere für jedes Element.
    label_data_10dim.append(S) 

#Bildschirm
fig = plt.figure(figsize=(10, 5))
for i in range(10):
    plot_digits(label_data_10dim[i], size, 2, 5, i+1, "label:%d"%i, fontsize=9)

plt.show()

Hier ist also die Anzeige.

PCA-result-compressor.png

** Ich kann mehr ausdrücken, als ich mir vorgestellt habe! ** Sie können problemlos "0", "1", "2", "5", "7", "8", "9" lesen. Bitte schauen Sie leicht auf "3". Wenn Sie genau hinschauen, erscheint 3 richtig! "4" und "6" sind etwas harte Ergebnisse. Ich denke jedoch, dass das numerische Bild aus der mysteriösen Hauptkomponente wiederhergestellt werden kann.

Recommended Posts

Hauptkomponentenanalyse Analysieren Sie handschriftliche Zahlen mit PCA. Teil 2
Hauptkomponentenanalyse Analysieren Sie handschriftliche Zahlen mit PCA. Teil 1
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Gesichtserkennung mit Hauptkomponentenanalyse
Dies und das der Hauptkomponentenanalyse
Hauptkomponentenanalyse mit Python von nim mit nimpy
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
Spielen Sie handschriftliche Zahlen mit Python Part 1
[GWAS] Zeichnen Sie die Ergebnisse der Hauptkomponentenanalyse (PCA) von PLINK auf
Japanische Analyseverarbeitung mit Janome Teil1
Hauptkomponentenanalyse mit Livedoor News Corpus --Practice--
Spielen Sie handschriftliche Zahlen mit Python Teil 2 (identifizieren)
<Kurs> Maschinelles Lernen Kapitel 4: Hauptkomponentenanalyse
[Python] Vergleich der Theorie und Implementierung der Hauptkomponentenanalyse durch Python (PCA, Kernel PCA, 2DPCA)
Hauptkomponentenanalyse mit Livedoor News Corpus - Vorbereitung--
Dimensionskomprimierung durch Selbstcodierer- und Hauptkomponentenanalyse
Ich habe versucht, die Hauptkomponenten mit Titanic-Daten zu analysieren!
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung