美文网首页
超级简单PCA和KPCA

超级简单PCA和KPCA

作者: 徐振杰 | 来源:发表于2018-11-23 23:05 被阅读0次
    我们现在先来看一下上图,我怎么做能把x投影到v向量的方向上呢?答案很简单

    由上图可知,红色和蓝色的点投影到了完全不同的空间。

    当有新的点进来的时候,就可以用上面推导的公式

    from scipy.spatial.distance import sqdist, squareform
    
    def rbf_kpca(X, gamma, k):
        sq_dists = sqdist(X, metric='sqeuclidean')
        mat_sq_dists = squareform(sq_dists)
        K = np.exp(-gamma*mat_sq_dists)
        N = X.shape[0]
        one_N = np.ones((N, N))/N
        K = K-one_N.dot(K)-K.dot(one_N)+one_N.dot(K).dot(one_N)
        Lambda, Q = np.linalg.eigh(K)
        alphas = np.column_stack((Q[:, -i]for i in range(1, 1+k)))
        lambdas = [Lambda[-i] for i in range(1, k+1)]
        return alphas, lambdas
    
    def proj_new(X_new, X, gamma, alphas, lambdas):
        k = np.exp(-gamma*np.sum((X-X_new)**2, 1))
        return k.dot(alphas/lambdas)  #不是除以sqrt(lambda),不知道为啥
                                    # alphas/lambdas,归一化后的alphas
    
    X, y = make_moons(n_samples=100, random_state=123)
                                    # 设置random_state,为了可重复性
    alphas, lambdas = rbf_kpca(X, gamma=15, k=1)
    X_new = X[25]
                        # 以当前样本的某一样本作为新的样本进行测试
    X_proj = proj_new(X_new, X, gamma=15, alphas, lambdas)
    print(alphas[25])
    print(X_proj)
                        # [-0.07877284]
                        # [-0.07877284]
    

    PCA白化则可以降低冗余,也就是标准差归一化。

    https://blog.csdn.net/lanchunhui/article/details/50492482
    https://www.youtube.com/watch?v=G2NRnh7W4NQ&list=PLt0SBi1p7xrRKE2us8doqryRou6eDYEOy&index=2

    相关文章

      网友评论

          本文标题:超级简单PCA和KPCA

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