1. 程式人生 > >機器學習(七) PCA與梯度上升法 (下)

機器學習(七) PCA與梯度上升法 (下)

實例 此外 tps 新的 get nsf self. -s 冗余

五、高維數據映射為低維數據

換一個坐標軸。在新的坐標軸裏面表示原來高維的數據。

技術分享圖片

低維 反向 映射為高維數據

技術分享圖片

PCA.py

import numpy as np


class PCA:

    def __init__(self, n_components):
        """初始化PCA"""
        assert n_components >= 1, "n_components must be valid"
        self.n_components = n_components
        self.components_ 
= None def fit(self, X, eta=0.01, n_iters=1e4): """獲得數據集X的前n個主成分""" assert self.n_components <= X.shape[1], "n_components must not be greater than the feature number of X" def demean(X): return X - np.mean(X, axis=0) def f(w, X):
return np.sum((X.dot(w) ** 2)) / len(X) def df(w, X): return X.T.dot(X.dot(w)) * 2. / len(X) def direction(w): return w / np.linalg.norm(w) def first_component(X, initial_w, eta=0.01, n_iters=1e4, epsilon=1e-8): w = direction(initial_w) cur_iter
= 0 while cur_iter < n_iters: gradient = df(w, X) last_w = w w = w + eta * gradient w = direction(w) if (abs(f(w, X) - f(last_w, X)) < epsilon): break cur_iter += 1 return w X_pca = demean(X) self.components_ = np.empty(shape=(self.n_components, X.shape[1])) for i in range(self.n_components): initial_w = np.random.random(X_pca.shape[1]) w = first_component(X_pca, initial_w, eta, n_iters) self.components_[i,:] = w X_pca = X_pca - X_pca.dot(w).reshape(-1, 1) * w return self def transform(self, X): """將給定的X,映射到各個主成分分量中""" assert X.shape[1] == self.components_.shape[1] return X.dot(self.components_.T) def inverse_transform(self, X): """將給定的X,反向映射回原來的特征空間""" assert X.shape[1] == self.components_.shape[0] return X.dot(self.components_) def __repr__(self): return "PCA(n_components=%d)" % self.n_components

技術分享圖片

技術分享圖片

六、scikit-learn 中的 PCA

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

七、試手MNIST數據集

通過單幅圖像數據的高維化,將單幅圖像轉化為高維空間中的數據集合,對其進行非線性降維,尋求其高維數據流形本征結構的一維表示向量,將其作為圖像數據的特征表達向量。從而將高維圖像識別問題轉化為特征表達向量的識別問題,大大降低了計算的復雜程度,減少了冗余信息所造成的識別誤差,提高了識別的精度。通過指紋圖像的實例說明,將非線性降維方法(如Laplacian Eigenmap方法)應用於圖像數據識別問題,在實際中是可行的,在計算上是簡單的,可大大改善常用方法(如K-近鄰方法)的效能,獲得更好的識別效果。此外,該方法對於圖像數據是否配準是不敏感的,可對不同大小的圖像進行識別,這大大簡化了識別的過程

技術分享圖片

技術分享圖片

技術分享圖片

八、使用PCA對數據進行降噪

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

九、人臉識別與特征臉

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

機器學習(七) PCA與梯度上升法 (下)