logo

Pagrindinių komponentų analizė (PCA)

Duomenų rinkinyje didėjant funkcijų ar dimensijų skaičiui, duomenų, reikalingų statistiškai reikšmingam rezultatui gauti, kiekis didėja eksponentiškai. Dėl to gali kilti problemų, tokių kaip per didelis pritaikymas, pailgėjęs skaičiavimo laikas ir sumažėjęs mašininio mokymosi modelių tikslumas. Tai vadinama matmenų problemų, kylančių dirbant su didelės apimties duomenimis, prakeiksmu.

Didėjant dimensijų skaičiui, galimų savybių derinių skaičius didėja eksponentiškai, todėl skaičiuojant sunku gauti reprezentatyvų duomenų pavyzdį, o atlikti tokias užduotis kaip grupavimas ar klasifikavimas tampa brangu, nes taip tampa. Be to, kai kurie mašininis mokymasis algoritmai gali būti jautrūs matmenų skaičiui, todėl norint pasiekti tokį patį tikslumo lygį kaip ir mažesnių matmenų duomenys, reikia daugiau duomenų.

Norėdami kreiptis į matmenų prakeiksmas , Funkcijų inžinerija naudojami metodai, apimantys savybių pasirinkimą ir savybių ištraukimą. Matmenų mažinimas yra ypatybių ištraukimo technikos tipas, kuriuo siekiama sumažinti įvesties funkcijų skaičių išsaugant kuo daugiau pradinės informacijos.



Šiame straipsnyje aptarsime vieną iš populiariausių matmenų mažinimo metodų, ty pagrindinių komponentų analizę (PCA).

Kas yra pagrindinių komponentų analizė (PCA)?

Pagrindinių komponentų analizė (PCA) techniką pristatė matematikas Karlas Pearsonas 1901 metais . Jis veikia su sąlyga, kad nors aukštesnės dimensijos erdvėje esantys duomenys yra susieti su žemesnio matmens erdvės duomenimis, žemesnės dimensijos erdvėje esančių duomenų dispersija turėtų būti didžiausia.

  • Pagrindinių komponentų analizė (PCA) yra statistinė procedūra, kuriai naudojama stačiakampė transformacija, kuri koreliuojamų kintamųjų rinkinį konvertuoja į nesusijusių kintamųjų rinkinį. PCA yra plačiausiai naudojama tiriamosios duomenų analizės ir nuspėjamųjų modelių mašininio mokymosi priemonė. Be to,
  • Pagrindinių komponentų analizė (PCA) yra mokymasis be priežiūros algoritmas, naudojamas kintamųjų aibės tarpusavio ryšiams tirti. Ji taip pat žinoma kaip bendroji faktorių analizė, kai regresija nustato tinkamiausią liniją.
  • Pagrindinis pagrindinių komponentų analizės (PCA) tikslas yra sumažinti duomenų rinkinio matmenis išsaugant svarbiausius modelius arba ryšius tarp kintamųjų be jokių išankstinių žinių apie tikslinius kintamuosius.

Pagrindinių komponentų analizė (PCA) naudojama siekiant sumažinti duomenų rinkinio matmenis, ieškant naujų kintamųjų rinkinių, mažesnių už pradinį kintamųjų rinkinį, išsaugantį didžiąją dalį imties informacijos ir naudingą regresija ir klasifikacija duomenų.

Pagrindinių komponentų analizė

  1. Pagrindinių komponentų analizė (PCA) yra matmenų mažinimo metodas, identifikuojantis stačiakampių ašių, vadinamų pagrindiniais komponentais, rinkinį, kuris fiksuoja didžiausią duomenų dispersiją. Pagrindiniai komponentai yra linijiniai pradinių kintamųjų duomenų rinkinyje deriniai ir yra išdėstyti mažėjančia svarbos tvarka. Bendra visų pagrindinių komponentų dispersija yra lygi bendrai pradinio duomenų rinkinio dispersijai.
  2. Pirmasis pagrindinis komponentas fiksuoja daugiausiai duomenų variacijų, bet antrasis pagrindinis komponentas – didžiausią dispersija tai yra stačiakampis į pirmąjį pagrindinį komponentą ir pan.
  3. Pagrindinių komponentų analizė gali būti naudojama įvairiems tikslams, įskaitant duomenų vizualizavimą, funkcijų pasirinkimą ir duomenų glaudinimą. Duomenų vizualizacijoje PCA gali būti naudojamas didelių matmenų duomenims nubraižyti dviem arba trimis matmenimis, kad būtų lengviau interpretuoti. Renkantis funkcijas, PCA gali būti naudojamas svarbiausiems duomenų rinkinio kintamiesiems nustatyti. Duomenų glaudinimo metu PCA gali būti naudojamas norint sumažinti duomenų rinkinio dydį neprarandant svarbios informacijos.
  4. Atliekant pagrindinių komponentų analizę, daroma prielaida, kad informacija perduodama ypatybių dispersijoje, tai yra, kuo didesnis ypatybės pokytis, tuo daugiau informacijos neša savybės.

Apskritai, PCA yra galingas duomenų analizės įrankis ir gali padėti supaprastinti sudėtingus duomenų rinkinius, todėl juos lengviau suprasti ir su jais dirbti.

Žingsnis po žingsnio PCA (pagrindinio komponento analizės) paaiškinimas

1 žingsnis: standartizavimas

Pirma, mums reikia standartizuoti mūsų duomenų rinkinys, siekiant užtikrinti, kad kiekvieno kintamojo vidurkis būtų 0, o standartinis nuokrypis – 1.

Z = frac{X-mu}{sigma}

Čia

2 žingsnis: Kovariacijos matricos skaičiavimas

Kovariacija matuoja dviejų ar daugiau kintamųjų jungties kintamumo stiprumą, nurodydamas, kiek jie keičiasi vienas kito atžvilgiu. Norėdami rasti kovariaciją, galime naudoti formulę:

cov(x1,x2) = frac{sum_{i=1}^{n}(x1_i-ar{x1})(x2_i-ar{x2})}{n-1}

Kovariacijos reikšmė gali būti teigiama, neigiama arba nuliai.

  • Teigiama: x1 didėjant, didėja ir x2.
  • Neigiamas: x1 didėjant, x2 taip pat mažėja.
  • Nuliai: nėra tiesioginio ryšio

3 veiksmas: apskaičiuokite kovariacijos matricos būdingąsias reikšmes ir savuosius vektorius, kad nustatytumėte pagrindinius komponentus

Tegu A yra kvadratinė nXn matrica, o X – nulinis vektorius, kuriam

AX = lambda X

kai kurioms skaliarinėms vertėms lambda. tada lambdayra žinomas kaip savoji vertė A ir X matricos yra žinomos kaip savasis vektorius atitinkamos savosios reikšmės matricos A.

Jis taip pat gali būti parašytas taip:

egin{aligned} AX-lambda X &= 0  (A-lambda I)X &= 0 end{aligned}

kur aš esu tapatumo matrica tokios pat formos kaip matrica A. O aukščiau nurodytos sąlygos bus teisingos tik tuo atveju, jei (A – lambda I)bus neinvertuojama (t.y. vienaskaitos matrica). Tai reiškia,

|A - lambda I| = 0

Iš aukščiau pateiktos lygties galime rasti savąsias reikšmes lambda, todėl atitinkamą savąjį vektorių galima rasti naudojant lygtį AX = lambda X.

Kaip veikia pagrindinių komponentų analizė (PCA)?

Taigi, PCA naudojama tiesinė transformacija, pagrįsta didžiausios duomenų dispersijos išsaugojimu naudojant mažiausią matmenų skaičių. Tai apima šiuos veiksmus:

Python3

import> pandas as pd> import> numpy as np> # Here we are using inbuilt dataset of scikit learn> from> sklearn.datasets>import> load_breast_cancer> # instantiating> cancer>=> load_breast_cancer(as_frame>=>True>)> # creating dataframe> df>=> cancer.frame> # checking shape> print>(>'Original Dataframe shape :'>,df.shape)> # Input features> X>=> df[cancer[>'feature_names'>]]> print>(>'Inputs Dataframe shape :'>, X.shape)>
>
>

Išvestis :

Original Dataframe shape : (569, 31) Inputs Dataframe shape : (569, 30)>

Dabar mes pritaikysime pirmąjį žingsnį, ty standartizuosime duomenis, ir tam pirmiausia turėsime apskaičiuoti kiekvienos funkcijos vidurkį ir standartinį nuokrypį.

Python3

# Mean> X_mean>=> X.mean()> # Standard deviation> X_std>=> X.std()> # Standardization> Z>=> (X>-> X_mean)>/> X_std>
>
>

The kovariacija matrica padeda mums įsivaizduoti, kokia stipri yra dviejų savybių priklausomybė viena nuo kitos funkcijų erdvėje.

Python3

# covariance> c>=> Z.cov()> # Plot the covariance matrix> import> matplotlib.pyplot as plt> import> seaborn as sns> sns.heatmap(c)> plt.show()>
>
>

Išvestis :

Dabar mes apskaičiuosime savieji vektoriai ir savąsias reikšmes mūsų funkcijų erdvei, kuri puikiai tinka identifikuojant pagrindinius mūsų funkcijų erdvės komponentus.

Python3

eigenvalues, eigenvectors>=> np.linalg.eig(c)> print>(>'Eigen values: '>, eigenvalues)> print>(>'Eigen values Shape:'>, eigenvalues.shape)> print>(>'Eigen Vector Shape:'>, eigenvectors.shape)>
>
>

Išvestis :

Eigen values:  [1.32816077e+01 5.69135461e+00 2.81794898e+00 1.98064047e+00  1.64873055e+00 1.20735661e+00 6.75220114e-01 4.76617140e-01  4.16894812e-01 3.50693457e-01 2.93915696e-01 2.61161370e-01  2.41357496e-01 1.57009724e-01 9.41349650e-02 7.98628010e-02  5.93990378e-02 5.26187835e-02 4.94775918e-02 1.33044823e-04  7.48803097e-04 1.58933787e-03 6.90046388e-03 8.17763986e-03  1.54812714e-02 1.80550070e-02 2.43408378e-02 2.74394025e-02  3.11594025e-02 2.99728939e-02] Eigen values Shape: (30,) Eigen Vector Shape: (30, 30)>

Rūšiuokite savąsias reikšmes mažėjimo tvarka ir atitinkamai surūšiuokite atitinkamus savuosius vektorius.

Python3

# Index the eigenvalues in descending order> idx>=> eigenvalues.argsort()[::>->1>]> # Sort the eigenvalues in descending order> eigenvalues>=> eigenvalues[idx]> # sort the corresponding eigenvectors accordingly> eigenvectors>=> eigenvectors[:,idx]>
>
>

Paaiškinta dispersija yra terminas, suteikiantis mums supratimą apie bendros dispersijos dydį, kuris buvo išlaikytas pasirinkus pagrindinius komponentus, o ne pradinę elementų erdvę.

Python3

explained_var>=> np.cumsum(eigenvalues)>/> np.>sum>(eigenvalues)> explained_var>
>
>

Išvestis :

array([0.44272026, 0.63243208, 0.72636371, 0.79238506, 0.84734274,  0.88758796, 0.9100953 , 0.92598254, 0.93987903, 0.95156881,  0.961366 , 0.97007138, 0.97811663, 0.98335029, 0.98648812,  0.98915022, 0.99113018, 0.99288414, 0.9945334 , 0.99557204,  0.99657114, 0.99748579, 0.99829715, 0.99889898, 0.99941502,  0.99968761, 0.99991763, 0.99997061, 0.99999557, 1. ])>

Nustatykite pagrindinių komponentų skaičių

Čia galime atsižvelgti į bet kurios pasirinktos reikšmės pagrindinių komponentų skaičių arba apriboti paaiškintą dispersiją. Čia aš svarstau paaiškintą dispersiją, kuri yra didesnė nei 50%. Pažiūrėkime, kiek pagrindinių komponentų yra.

Python3

n_components>=> np.argmax(explained_var>>>0.50>)>+> 1> n_components>
>
>

Išvestis :

2>

Projektuokite duomenis ant pasirinktų pagrindinių komponentų

  • Raskite projekcijos matricą, Tai savųjų vektorių matrica, atitinkanti didžiausias duomenų kovariacijos matricos savąsias reikšmes. jis projektuoja didelio matmens duomenų rinkinį į žemesnio matmens poerdvę
  • Duomenų kovariacijos matricos savieji vektoriai vadinami pagrindinėmis duomenų ašimis, o duomenų egzempliorių projekcija į šias pagrindines ašis – pagrindiniais komponentais.

Python3

# PCA component or unit matrix> u>=> eigenvectors[:,:n_components]> pca_component>=> pd.DataFrame(u,> >index>=> cancer[>'feature_names'>],> >columns>=> [>'PC1'>,>'PC2'>]> >)> # plotting heatmap> plt.figure(figsize>=>(>5>,>7>))> sns.heatmap(pca_component)> plt.title(>'PCA Component'>)> plt.show()>
>
>

Išvestis :

  • Tada projektuojame duomenų rinkinį naudodami formulę:

egin{aligned} Proj_{P_i}(u) &= frac{P_icdot u}u  &=P_icdot u end{aligned}

  • Tada matmenų sumažinimas gaunamas išlaikant tik tas ašis (matmenis), kurios sudaro didžiąją dispersijos dalį, ir atmetus visas kitas.

Projekcijos radimas PCA

Python3

# Matrix multiplication or dot Product> Z_pca>=> Z @ pca_component> # Rename the columns name> Z_pca.rename({>'PC1'>:>'PCA1'>,>'PC2'>:>'PCA2'>}, axis>=>1>, inplace>=>True>)> # Print the Pricipal Component values> print>(Z_pca)>
>
>

Išvestis :

 PCA1 PCA2 0 9.184755 1.946870 1 2.385703 -3.764859 2 5.728855 -1.074229 3 7.116691 10.266556 4 3.931842 -1.946359 .. ... ... 564 6.433655 -3.573673 565 3.790048 -3.580897 566 1.255075 -1.900624 567 10.365673 1.670540 568 -5.470430 -0.670047 [569 rows x 2 columns]>

Duomenų kovariacijos matricos savieji vektoriai vadinami pagrindinėmis duomenų ašimis, o duomenų egzempliorių projekcija į šias pagrindines ašis – pagrindiniais komponentais. Tada matmenų sumažinimas gaunamas išlaikant tik tas ašis (matmenis), kurios sudaro didžiąją dispersijos dalį, ir atmetus visas kitas.

PCA naudojant Sklearn

Yra įvairių bibliotekų, kuriose visas pagrindinių komponentų analizės procesas buvo automatizuotas, įdiegiant jį į paketą kaip funkciją, ir tereikia perduoti tiek pagrindinių komponentų, kiek norėtume turėti. Sklearn yra viena iš tokių bibliotekų, kurią galima naudoti PCA, kaip parodyta toliau.

Python3

# Importing PCA> from> sklearn.decomposition>import> PCA> # Let's say, components = 2> pca>=> PCA(n_components>=>2>)> pca.fit(Z)> x_pca>=> pca.transform(Z)> # Create the dataframe> df_pca1>=> pd.DataFrame(x_pca,> >columns>=>[>'PC{}'>.> >format>(i>+>1>)> >for> i>in> range>(n_components)])> print>(df_pca1)>
>
>

Išvestis:

 PC1 PC2 0 9.184755 1.946870 1 2.385703 -3.764859 2 5.728855 -1.074229 3 7.116691 10.266556 4 3.931842 -1.946359 .. ... ... 564 6.433655 -3.573673 565 3.790048 -3.580897 566 1.255075 -1.900624 567 10.365673 1.670540 568 -5.470430 -0.670047 [569 rows x 2 columns]>

Mes galime atitikti aukščiau pateiktą Z_pca rezultatą, nes tai yra lygiai tokias pačias reikšmes.

Python3

# giving a larger plot> plt.figure(figsize>=>(>8>,>6>))> plt.scatter(x_pca[:,>0>], x_pca[:,>1>],> >c>=>cancer[>'target'>],> >cmap>=>'plasma'>)> # labeling x and y axes> plt.xlabel(>'First Principal Component'>)> plt.ylabel(>'Second Principal Component'>)> plt.show()>
>
>

Išvestis:

Python3

# components> pca.components_>
>
>

Išvestis :

array([[ 0.21890244, 0.10372458, 0.22753729, 0.22099499, 0.14258969,  0.23928535, 0.25840048, 0.26085376, 0.13816696, 0.06436335,  0.20597878, 0.01742803, 0.21132592, 0.20286964, 0.01453145,  0.17039345, 0.15358979, 0.1834174 , 0.04249842, 0.10256832,  0.22799663, 0.10446933, 0.23663968, 0.22487053, 0.12795256,  0.21009588, 0.22876753, 0.25088597, 0.12290456, 0.13178394],  [-0.23385713, -0.05970609, -0.21518136, -0.23107671, 0.18611302,  0.15189161, 0.06016536, -0.0347675 , 0.19034877, 0.36657547,  -0.10555215, 0.08997968, -0.08945723, -0.15229263, 0.20443045,  0.2327159 , 0.19720728, 0.13032156, 0.183848 , 0.28009203,  -0.21986638, -0.0454673 , -0.19987843, -0.21935186, 0.17230435,  0.14359317, 0.09796411, -0.00825724, 0.14188335, 0.27533947]])>

Pagrindinių komponentų analizės privalumai

  1. Matmenų mažinimas : Pagrindinių komponentų analizė yra populiari technika, naudojama matmenų sumažinimas , kuris yra duomenų rinkinio kintamųjų skaičiaus mažinimo procesas. Sumažinus kintamųjų skaičių, PCA supaprastina duomenų analizę, pagerina našumą ir palengvina duomenų vizualizavimą.
  2. Funkcijos pasirinkimas : Gali būti naudojama pagrindinių komponentų analizė funkcijos pasirinkimas , kuris yra svarbiausių duomenų rinkinio kintamųjų atrankos procesas. Tai naudinga mašininiam mokymuisi, kai kintamųjų skaičius gali būti labai didelis ir sunku nustatyti svarbiausius kintamuosius.
  3. Duomenų vizualizacija : Gali būti naudojama pagrindinių komponentų analizė Daugiakolinisiškumas : Pagrindinių komponentų analizė gali būti naudojama spręsti daugiakolineariškumas , kuri yra dažna regresinės analizės problema, kai du ar daugiau nepriklausomų kintamųjų labai koreliuoja. PCA gali padėti nustatyti pagrindinę duomenų struktūrą ir sukurti naujus, nesusijusius kintamuosius, kurie gali būti naudojami regresijos modelyje.
  4. Triukšmo mažinimas : Pagrindinių komponentų analizė gali būti naudojama duomenų triukšmui sumažinti. Pašalinus pagrindinius mažos dispersijos komponentus, kurie, kaip manoma, yra triukšmas, pagrindinių komponentų analizė gali pagerinti signalo ir triukšmo santykį ir lengviau nustatyti pagrindinę duomenų struktūrą.
  5. Duomenų suspaudimas : Pagrindinių komponentų analizė gali būti naudojama duomenims glaudinti. Pateikdama duomenis naudojant mažesnį skaičių pagrindinių komponentų, kurie užfiksuoja didžiąją duomenų svyravimo dalį, PCA gali sumažinti saugojimo reikalavimus ir pagreitinti apdorojimą.
  6. Nukrypimų aptikimas : Pagrindinio komponento analizę galima naudoti nukrypimams aptikti. Išskirtiniai yra duomenų taškai, kurie labai skiriasi nuo kitų duomenų rinkinio duomenų taškų. Pagrindinio komponento analizė gali identifikuoti šiuos nuokrypius ieškodama duomenų taškų, kurie yra toli nuo kitų pagrindinių komponentų erdvės taškų.

Pagrindinių komponentų analizės trūkumai

  1. Pagrindinių komponentų aiškinimas : Pagrindiniai komponentai, sukurti naudojant Pagrindinių komponentų analizę, yra linijiniai pradinių kintamųjų deriniai, todėl dažnai sunku juos interpretuoti kaip pradinius kintamuosius. Dėl to gali būti sunku paaiškinti PCA rezultatus kitiems.
  2. Duomenų mastelio keitimas : Pagrindinio komponento analizė yra jautri duomenų mastui. Jei duomenys nėra tinkamai suskirstyti, PCA gali veikti netinkamai. Todėl prieš taikant pagrindinių komponentų analizę svarbu suskaidyti duomenis.
  3. Informacijos praradimas : Pagrindinių komponentų analizė gali sukelti informacijos praradimą. Nors pagrindinių komponentų analizė sumažina kintamųjų skaičių, ji taip pat gali sukelti informacijos praradimą. Informacijos praradimo laipsnis priklauso nuo pasirinktų pagrindinių komponentų skaičiaus. Todėl svarbu atidžiai pasirinkti pagrindinių komponentų, kuriuos norite išlaikyti, skaičių.
  4. Netiesiniai ryšiai : Pagrindinio komponento analizė daro prielaidą, kad santykiai tarp kintamųjų yra tiesiniai. Tačiau jei tarp kintamųjų yra netiesinių ryšių, pagrindinių komponentų analizė gali neveikti gerai.
  5. Skaičiavimo sudėtingumas : Pagrindinių komponentų analizės skaičiavimas gali būti brangus dideliems duomenų rinkiniams. Tai ypač aktualu, jei duomenų rinkinyje yra daug kintamųjų.
  6. Pernelyg pritaikymas : Kartais gali atsirasti pagrindinių komponentų analizė perdėtas , tai yra tada, kai modelis per gerai atitinka mokymo duomenis ir prastai veikia naujus duomenis. Taip gali nutikti, jei naudojama per daug pagrindinių komponentų arba jei modelis apmokytas mažame duomenų rinkinyje.

Dažnai užduodami klausimai (DUK)

1. Kas yra pagrindinių komponentų analizė (PCA)?

PCA yra matmenų mažinimo technika, naudojama statistikoje ir mašininiame mokyme, siekiant transformuoti aukšto matmens duomenis į žemesnio matmens atvaizdą, išsaugant svarbiausią informaciją.

2. Kaip veikia PCA?

Pagrindiniai komponentai yra linijiniai originalių savybių deriniai, kuriuos PCA randa ir naudoja, kad užfiksuotų didžiausią duomenų dispersiją. Šie stačiakampiai komponentai yra išdėstyti pagal jų paaiškinamų dispersijų dydį.

3. Kada turėtų būti taikomas PCA?

PCA naudojimas yra naudingas dirbant su daugialypiais arba didelės apimties duomenų rinkiniais. Funkcijų išgavimas, triukšmo mažinimas ir išankstinis duomenų apdorojimas yra svarbūs jo naudojimo būdai.

4. Kaip interpretuojami pagrindiniai komponentai?

Naujas ašis ypatybių erdvėje vaizduoja kiekvienas pagrindinis komponentas. Komponento reikšmės fiksuojant duomenų kintamumą rodiklis yra jo gebėjimas paaiškinti didesnį skirtumą.

5. Kokia yra pagrindinių komponentų reikšmė?

Pagrindiniai komponentai nurodo kryptis, kuriomis duomenys labiausiai skiriasi. Pirmieji keli komponentai paprastai užfiksuoja didžiąją duomenų dispersijos dalį, todėl galima glaustai pateikti.

css fonas