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:
- Používá se k nalezení vzájemných vztahů mezi proměnnými v datech.
- Používá se k interpretaci a vizualizaci dat.
- Počet proměnných se snižuje, což usnadňuje další analýzu.
- Č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:
- 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ů.
- PCA je v podstatě proces redukce rozměrů, ale není zaručeno, že rozměr je interpretovatelný.
- 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.
- 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.
- 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.
- 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í.
- 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.
- 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
# 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
# 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
# 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.