DimensionsreduktionO: O(min(n²d, nd²))

Principal Component Analysis (PCA)

Principal Component Analysis er den mest udbredte teknik til dimensionsreduktion. Algoritmen finder de retninger i data hvor variansen er størst og projicerer data ind i et lavere-dimensionelt rum uden at miste væsentlig information. Bruges til visualisering, støjfjernelse og som forbehandling for andre ML-algoritmer.

Principal Component Analysis blev udviklet af Karl Pearson i 1901 og videreført af Harold Hotelling i 1930'erne. På trods af sin alder er PCA stadig den mest anvendte dimensionsreduktions-teknik i moderne machine learning. Grundidéen er at finde nye koordinatakser (principal components) hvor data har maksimal spredning, så en stor del af informationen kan bevares i færre dimensioner.

Matematisk fungerer PCA gennem eigendekomposition af data-kovariansmatricen. Første trin er at centrere data ved at trække gennemsnittet fra hver feature. Anden trin er at beregne kovariansmatricen, som fanger hvordan features varierer sammen. Tredje trin er at finde matricens eigenvektorer og eigenvalues. Eigenvektorerne peger i de retninger hvor variansen er størst, og deres tilhørende eigenvalues fortæller præcis hvor meget varians hver retning fanger.

De principal components rangordnes efter eigenvalue-størrelse. Første principal component fanger mest varians, anden komponent fanger den næstmeste varians under betingelsen at den er ortogonal på den første, og så videre. Ved at beholde de K komponenter med største eigenvalues opnås en kompakt repræsentation der bevarer det meste af den oprindelige struktur i data.

Explained variance ratio er den centrale metrik der styrer valget af K. En eigenvalue divideret med summen af alle eigenvalues giver den procentvise varians komponenten fanger. En almindelig tommelfingerregel er at beholde nok komponenter til at forklare 90-95% af den samlede varians. Et cumulative explained variance plot viser tydeligt hvor kurven flader ud, og hvor yderligere komponenter giver aftagende udbytte.

PCA kræver at data er skaleret før anvendelse. Uden StandardScaler eller lignende dominerer features med stor numerisk skala fuldstændigt over features med lille skala, hvilket ødelægger analysen. Dette er en af de hyppigste fejl blandt begyndere, og resultater fra ikke-skaleret PCA er stort set altid ubrugelige når features har forskellige enheder.

Anvendelsesområder for PCA er mangfoldige. Datavisualisering er en af de mest udbredte: højdimensionelle datasæt kan projiceres ned til to eller tre dimensioner og plottes for at afsløre klynger og struktur. Feature-ekstraktion før anden ML-algoritme reducerer overfitting-risiko og accelererer træning, særligt for algoritmer som SVM og KNN der lider under højdimensionelle rum. Støjfjernelse er en anden central anvendelse: da støj typisk fordeles jævnt over alle komponenter mens signal koncentreres i de første, kan man rekonstruere data fra kun de vigtigste komponenter og filtrere støj fra.

Billedkomprimering er et klassisk PCA-eksempel. Et 512x512 billede har 262.144 pixel-værdier. PCA på pixel-rummet kan reducere dette til 100-200 komponenter uden mærkbar visuel forringelse, en komprimering på over 99%. Ansigtsgenkendelse via Eigenfaces (udviklet af Turk og Pentland i 1991) er en anden klassisk anvendelse, hvor ansigter repræsenteres som lineære kombinationer af de vigtigste ansigts-komponenter.

PCA har vigtige begrænsninger der skal kendes. Algoritmen antager lineære sammenhænge i data, og fanger derfor ikke ikke-lineære strukturer. Datasæt der ligger på en kurvet manifold vil PCA behandle dårligt. Til sådanne tilfælde findes ikke-lineære alternativer som t-SNE, UMAP, kernel PCA og autoencoders. t-SNE er særligt populær til visualisering af klynger, mens UMAP kombinerer visualisering og dimensionsreduktion bedre end t-SNE ved at bevare både lokal og global struktur.

Fortolkelighed er en udfordring. Principal components er lineære kombinationer af de originale features og har sjældent en intuitiv fortolkning. I applikationer hvor forklarbarhed er kritisk (finans, sundhed) kan dette være et problem. Sparse PCA og factor analysis er alternativer der giver mere fortolkelige komponenter.

Praktisk implementering i scikit-learn er ligetil: from sklearn.decomposition import PCA, pca = PCA(n_components=50), reduceret_data = pca.fit_transform(skalert_data). Attributter som explained_variance_ratio_ og components_ giver adgang til analyse-detaljerne. For meget store datasæt bruges IncrementalPCA der behandler data i batches, eller randomized PCA der bruger stokastiske teknikker til hurtigere approksimation.

I moderne deep learning-æra er PCA blevet delvist erstattet af lærte embeddings fra neurale netværk. Autoencoders lærer ikke-lineære lav-dimensionelle repræsentationer der ofte er mere brugbare end PCA-projektioner. Alligevel forbliver PCA relevant som et hurtigt, deterministisk baseline-værktøj der ikke kræver træning, giver reproducerbare resultater og fungerer på små datasæt hvor deep learning fejler.

Truncated SVD er en variant der ligner PCA men fungerer på sparse matricer og ikke kræver centrering af data. Dette gør algoritmen ideel til tekstanalyse hvor bag-of-words eller TF-IDF matricer typisk er ekstremt sparse. Latent Semantic Analysis (LSA), en klassisk NLP-teknik fra 1988, er i essensen truncated SVD anvendt på term-dokument matricer, og danner grundlaget for tidlige søgemaskiner og dokument-anbefalingssystemer.

Praktiske faldgruber ved PCA fortjener særlig opmærksomhed. Fortolkning af retninger med negative loadings kræver omhu, da tegnet på komponenter er arbitrært og kan flippe mellem software-versioner. PCA på tidsserier respekterer ikke tidslig struktur og kan skabe misvisende komponenter der blander fortid og fremtid. Anvendelse af PCA på træningsdata og testdata separat er en klassisk fejl der lækker information, hvorfor scikit-learns Pipeline-mønster med fit_transform på træning og transform på test er den korrekte fremgangsmåde. Endeligt bør PCA aldrig anvendes blindt før feature engineering: en velovervejet manuel feature-selection giver ofte bedre resultater end automatisk dimensionsreduktion.

Kernel PCA udvider den klassiske algoritme til ikke-lineære sammenhænge ved at anvende kernel-tricket kendt fra Support Vector Machines. RBF, polynomial og sigmoid kernels projicerer data ind i højere-dimensionelle rum hvor lineær PCA så anvendes. Dette gør Kernel PCA i stand til at fange kurvet manifoldstruktur som klassisk PCA overser. Ulempen er tab af den lineære fortolkelighed og betydeligt højere beregningsomkostninger, hvorfor teknikken primært bruges på mindre datasæt hvor visualisering eller kernel-baseret klassifikation er målet. Sparse PCA er en anden variant der producerer komponenter med færre ikke-nul loadings, hvilket forbedrer fortolkelighed markant i biologi og finans hvor domæneeksperter skal kunne læse resultaterne.

// anvendelsesområder

Hvor bruges Principal Component Analysis (PCA)?

DatavisualiseringFeature-ekstraktionBilledkomprimeringStøjfjernelse