Analýza hlavních komponent v Pythonu

Analýza hlavních komponent v Pythonu

Analýza hlavních komponent je v podstatě statistická procedura pro převod souboru pozorování možná korelovaných proměnných na soubor hodnot lineárně nekorelovaných proměnných.

Každá z hlavních složek je vybrána tak, aby popisovala většinu z nich stále dostupných rozptylů a všechny tyto hlavní složky jsou navzájem ortogonální. Ve všech hlavních složkách má první hlavní složka maximální rozptyl.

Použití PCA:

  1. Používá se k nalezení vzájemných vztahů mezi proměnnými v datech.
  2. Používá se k interpretaci a vizualizaci dat.
  3. Počet proměnných se snižuje, což usnadňuje další analýzu.
  4. Často se používá k vizualizaci genetické vzdálenosti a příbuznosti mezi populacemi.


Ty se v zásadě provádějí na čtvercové symetrické matici. Může to být čisté součty čtverců a matice křížových produktů Kovarianční matice nebo korelační matice. Korelační matice se používá, pokud se individuální rozptyl výrazně liší.

Cíle PCA:

  1. Jde v podstatě o nezávislou proceduru, ve které redukuje atributový prostor z velkého počtu proměnných na menší počet faktorů.
  2. PCA je v podstatě proces redukce rozměrů, ale není zaručeno, že rozměr je interpretovatelný.
  3. Hlavním úkolem v tomto PCA je vybrat z většího souboru podmnožinu proměnných, na základě kterých mají původní proměnné nejvyšší korelaci s částkou jistiny.
  4. Identifikace vzorů: PCA může pomoci identifikovat vzory nebo vztahy mezi proměnnými, které nemusí být patrné v původních datech. Snížením dimenzionality dat může PCA odhalit základní struktury, které mohou být užitečné pro pochopení a interpretaci dat.
  5. Extrakce funkcí: PCA lze použít k extrakci funkcí ze sady proměnných, které jsou informativnější nebo relevantnější než původní proměnné. Tyto funkce pak lze použít při modelování nebo jiných analytických úlohách.
  6. Komprese dat: PCA lze použít ke kompresi velkých datových sad snížením počtu proměnných potřebných k reprezentaci dat při zachování co největšího množství informací.
  7. Redukce šumu: PCA lze použít ke snížení šumu v datové sadě identifikací a odstraněním hlavních komponent, které odpovídají hlučným částem dat.
  8. Vizualizace: PCA lze použít k vizualizaci vysokorozměrných dat v prostoru nižších dimenzí, což usnadňuje interpretaci a pochopení. Promítáním dat na hlavní komponenty lze snadněji vizualizovat vzory a vztahy mezi proměnnými.

Metoda hlavní osy: PCA v podstatě vyhledává lineární kombinaci proměnných, abychom z proměnných mohli extrahovat maximální rozptyl. Jakmile je tento proces dokončen, odstraní jej a hledá jinou lineární kombinaci, která poskytuje vysvětlení o maximálním podílu zbývajícího rozptylu, který v podstatě vede k ortogonálním faktorům. V této metodě analyzujeme celkový rozptyl.

Vlastní vektor: Je to nenulový vektor, který po vynásobení matice zůstává paralelní. Předpokládejme, že x je vlastní vektor rozměru r matice M s rozměrem r*r, pokud jsou Mx a x rovnoběžné. Pak potřebujeme vyřešit Mx=Ax, kde x i A jsou neznámé, abychom dostali vlastní vektor a vlastní čísla.
V rámci vlastních vektorů můžeme říci, že hlavní komponenty vykazují společný i jedinečný rozptyl proměnné. V zásadě jde o přístup zaměřený na rozptyl, který se snaží reprodukovat celkový rozptyl a korelaci se všemi složkami. Hlavní složky jsou v podstatě lineární kombinace původních proměnných vážené jejich přínosem pro vysvětlení rozptylu v konkrétní ortogonální dimenzi.

Vlastní hodnoty: V zásadě je známá jako charakteristické kořeny. V zásadě měří rozptyl ve všech proměnných, který je tímto faktorem zohledněn. Poměr vlastních čísel je poměr vysvětlující důležitosti faktorů vzhledem k proměnným. Pokud je faktor nízký, pak méně přispívá k vysvětlení proměnných. Jednoduše řečeno, měří množství rozptylu v celkové dané databázi zohledněné faktorem. Vlastní hodnotu faktoru můžeme vypočítat jako součet jeho čtvercového faktorového zatížení pro všechny proměnné.

Pojďme nyní porozumět analýze hlavních komponent pomocí Pythonu.

Chcete-li získat datovou sadu použitou v implementaci, klikněte na tady .

Krok 1: Import knihoven

Krajta
# importing required libraries import numpy as np import matplotlib.pyplot as plt import pandas as pd 

Krok 2: Import datové sady

Importujte datovou sadu a distribuujte datovou sadu do komponent X a y pro analýzu dat.

Krajta
# importing or loading the dataset dataset = pd.read_csv('wine.csv') # distributing the dataset into two components X and Y X = dataset.iloc[:, 0:13].values y = dataset.iloc[:, 13].values 


Krok 3: Rozdělení datové sady na tréninkovou sadu a testovací sadu

Krajta
# Splitting the X and Y into the # Training set and Testing set from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) 

Krok 4: Měřítko funkcí

Provádění části předběžného zpracování na školení a testovací sadě, jako je montáž standardní stupnice.

Krajta
# performing preprocessing part from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) 

Krok 5: Použití funkce PCA

Aplikace funkce PCA do trénovací a testovací sady pro analýzu.

Krajta
# Applying PCA function on training # and testing set of X component from sklearn.decomposition import PCA pca = PCA(n_components = 2) X_train = pca.fit_transform(X_train) X_test = pca.transform(X_test) explained_variance = pca.explained_variance_ratio_ 

Krok 6: Přizpůsobení logistické regrese k tréninkové sadě

Krajta
# Fitting Logistic Regression To the training set from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state = 0) classifier.fit(X_train, y_train) 

Výstup:

Krok 7: Předpovídání výsledku testovací sady

Krajta
# Predicting the test set result using  # predict function under LogisticRegression  y_pred = classifier.predict(X_test) 


Krok 8: Vytvoření matice zmatku

Krajta
# making confusion matrix between # test set of Y and predicted value. from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) 


Krok 9: Předpovídání výsledku tréninkové sestavy

Krajta
# Predicting the training set # result through scatter plot  from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) plt.title('Logistic Regression (Training set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # to show legend # show scatter plot plt.show() 

Výstup:

Krok 10: Vizualizace výsledků testovací sady

Krajta
# Visualising the Test set results through scatter plot from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], color = ListedColormap(('red', 'green', 'blue'))(i), label = j) # title for scatter plot plt.title('Logistic Regression (Test set)') plt.xlabel('PC1') # for Xlabel plt.ylabel('PC2') # for Ylabel plt.legend() # show scatter plot plt.show() 

Můžeme vizualizovat data v novém prostoru hlavních komponent:

Krajta
# plot the first two principal components with labels y = df.iloc[:, -1].values colors = ['r', 'g'] labels = ['Class 1', 'Class 2'] for i, color, label in zip(np.unique(y), colors, labels): plt.scatter(X_pca[y == i, 0], X_pca[y == i, 1], color=color, label=label) plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.legend() plt.show() 7 

Toto je jednoduchý příklad, jak provádět PCA pomocí Pythonu. Výstupem tohoto kódu bude bodový graf prvních dvou hlavních složek a jejich vysvětlený poměr rozptylu. Výběrem vhodného počtu hlavních komponent můžeme snížit rozměrnost datové sady a zlepšit naše porozumění datům.