logo

Hoofdcomponentenanalyse (PCA)

Naarmate het aantal kenmerken of dimensies in een dataset toeneemt, neemt de hoeveelheid gegevens die nodig is om een ​​statistisch significant resultaat te verkrijgen exponentieel toe. Dit kan leiden tot problemen zoals overfitting, verhoogde rekentijd en verminderde nauwkeurigheid van machine learning-modellen. Dit staat bekend als de vloek van dimensionaliteitsproblemen die optreden bij het werken met hoogdimensionale gegevens.

Naarmate het aantal dimensies toeneemt, neemt het aantal mogelijke combinaties van kenmerken exponentieel toe, wat het computationeel moeilijk maakt om een ​​representatieve steekproef van de gegevens te verkrijgen en het duur wordt om taken zoals clustering of classificatie uit te voeren, omdat dit zo wordt. Bovendien, sommige machinaal leren algoritmen kunnen gevoelig zijn voor het aantal dimensies, waardoor meer gegevens nodig zijn om hetzelfde nauwkeurigheidsniveau te bereiken als lager-dimensionale gegevens.

Om de vloek van de dimensionaliteit , Functietechniek Er worden technieken gebruikt, waaronder kenmerkselectie en kenmerkextractie. Dimensionaliteitsreductie is een soort kenmerkextractietechniek die tot doel heeft het aantal invoerkenmerken te verminderen en tegelijkertijd zoveel mogelijk van de originele informatie te behouden.



In dit artikel bespreken we een van de meest populaire technieken voor dimensionaliteitsreductie, namelijk Principal Component Analysis (PCA).

Wat is Principal Component Analysis (PCA)?

Hoofdcomponentenanalyse (PCA) techniek werd geïntroduceerd door de wiskundige Karl Pearson in 1901 . Het werkt op voorwaarde dat, hoewel de gegevens in een hoger-dimensionale ruimte worden toegewezen aan gegevens in een ruimte met een lagere dimensie, de variantie van de gegevens in de lager-dimensionale ruimte maximaal moet zijn.

  • Hoofdcomponentenanalyse (PCA) is een statistische procedure die gebruik maakt van een orthogonale transformatie die een reeks gecorreleerde variabelen omzet in een reeks niet-gecorreleerde variabelen. PCA is het meest gebruikte hulpmiddel bij verkennende gegevensanalyse en bij machinaal leren voor voorspellende modellen. Bovendien,
  • Principal Component Analysis (PCA) is een ongecontroleerd leren algoritmetechniek die wordt gebruikt om de onderlinge relaties tussen een reeks variabelen te onderzoeken. Het is ook bekend als een algemene factoranalyse waarbij regressie een lijn bepaalt die het beste past.
  • Het belangrijkste doel van Principal Component Analysis (PCA) is om de dimensionaliteit van een dataset te verminderen en tegelijkertijd de belangrijkste patronen of relaties tussen de variabelen te behouden zonder enige voorafgaande kennis van de doelvariabelen.

Principal Component Analysis (PCA) wordt gebruikt om de dimensionaliteit van een dataset te verminderen door een nieuwe set variabelen te vinden, kleiner dan de oorspronkelijke set variabelen, waarbij de meeste informatie uit de steekproef behouden blijft en nuttig is voor de regressie en classificatie Van de gegevens.

Hoofdcomponentenanalyse

  1. Principal Component Analysis (PCA) is een techniek voor dimensionaliteitsreductie die een reeks orthogonale assen identificeert, hoofdcomponenten genoemd, die de maximale variantie in de gegevens vastleggen. De belangrijkste componenten zijn lineaire combinaties van de oorspronkelijke variabelen in de dataset en zijn geordend in afnemende volgorde van belangrijkheid. De totale variantie die door alle hoofdcomponenten wordt vastgelegd, is gelijk aan de totale variantie in de oorspronkelijke gegevensset.
  2. De eerste hoofdcomponent vangt de meeste variatie in de gegevens op, maar de tweede hoofdcomponent vangt het maximale op variantie dat is orthogonaal naar de eerste hoofdcomponent, enzovoort.
  3. Principal Component Analysis kan voor verschillende doeleinden worden gebruikt, waaronder datavisualisatie, functieselectie en datacompressie. Bij datavisualisatie kan PCA worden gebruikt om hoogdimensionale gegevens in twee of drie dimensies weer te geven, waardoor deze gemakkelijker te interpreteren zijn. Bij kenmerkselectie kan PCA worden gebruikt om de belangrijkste variabelen in een dataset te identificeren. Bij datacompressie kan PCA worden gebruikt om de omvang van een dataset te verkleinen zonder dat belangrijke informatie verloren gaat.
  4. Bij Principal Component Analysis wordt aangenomen dat de informatie wordt overgedragen in de variantie van de kenmerken, dat wil zeggen: hoe hoger de variatie in een kenmerk, hoe meer informatie de kenmerken bevatten.

Over het geheel genomen is PCA een krachtig hulpmiddel voor data-analyse en kan het helpen complexe datasets te vereenvoudigen, waardoor ze gemakkelijker te begrijpen en ermee te werken zijn.

Stapsgewijze uitleg van PCA (Principal Component Analysis)

Stap 1: Standaardisatie

Ten eerste moeten we dat doen standaardiseren onze dataset om ervoor te zorgen dat elke variabele een gemiddelde van 0 en een standaarddeviatie van 1 heeft.

Z = frac{X-mu}{sigma}

Hier,

  • muis het gemiddelde van onafhankelijke kenmerken mu = left { mu_1, mu_2, cdots, mu_m 
ight }
  • sigmais de standaardafwijking van onafhankelijke kenmerken sigma = left { sigma_1, sigma_2, cdots, sigma_m 
ight }

Stap 2: Covariantiematrixberekening

Covariantie meet de sterkte van de gezamenlijke variabiliteit tussen twee of meer variabelen, en geeft aan hoeveel ze ten opzichte van elkaar veranderen. Om de covariantie te vinden kunnen we de formule gebruiken:

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

De waarde van covariantie kan positief, negatief of nul zijn.

  • Positief: Naarmate x1 toeneemt, neemt ook x2 toe.
  • Negatief: Naarmate x1 toeneemt, neemt ook x2 af.
  • Nullen: Geen directe relatie

Stap 3: Bereken eigenwaarden en eigenvectoren van de covariantiematrix om de belangrijkste componenten te identificeren

Laat A een vierkante nXn-matrix zijn en X een vector die niet nul is

AX = lambda X

voor sommige scalaire waarden lambda. Dan lambdastaat bekend als de eigenwaarde van matrix A en X staat bekend als de eigenvector van matrix A voor de overeenkomstige eigenwaarde.

Het kan ook worden geschreven als:

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

waarbij ik de identiteitsmatrix ben met dezelfde vorm als matrix A. En de bovenstaande voorwaarden zullen alleen waar zijn als (A - lambda I)zal niet-inverteerbaar zijn (dwz singuliere matrix). Dat betekent,

|A - lambda I| = 0

Uit de bovenstaande vergelijking kunnen we de eigenwaarden lambda vinden, en daarom kan de corresponderende eigenvector worden gevonden met behulp van de vergelijking AX = lambda X.

Hoe werkt Principal Component Analysis (PCA)?

Daarom maakt PCA gebruik van een lineaire transformatie die is gebaseerd op het behouden van de meeste variantie in de gegevens met behulp van het minste aantal dimensies. Het omvat de volgende stappen:

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

Uitvoer :

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

Nu zullen we de eerste stap toepassen, namelijk het standaardiseren van de gegevens en daarvoor zullen we eerst het gemiddelde en de standaardafwijking van elk kenmerk in de kenmerkruimte moeten berekenen.

Python3

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

De covariantie matrix helpt ons te visualiseren hoe sterk de afhankelijkheid van twee objecten met elkaar is in de objectruimte.

Python3

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

Uitvoer :

Nu gaan we de eigenvectoren En eigenwaarden voor onze feature space, die een groot doel dienen bij het identificeren van de belangrijkste componenten voor onze feature space.

Python3

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

Uitvoer :

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

Sorteer de eigenwaarden in aflopende volgorde en sorteer de overeenkomstige eigenvectoren dienovereenkomstig.

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

Verklaarde variantie is de term die ons een idee geeft van de hoeveelheid van de totale variantie die is behouden door de hoofdcomponenten te selecteren in plaats van de oorspronkelijke kenmerkruimte.

Python3

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

Uitvoer :

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

Bepaal het aantal hoofdcomponenten

Hier kunnen we ofwel het aantal hoofdcomponenten van elke waarde naar keuze in ogenschouw nemen, ofwel de verklaarde variantie beperken. Hier beschouw ik een verklaarde variantie van meer dan 50%. Laten we eens kijken hoeveel hoofdcomponenten hierin voorkomen.

Python3

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

Uitvoer :

2>

Projecteer de gegevens op de geselecteerde hoofdcomponenten

  • Zoek de projectiematrix. Het is een matrix van eigenvectoren die overeenkomt met de grootste eigenwaarden van de covariantiematrix van de gegevens. het projecteert de hoogdimensionale dataset op een lagerdimensionale subruimte
  • De eigenvectoren van de covariantiematrix van de gegevens worden de hoofdassen van de gegevens genoemd, en de projectie van de gegevensinstanties op deze hoofdassen worden de hoofdcomponenten genoemd.

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

Uitvoer :

  • Vervolgens projecteren we onze dataset met behulp van de formule:

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

  • Dimensionaliteitsreductie wordt dan verkregen door alleen die assen (dimensies) te behouden die het grootste deel van de variantie verklaren, en alle andere te verwerpen.

Projectie zoeken in 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)>
>
>

Uitvoer :

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

De eigenvectoren van de covariantiematrix van de gegevens worden de hoofdassen van de gegevens genoemd, en de projectie van de gegevensinstanties op deze hoofdassen worden de hoofdcomponenten genoemd. Dimensionaliteitsreductie wordt dan verkregen door alleen die assen (dimensies) te behouden die het grootste deel van de variantie verklaren, en alle andere te verwerpen.

PCA met behulp van Sklearn

Er zijn verschillende bibliotheken waarin het hele proces van de hoofdcomponentenanalyse is geautomatiseerd door het als een functie in een pakket te implementeren en we hoeven alleen maar het aantal hoofdcomponenten door te geven dat we graag zouden willen hebben. Sklearn is zo'n bibliotheek die kan worden gebruikt voor de PCA, zoals hieronder weergegeven.

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

Uitgang:

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

We kunnen het bovenstaande Z_pca-resultaat matchen, omdat het precies dezelfde waarden zijn.

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

Uitgang:

java nulcontrole

Python3

# components> pca.components_>
>
>

Uitvoer :

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

Voordelen van hoofdcomponentenanalyse

  1. Dimensionaliteitsreductie : Principal Component Analysis is een populaire techniek die wordt gebruikt dimensionaliteitsreductie , wat het proces is waarbij het aantal variabelen in een dataset wordt verminderd. Door het aantal variabelen te verminderen, vereenvoudigt PCA de data-analyse, verbetert het de prestaties en wordt het gemakkelijker om gegevens te visualiseren.
  2. Functieselectie : Hoofdcomponentenanalyse kan worden gebruikt functie selectie , wat het proces is waarbij de belangrijkste variabelen in een dataset worden geselecteerd. Dit is handig bij machinaal leren, waar het aantal variabelen erg groot kan zijn en het moeilijk is om de belangrijkste variabelen te identificeren.
  3. Data visualisatie : Hoofdcomponentenanalyse kan worden gebruikt Multicollineariteit : Principal Component Analysis kan worden gebruikt om hiermee om te gaan multicollineariteit , wat een veelvoorkomend probleem is bij een regressieanalyse waarbij twee of meer onafhankelijke variabelen sterk gecorreleerd zijn. PCA kan helpen de onderliggende structuur in de gegevens te identificeren en nieuwe, niet-gecorreleerde variabelen te creëren die in het regressiemodel kunnen worden gebruikt.
  4. Ruisonderdrukking : Principal Component Analysis kan worden gebruikt om de ruis in gegevens te verminderen. Door de belangrijkste componenten met een lage variantie, waarvan wordt aangenomen dat ze ruis vertegenwoordigen, te verwijderen, kan Principal Component Analysis de signaal-ruisverhouding verbeteren en het gemakkelijker maken om de onderliggende structuur in de gegevens te identificeren.
  5. Data compressie : Principal Component Analysis kan worden gebruikt voor datacompressie. Door de gegevens weer te geven met behulp van een kleiner aantal hoofdcomponenten, die de meeste variatie in de gegevens opvangen, kan PCA de opslagvereisten verminderen en de verwerking versnellen.
  6. Detectie van uitschieters : Principal Component Analysis kan worden gebruikt voor het detecteren van uitschieters. Uitschieters zijn datapunten die significant verschillen van de andere datapunten in de dataset. Principal Component Analysis kan deze uitschieters identificeren door te zoeken naar gegevenspunten die ver verwijderd zijn van de andere punten in de hoofdcomponentenruimte.

Nadelen van hoofdcomponentenanalyse

  1. Interpretatie van hoofdcomponenten : De hoofdcomponenten die door Principal Component Analysis zijn gemaakt, zijn lineaire combinaties van de oorspronkelijke variabelen, en het is vaak moeilijk om ze te interpreteren in termen van de oorspronkelijke variabelen. Dit kan het moeilijk maken om de resultaten van PCA aan anderen uit te leggen.
  2. Gegevensschaling : Principal Component Analysis is gevoelig voor de schaal van de gegevens. Als de gegevens niet goed zijn geschaald, werkt PCA mogelijk niet goed. Daarom is het belangrijk om de gegevens te schalen voordat u Principal Component Analysis toepast.
  3. Informatieverlies : Principal Component Analysis kan leiden tot informatieverlies. Hoewel Principal Component Analysis het aantal variabelen vermindert, kan dit ook leiden tot informatieverlies. De mate van informatieverlies is afhankelijk van het aantal geselecteerde hoofdcomponenten. Daarom is het belangrijk om zorgvuldig het aantal hoofdcomponenten te selecteren dat u wilt behouden.
  4. Niet-lineaire relaties : Principal Component Analysis gaat ervan uit dat de relaties tussen variabelen lineair zijn. Als er echter niet-lineaire relaties tussen variabelen bestaan, werkt Principal Component Analysis mogelijk niet goed.
  5. Computationele complexiteit : Computing Principal Component Analysis kan rekentechnisch duur zijn voor grote datasets. Dit geldt vooral als het aantal variabelen in de dataset groot is.
  6. Overfitting : Principal Component Analysis kan soms resulteren in overfitting , wat betekent dat het model te goed aansluit bij de trainingsgegevens en slecht presteert op nieuwe gegevens. Dit kan gebeuren als er te veel hoofdcomponenten worden gebruikt of als het model wordt getraind op een kleine dataset.

Veelgestelde vragen (FAQ's)

1. Wat is Principal Component Analysis (PCA)?

PCA is een techniek voor het verminderen van de dimensionaliteit die wordt gebruikt in de statistiek en machinaal leren om hoogdimensionale gegevens om te zetten in een lagerdimensionale representatie, waarbij de belangrijkste informatie behouden blijft.

2. Hoe werkt een PCA?

Hoofdcomponenten zijn lineaire combinaties van de originele kenmerken die PCA vindt en gebruikt om de meeste variantie in de gegevens vast te leggen. In volgorde van de hoeveelheid variantie die ze verklaren, zijn deze orthogonale componenten gerangschikt.

3. Wanneer moet PCA worden toegepast?

Het gebruik van PCA is voordelig bij het werken met multicollineaire of hoogdimensionale datasets. Functie-extractie, ruisonderdrukking en gegevensvoorverwerking zijn prominente toepassingen hiervoor.

4. Hoe worden hoofdcomponenten geïnterpreteerd?

Nieuwe assen worden in de featureruimte weergegeven door elke hoofdcomponent. Een indicator van de betekenis van een component bij het vastleggen van gegevensvariabiliteit is zijn vermogen om een ​​grotere variantie te verklaren.

5. Wat is de betekenis van hoofdcomponenten?

Hoofdcomponenten vertegenwoordigen de richtingen waarin de gegevens het meest variëren. De eerste paar componenten vangen doorgaans het grootste deel van de variantie van de gegevens op, waardoor een beknoptere weergave mogelijk is.