de Moshe Binieli

O prezentare generală a analizei componentelor principale

O prezentare generala a analizei componentelor principale

Acest articol vă va explica ce este analiza componentelor principale (PCA), de ce avem nevoie de ea și cum o folosim. Voi încerca să o fac cât mai simplă posibil evitând în același timp exemple sau cuvinte dure care pot provoca dureri de cap.

Un moment de onestitate: pentru a înțelege pe deplin acest articol, este esențială o înțelegere de bază a unor algebre liniare și statistici. Luați câteva minute pentru a examina următoarele subiecte, dacă aveți nevoie, pentru a ușura înțelegerea PCA:

  • vectori
  • vectori proprii
  • valori proprii
  • varianță
  • covarianță

Deci, cum ne poate ajuta acest algoritm? Care sunt utilizările acestui algoritm?

  • Identifică cele mai relevante direcții de varianță în date.
  • Ajută la surprinderea celor mai „importante” caracteristici.
  • Mai ușor de făcut calcule pe setul de date după reducerea dimensiunii, deoarece avem mai puține date de care să ne ocupăm.
  • Vizualizarea datelor.

Scurtă explicație verbală.

Să presupunem că avem 10 variabile în setul nostru de date și să presupunem că 3 variabile captează 90% din setul de date, iar 7 variabile captează 10% din setul de date.

Să presupunem că vrem să vizualizăm 10 variabile. Desigur, nu putem face asta, putem vizualiza doar maxim 3 variabile (Poate că în viitor vom putea).

Deci avem o problemă: nu știm care dintre variabile surprinde cea mai mare variabilitate a datelor noastre. Pentru a rezolva acest mister, vom aplica algoritmul PCA. Rezultatul ne va spune cine sunt acele variabile. Sună grozav, nu-i așa? ?

Deci, care sunt pașii pentru ca PCA să funcționeze? Cum aplicăm magia?

  1. Luați setul de date pe care doriți să aplicați algoritmul.
  2. Calculați matricea de covarianță.
  3. Calculați vectorii proprii și valorile proprii ale acestora.
  4. Sortați vectorii proprii în funcție de valorile lor proprii în ordine descrescătoare.
  5. Alegeți primii K vectori proprii (unde k este dimensiunea cu care am dori să ajungem).
  6. Construiți un set de date redus.

Este timpul pentru un exemplu cu date reale.

1) Încărcați setul de date într-o matrice:

Al nostru scopul principal este să ne dăm seama câte variabile sunt cele mai importante pentru noi și să rămânem doar cu ele.

Pentru acest exemplu, vom folosi programul „Spyder” pentru a rula python. Vom folosi, de asemenea, un set de date destul de interesant, care este încorporat în „sklearn.datasets”, numit „load_iris”. Puteți citi mai multe despre acest set de date la Wikipedia.

În primul rând, vom încărca modulul iris și vom transforma setul de date într-o matrice. Setul de date conține 4 variabile cu 150 de exemple. Prin urmare, dimensionalitatea matricei noastre de date este: (150, 4).

import numpy as npimport pandas as pdfrom sklearn.datasets import load_iris
irisModule = load_iris()dataset = np.array(irisModule.data)
1611296349 980 O prezentare generala a analizei componentelor principale
Vizualizare set de date

Există mai multe rânduri în acest set de date – așa cum am spus, există 150 de rânduri, dar putem vedea doar 17 rânduri.

Conceptul de PCA este de a reduce dimensionalitatea matricei prin găsirea direcțiilor care surprind cea mai mare parte a variabilității din matricea noastră de date. Prin urmare, am vrea să le găsim.

2) Calculați matricea de covarianță:

Este timpul să calculăm matricea de covarianță a setului nostru de date, dar ce înseamnă asta chiar? De ce trebuie să calculăm matricea de covarianță? Cum va arăta?

Varianța este așteptarea abaterii pătrate a unei variabile aleatoare de la media sa. Informal măsoară răspândirea unui set de numere din media lor. Definiția matematică este:

1611296349 57 O prezentare generala a analizei componentelor principale

Covarianță este o măsură a variabilității comune a două variabile aleatorii. Cu alte cuvinte, modul în care oricare 2 caracteristici diferă între ele. Utilizarea covarianței este foarte frecventă atunci când căutați modele în date. Definiția matematică este:

1611296349 775 O prezentare generala a analizei componentelor principale

Din această definiție, putem concluziona că matricea de covarianță va fi simetrică. Acest lucru este important deoarece înseamnă că vectorii proprii vor fi reali și non-negativi, ceea ce ne face mai ușor (îndrăznim să susțineți că lucrul cu numere complexe este mai ușor decât cele reale!)

După calcularea matricei de covarianță va arăta astfel:

1611296350 302 O prezentare generala a analizei componentelor principale
Vizualizarea matricei de covarianță

După cum puteți vedea, diagonala principală este scrisă ca V (varianță), iar restul este scris ca C (covarianță), de ce este asta?

Deoarece calcularea covarianței aceleiași variabile este practic calcularea varianței sale (dacă nu sunteți sigur de ce – vă rugăm să luați câteva minute pentru a înțelege ce sunt varianța și covarianța).

Să calculăm în Python matricea de covarianță a setului de date folosind următorul cod:

covarianceMatrix = pd.DataFrame(data = np.cov(dataset, rowvar = False), columns = irisModule.feature_names, index = irisModule.feature_names)
1611296350 215 O prezentare generala a analizei componentelor principale
Matricea de covarianță a setului de date
  • Nu ne interesează diagonala principală, deoarece acestea sunt varianța aceleiași variabile. Deoarece încercăm să găsim noi modele în setul de date, vom ignora diagonala principală.
  • Deoarece matricea este simetrică, covarianța (a, b) = covarianța (b, a), ne vom uita doar la valorile de sus ale matricei de covarianță (deasupra diagonalei).
    Ceva important de menționat despre covarianță: dacă covarianța variabilelor A și b este pozitiv, asta înseamnă că ei variază în aceeași direcție. Dacă covarianța de A și b este negativ, acestea variază în direcții diferite.

3) Calculați valorile proprii și vectorii proprii:

După cum am menționat la început, valorile proprii și vectorii proprii sunt termenii de bază pe care trebuie să-i cunoașteți pentru a înțelege acest pas. Prin urmare, nu o voi explica, ci mai degrabă mă voi muta pentru a le calcula.

Vectorul propriu asociat cu cea mai mare valoare proprie indică direcția în care datele au cea mai mare varianță. Prin urmare, folosind valori proprii vom ști ce vectori proprii captează cea mai mare variabilitate în datele noastre.

eigenvalues, eigenvectors = np.linalg.eig(covarianceMatrix)

Acesta este vectorul valorilor proprii, primul index la vectorul propriu este asociat cu primul index la matricea vectorilor proprii.

Valorile proprii:

1611296351 984 O prezentare generala a analizei componentelor principale
Valorile proprii ale matricei de covarianță

Matricea vectorilor proprii:

1611296351 246 O prezentare generala a analizei componentelor principale
Matricea vectorilor proprii a matricei de covarianță

4) Alegeți primele K valori proprii (K componente / axe principale):

Valorile proprii ne indică cantitatea de variabilitate în direcția vectorului propriu corespunzător. Prin urmare, vectorul propriu cu cea mai mare valoare proprie este direcția cu cea mai mare variabilitate. Numim acest vector propriu prima componentă (sau axă) de principiu. Din această logică, vectorul propriu cu a doua cea mai mare valoare proprie va fi numit a doua componentă principală și așa mai departe.

Vedem următoarele valori:
[4.224, 0.242, 0.078, 0.023]

Să traducem aceste valori în procente și să le vizualizăm. Vom lua procentajul pe care îl acoperă fiecare valoare proprie din setul de date.

totalSum = sum(eigenvalues)variablesExplained = [(i / totalSum) for i in sorted(eigenvalues, reverse = True)]
O prezentare generala a analizei componentelor principale

După cum puteți vedea clar primul iar valoarea proprie ia 92,5% si al doilea se ia 5,3%, și a treia și a doua nu acoperă prea multe date din setul de date total. Prin urmare, putem decide cu ușurință să rămânem numai cu 2 variabile, primul și al doilea.

featureVector = eigenvectors[:,:2]

Să eliminăm a treia și a patra variabilă din setul de date. Este important să spunem că în acest moment pierdem unele informații. Este imposibil să reduceți dimensiunile fără a pierde unele informații (în ipoteza poziției generale). Algoritmul PCA ne spune modul corect de a reduce dimensiunile păstrând în același timp cantitatea maximă de informații referitoare la datele noastre.

Și setul de date rămas arată astfel:

1611296351 95 O prezentare generala a analizei componentelor principale
Vectori proprii rămași după eliminarea a două variabile

5) Construiți noul set de date redus:

Vrem să construim un nou set de date redus din componentele de principiu alese de K.

Vom lua componenta principiilor alese K (k = 2 aici) care ne oferă o matrice de dimensiune (4, 2) și vom lua setul de date original care este o matrice de dimensiune (150, 4).

1611296352 823 O prezentare generala a analizei componentelor principale
Matricile cu care trebuie să lucrăm

Vom efectua multiplicarea matricilor în așa fel:

  • Prima matrice pe care o luăm este matricea care conține principiile componentei K pe care le-am ales și transpunem această matrice.
  • A doua matrice pe care o luăm este matricea originală și o transpunem.
  • În acest moment, efectuăm înmulțirea matricei între cele două matrice.
  • După ce efectuăm multiplicarea matricei, transpunem matricea rezultatului.
1611296352 836 O prezentare generala a analizei componentelor principale
Înmulțirea matricei
featureVectorTranspose = np.transpose(featureVector)datasetTranspose = np.transpose(dataset)newDatasetTranspose = np.matmul(featureVectorTranspose, datasetTranspose)newDataset = np.transpose(newDatasetTranspose)

După efectuarea multiplicării matricelor și transpunerea matricei de rezultate, acestea sunt valorile pe care le obținem pentru noile date care conțin doar K componentele principale pe care le-am ales.

1611296352 546 O prezentare generala a analizei componentelor principale

Concluzie

După cum (sperăm) puteți vedea acum, PCA nu este atât de greu. Am reușit să reducem dimensiunile setului de date destul de ușor folosind Python.

În setul nostru de date, nu am provocat un impact grav, deoarece am eliminat doar 2 variabile din 4. Dar să presupunem că avem 200 de variabile în setul nostru de date și am redus de la 200 variabile la 3 variabile – devine deja mai semnificativ.

Sperăm că ai învățat ceva nou astăzi. Nu ezitați să contactați Chen Shani sau Moshe Binieli pe Linkedin pentru orice întrebări.