python 主成分分析及延伸

矩阵的主成分分析与基于奇异值的主成分分析

from sklearn.preprocessing import scale
def _6pca2(X :np.array) ->tuple :
    '''
    主成分分析。内部已标准化。后续降维可选取返回的特征向量与原数据相乘。
    依赖:sklearn.preprocessing.scale, np.corrcoef, np.linalg.eig
    :param X:数据矩阵,假定行为数据,列为属性
    :return:依次返回特征值(降序排列)与特征向量矩阵(向量按列排列),可根据需要自行选择保留
    '''
    X_std = scale(X, with_mean=True, with_std=True, axis=0) #中心化(-mean)、缩放(/标准差),标准化
    covmtx_X = np.corrcoef(X_std.T)    # 计算自相关系数矩阵
    eig_val, eig_vec = np.linalg.eig(covmtx_X)  # 用numpy.linalg计算特征值与特征向量
    return eig_val, eig_vec

import sklearn
def _7svd_pca(X:np.array)->tuple:
    '''
    奇异值分解,解决特征维数较低时的问题,其不计算协方差矩阵。
    :param X: 数据矩阵,行代表数据,列代表属性
    :return: 左奇异矩阵,奇异值,标准化后的X。可自行取奇异矩阵中的向量构建新的降维数据矩阵。
    '''
    X_std = sklearn.preprocessing.scale(X, with_std=True, with_mean=True)   # 标准化
    Uvec, Sval, Vvec = np.linalg.svd(X,full_matrices=False)
    '''
    full_matrices : bool, optional
        If True (default), `u` and `vh` have the shapes ``(..., M, M)`` and
        ``(..., N, N)``, respectively.  Otherwise, the shapes are
        ``(..., M, K)`` and ``(..., K, N)``, respectively, where
        ``K = min(M, N)``.
    '''
    return Uvec, Sval, X_std


sklearn库的PCA与基于核函数的PCA

def kernel_pca_test():
    '''
    了解sklearn库的核pca与普通pca方法
    :return: 
    '''
    from sklearn.decomposition import KernelPCA, PCA
    from sklearn.datasets import load_iris

    kpca = KernelPCA(kernel='poly', gamma=10) #得到函数,部分定参。
    pca = PCA(n_components=2)

    datas = load_iris()
    xs = datas['data']
    ys = datas['target']    # 鸢尾花数据集

    kpca.fit(X=xs)  # 先要fit数据集
    xs_kpca = kpca.transform(xs)    # 再transform数据集,得到结果,
    plt.figure(2)
    plt.title('kpca')
    plt.scatter(xs_kpca[:, 0], xs_kpca[:, 1], c=ys) # 选每个数据kpca后的前两个属性,标以标签

    pca.fit(xs)
    xs_pca = pca.transform(xs)
    plt.figure(1)
    plt.title('pca')
    plt.scatter(xs_pca[:,0],xs_pca[:,1],c=ys)
    plt.show()
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值