zoukankan      html  css  js  c++  java
  • Python机器学习:5.8 映射新的数据点

    在前面的两个例子中,我们将原始的数据集映射到新的特征空间。不过在实际应用中,我们常常需要将多个数据集转换,比如训练集和测试集,还有可能在训练好模型后,又收集到的新数据。在本节,你将学习如何将不属于训练集的数据进行映射。

    还记得在标准PCA中,我们通过计算 转换矩阵*输入样本,得到映射后的数据。转换矩阵的每一列是我们从协方差矩阵中得到的k个特征向量。现在,如何将这种思路应用到核PCA?在核PCA中,我们得到的特征向量来自归一化的核矩阵(centered kernel matrix),而不是协方差矩阵,这意味着样本已经被映射到主成分轴Python机器学习:5.8 映射新的数据点.因此,如果我们要把一个新样本Python机器学习:5.8 映射新的数据点 映射到主成分轴,我们要按照下式:

    Python机器学习:5.8 映射新的数据点

    上式怎么算?当然不好算,好在我们还有核技巧,所以可以避免直接计算Python机器学习:5.8 映射新的数据点

    和标准PCA不同的是,核PCA是一种基于内存的方法,这是什么意思呢?意思是每次对新样本进行映射时就要用到所有的训练集。因为要计算训练集中每个样本和新样本Python机器学习:5.8 映射新的数据点之间的RBF核(相似度):

    Python机器学习:5.8 映射新的数据点

    其中,核矩阵Python机器学习:5.8 映射新的数据点的特征向量Python机器学习:5.8 映射新的数据点和特征值Python机器学习:5.8 映射新的数据点满足条件:  Python机器学习:5.8 映射新的数据点

    计算每一个训练集样本和新样本的Python机器学习:5.8 映射新的数据点后,我们必须用特征值对特征向量做归一化。所以呢,我们要修改一下前面实现的RBF PCA,能够返回核矩阵的特征向量:

    from scipy.spatial.distance import pdist, squareform
    from scipy import exp
    from scipy.linalg import eigh
    import numpy as np
    
    def rbf_kernel_pca(X, gamma, n_components):
        """
        RBF kernel PCA implementation.
        """
        # Calculate pairwise squared Eculidean distances
        sq_dists = pdist(X, 'sqeuclidean')
    
        mat_sq_dists = squareform(sq_dists)
        #Compute the symmetric kernel matrix
        K = exp(-gamma * mat_sq_dists)
        #Center the kernle matrix
        N = K.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)
    
        #Obtaining eigenpairs from the centered kernel matrix
        eigvals, eigvecs = eigh(K)
    
        alphas = np.column_stack((eigvecs[:, -i]
                                 for i in range(1,n_components+1)))
    
        #Collect the corresponding eigenvalues
        lambdas = [eigvals[-i] for i in range(1, n_components+1)]
    
        return alphas, lambdas
    

    现在,我们创建一个新的半月形数据集,然后用更新过的核PCA将其映射到一维子空间:

    Python机器学习:5.8 映射新的数据点

    为了检验对于新数据点的映射表现,我们假设第26个点时新数据点Python机器学习:5.8 映射新的数据点,我们的目标就是将这个新数据点进行映射:

    Python机器学习:5.8 映射新的数据点

    使用project_x函数,我们能够对新数据样本进行映射:

    Python机器学习:5.8 映射新的数据点

    最后,我们将第一主成分进行可视化:

    Python机器学习:5.8 映射新的数据点

    Python机器学习中文版目录(http://www.aibbt.com/a/20787.html)

    转载请注明出处,Python机器学习(http://www.aibbt.com/a/pythonmachinelearning/)

  • 相关阅读:
    Flink实例(四十七):状态管理(十一)自定义操作符状态(五)广播状态(Broadcast state)(三)
    Flink实例(四十六): Operators(七)多流转换算子(二)CONNECT, COMAP和COFLATMAP
    python题库
    python---replace函数
    算法图解--读书笔记
    python里的StringIO
    python通过sha1和base64生成签名
    python调用接口方式
    智能停车场车牌识别系统【python】
    leetcode 查找算法(三)
  • 原文地址:https://www.cnblogs.com/aibbtcom/p/8548630.html
Copyright © 2011-2022 走看看