美文网首页
PCA的推导与求解(二)

PCA的推导与求解(二)

作者: 生信编程日常 | 来源:发表于2020-10-21 20:47 被阅读0次

我们知道在PCA中是最终要求w,使得以下目标函数最大。:


它其实存在数学解的,在sklearn中也是求得的数学解。不过我们也可以用梯度上升法求解。f(X)的梯度为:



也就是:



最后可化为最简形式(n * 1维):


根据以上的推导,我们写出梯度上升的求解:

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 gradient_ascent(df, X, initial_w, eta, n_iters = 1e4, epsilon=1e-8):
    cur_iter = 0
    w = direction(initial_w)
    
    while cur_iter < n_iters:
        gradient = df(w, X)
        last_w = w
        w += eta * gradient
        w = direction(w)  # 单位方向向量
        if abs(f(w, X) - f(last_w, X)) < epsilon:
               break
    
        cur_iter += 1
               
    return w

假如我们有如下数据:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (10,8)

X = np.empty((100, 2))
X[:,0] = np.random.uniform(0., 100., size = 100)
X[:,1] = 0.75 * X[:,0] + 2. * np.random.normal(0., 10., size = 100)

plt.scatter(X[:,0], X[:,1])
plt.show()

可以用自己实现的方法求解:

# 求解
initial_w = np.random.random(X.shape[1]) # 不能初始为0向量
eta = 0.001
print(gradient_ascent(df, X_demean, initial_w, eta))

这样可输出第一主成分。

不过我们仍可用sklearn中的PCA方法将其降维:

from sklearn.decomposition import PCA
X = np.empty((100, 2))
X[:,0] = np.random.uniform(0., 100., size = 100)
X[:,1] = 0.75 * X[:,0] + 2. * np.random.normal(0., 10., size = 100)

pca = PCA(n_components=1)
pca.fit(X)

X_reduction = pca.transform(X)
X_restore = pca.inverse_transform(X_reduction)

plt.scatter(X[:,0], X[:,1], color = 'b', alpha = 0.5)
plt.scatter(X_restore[:,0], X_restore[:,1], color = 'r', alpha = 0.5)
plt.show()

可以看到,将这个二维数据,降到一维,就是在中间的这个红线。

使用PCA主要有三个作用(作用实现未完待续):
1). 大大节省后续运行机器学习的时间;
2). 对数据可视化;
3). 降噪。

以上是学习https://coding.imooc.com/learn/list/169.html [python3入门机器学习]课程所做的部分笔记。

相关文章

  • PCA的推导与求解(二)

    我们知道在PCA中是最终要求w,使得以下目标函数最大。: 它其实存在数学解的,在sklearn中也是求得的数学解。...

  • PCA的推导与求解(一)

    主成分分析(Principal Component Analysis, PCA),是一种非监督机器学习算法,主要应...

  • PCA的推导与求解(三)— PCA的作用

    使用PCA主要有三个作用:1). 大大节省后续运行机器学习的时间;2). 对数据可视化;3). 降噪。 以下将用s...

  • PCA算法推导

    一、PCA降维 1.PCA简介 PCA(主成分分析)是一种数据降维的方法,即用较少特征地数据表达较多特征地数据(数...

  • PCA算法推导

    PCA理解与应用。 Motivation PCA与Factor analysis非常相似,都是主要用于reduct...

  • PCA算法的详细推导

    我给出了该算法在二维情况的详细推导,每一步都有理论依据,而且二维情况下的推导都可以用平面的点集表示出来,很容易理解...

  • (九) 概率PCA推导&&核概率PCA

    1.概率PCA建模  概率PCA(Probability Principle Component Analysis...

  • PCA-Statistics is the new sexy!!

    Shelork Holmes里的一句台词是,Brainy is the new sexy;学了PCA的推导后,我觉...

  • SVD奇异值分解数学原理

    Welcome To My Blog 推导完PCA再来看看SVD 概述 奇异值分解(singular value...

  • PCA主成分分析数学原理

    Welcome To My Blog 复习完线性代数再来推导下PCA 概述 主成分分析(principalcom...

网友评论

      本文标题:PCA的推导与求解(二)

      本文链接:https://www.haomeiwen.com/subject/vxaemktx.html