9.1. Redukowanie cech za pomocą głównych składowych

# Wczytanie bibliotek.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn import datasets

# Wczytanie danych.
digits = datasets.load_digits()

# Standaryzacja macierzy cech.
features = StandardScaler().fit_transform(digits.data)

# Zdefiniowanie analizy głównych składowych, zapewniającej 99-procentową wariancję.
pca = PCA(n_components=0.99, whiten=True)

# Przeprowadzenie analizy głównych składowych.
features_pca = pca.fit_transform(features)

# Wyświetlenie wyników.
print("Początkowa liczba cech:", features.shape[1])
print("Liczba cech po redukcji:", features_pca.shape[1])

Początkowa liczba cech: 64
Liczba cech po redukcji: 54





9.2. Redukowanie cech, gdy dane są liniowo nierozłączne

# Wczytanie bibliotek.
from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles

# Utworzenie liniowo nierozłącznych danych.
features, _ = make_circles(n_samples=1000, random_state=1, noise=0.1, factor=0.1)

# Zastosowanie analizy głównej składowej z radialną funkcją bazową.
kpca = KernelPCA(kernel="rbf", gamma=15, n_components=1)
features_kpca = kpca.fit_transform(features)

print("Początkowa liczba cech:", features.shape[1])
print("Liczba cech po redukcji:", features_kpca.shape[1])

Początkowa liczba cech: 2
Liczba cech po redukcji: 1





9.3. Redukowanie cech przez maksymalizację rozłączności klas

# Wczytanie bibliotek.
from sklearn import datasets
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis

# Wczytanie zbioru danych Iris.
iris = datasets.load_iris()
features = iris.data
target = iris.target

# Zdefiniowanie i przeprowadzenie LDA, a następnie użycie jej do przekształcenia cech.
lda = LinearDiscriminantAnalysis(n_components=1)
features_lda = lda.fit(features, target).transform(features)

# Wyświetlenie liczby cech.
print("Początkowa liczba cech:", features.shape[1])
print("Liczba cech po redukcji:", features_lda.shape[1])

Początkowa liczba cech: 4
Liczba cech po redukcji: 1





lda.explained_variance_ratio_
array([0.9912126])





lda.explained_variance_ratio_

array([0.9912126])





# Zdefiniowanie i przeprowadzenie LDA.
lda = LinearDiscriminantAnalysis(n_components=None)
features_lda = lda.fit(features, target)

# Utworzenie tablicy przedstawiającej wariancję wyjaśnioną komponentów.
lda_var_ratios = lda.explained_variance_ratio_

# Utworzenie funkcji.
def select_n_components(var_ratio, goal_var: float) -> int:
    # Zdefiniowanie początkowej wartości wariancji wyjaśnionej.
    total_variance = 0.0

    # Zdefiniowanie początkowej liczby cech.
    n_components = 0

    # Dla każdej przedstawionej wariancji wyjaśnionej poszczególnych cech:
    for explained_variance in var_ratio:

        # Dodanie przedstawionej wariancji wyjaśnionej do wariancji całkowitej.
        total_variance += explained_variance

        # Dodanie wartości jeden do liczby komponentów.
        n_components += 1

        # W przypadku osiągnięcia żądanego celu wariancji wyjaśnionej.
        if total_variance >= goal_var:
            # Zakończenie pętli.
            break

    # Zwrot liczby komponentów.
    return n_components

# Wywołanie funkcji.
select_n_components(lda_var_ratios, 0.95)

1





9.4. Redukowanie cech za pomocą rozkładu macierzy

# Wczytanie bibliotek.
from sklearn.decomposition import NMF
from sklearn import datasets

# Wczytanie danych.
digits = datasets.load_digits()

# Wczytanie macierzy cech.
features = digits.data

# Zdefiniowanie, dopasowanie i zastosowanie NMF.
nmf = NMF(n_components=10, random_state=1)
features_nmf = nmf.fit_transform(features)

# Wyświetlenie wyników.
print("Początkowa liczba cech:", features.shape[1])
print("Liczba cech po redukcji:", features_nmf.shape[1])

Początkowa liczba cech: 64
Liczba cech po redukcji: 10





9.5. Redukowanie cech w rzadkich danych

# Wczytanie bibliotek.
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import TruncatedSVD
from scipy.sparse import csr_matrix
from sklearn import datasets
import numpy as np

# Wczytanie danych.
digits = datasets.load_digits()

# Standaryzacja macierzy cech.
features = StandardScaler().fit_transform(digits.data)

# Utworzenie macierzy rzadkiej.
features_sparse = csr_matrix(features)

# Zdefiniowanie operacji TSVD.
tsvd = TruncatedSVD(n_components=10)

# Przeprowadzenie operacji TSVD na macierzy rzadkiej.
features_sparse_tsvd = tsvd.fit(features_sparse).transform(features_sparse)

# Wyświetlenie wyników.
print("Początkowa liczba cech:", features_sparse.shape[1])
print('"Liczba cech po redukcji:", features_sparse_tsvd.shape[1])

Początkowa liczba cech: 64
Liczba cech po redukcji: 10





# Suma trzech pierwszych wariancji wyjaśnionych.
tsvd.explained_variance_ratio_[0:3].sum()

0.3003938537287226





# Zdefiniowanie i przeprowadzenie operacji TSVD z wartością o jeden mniejszą niż liczba cech.
tsvd = TruncatedSVD(n_components=features_sparse.shape[1]-1)
features_tsvd = tsvd.fit(features)

# Lista wariancji wyjaśnionych.
tsvd_var_ratios = tsvd.explained_variance_ratio_

# Utworzenie funkcji.
def select_n_components(var_ratio, goal_var):
    # Zdefiniowanie początkowej wartości wariancji wyjaśnionej.
    total_variance = 0.0

    # Zdefiniowanie początkowej liczby cech.
    n_components = 0

    # Dla każdej przedstawionej wariancji wyjaśnionej poszczególnych cech:
    for explained_variance in var_ratio:

        # Dodanie przedstawionej wariancji wyjaśnionej do wariancji całkowitej.
        total_variance += explained_variance

        # Dodanie wartości jeden do liczby komponentów.
        n_components += 1

        # W przypadku osiągnięcia żądanego celu wariancji wyjaśnionej.
        if total_variance >= goal_var:
            # Zakończenie pętli.
            break

    # Zwrot liczby komponentów.
    return n_components

# Wywołanie funkcji.
select_n_components(tsvd_var_ratios, 0.95)

40
