• PCA降维代码实现


    无监督学习,实现降维功能。

    1、matlab代码如下

    1. clear all
    2. clc
    3. load hald % ingredients N*M 数据
    4. coeff = pca(ingredients); % 特征向量矩阵 M*M
    5. covx = cov(ingredients); % 协方差矩阵 M*M
    6. COEFF = pcacov(covx); % 特征向量矩阵 等价于 coeff
    7. data = ingredients; % N rows (samples), M cols (n_features)
    8. N = size(data, 1); % 样本数
    9. M = size(data, 2); % 特征维度
    10. A = ones(N, N); % 单位矩阵
    11. data2 = data - (1/N)*A*data; % 去中心化
    12. P = (1/N)*(data2'*data2); % 协方差矩阵 M*M
    13. [V, D] = eig(P); % 特征值分解,特征值从小到大排序 VDV'=P
    14. index = M:-1:1; % 逆序
    15. D = diag(D); % 主对角线上元素值
    16. D = D(index); % 重排序
    17. D = diag(D, 0); % 特征值矩阵,从大到小排序
    18. V = V(:,index); % 对应特征向量矩阵
    19. d = diag(D)'; % 对角阵的主对角线上元素值
    20. d = d / sum(d); % 主成分比例
    21. r = 2; % 降维后的维度
    22. V2 = V(:, 1:r); % 取前2维的主成分的特征向量
    23. D2 = D(1:r, 1:r); % 取前2维的主成分的特征值
    24. R = data2*V2; % 降维后数据 N*r

    原始数据data

    7    26    6    60
    1    29    15    52
    11    56    8    20
    11    31    8    47
    7    52    6    33
    11    55    9    22
    3    71    17    6
    1    31    22    44
    2    54    18    22
    21    47    4    26
    1    40    23    34
    11    66    9    12
    10    68    8    12

    协方差矩阵P

    31.9408    19.3136   -28.6627    -22.3077
    19.3136   223.5148   -12.8107    -233.9231
    -28.6627   -12.8107    37.8698    2.9231
    -22.3077   -233.9231    2.9231    258.6154

    特征向量矩阵V

    -0.0678    0.6461    0.5674    0.5062
    -0.6785    0.0200    -0.5440    0.4933
    0.0290    -0.7553    0.4036    0.5156
    0.7309    0.1085    -0.4684    0.4844

    特征值D

    477.9663    0              0              0
    0                 62.3044   0              0
    0                 0             11.4512    0
    0                 0              0              0.2189

    降维后数据R

    36.8218    6.8709
    29.6073   -4.6109
    -12.9818    4.2049
    23.7147    6.6341
    -0.5532    4.4617
    -10.8125    3.6466
    -32.5882   -8.9798
    22.6064   -10.7259
    -9.2626   -8.9854
    -3.2840    14.1573
    9.2200    -12.3861
    -25.5849    2.7817
    -26.9032   2.9310

    2、利用sklearn实现PCA降维代码

    1. import numpy as np
    2. import matplotlib.pyplot as plt
    3. from mpl_toolkits.mplot3d import Axes3D
    4. from sklearn.datasets import make_blobs
    5. from sklearn.decomposition import PCA
    6. def pca1206(n_comp):
    7. # X为样本特征,Y为样本簇类别, 共1000个样本,每个样本3个特征,共4个簇
    8. # x, y = make_blobs(n_samples=1000, n_features=3,
    9. # centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],
    10. # cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)
    11. x = [[7, 26, 6, 60],
    12. [1, 29, 15, 52],
    13. [11, 56, 8, 20],
    14. [11, 31, 8, 47],
    15. [7, 52, 6, 33],
    16. [11, 55, 9, 22],
    17. [3, 71, 17, 6],
    18. [1, 31, 22, 44],
    19. [2, 54, 18, 22],
    20. [21, 47, 4, 26],
    21. [1, 40, 23, 34],
    22. [11, 66, 9, 12],
    23. [10, 68, 8, 12]]
    24. x = np.array(x)
    25. # fig = plt.figure()
    26. # ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=20)
    27. # plt.scatter(x[:, 0], x[:, 1], x[:, 2], marker='o')
    28. # plt.show()
    29. pca = PCA(n_components=n_comp) # decrease to 2 dim
    30. pca.fit(x)
    31. print('ratio: ', pca.explained_variance_ratio_)
    32. print('variance: ', pca.explained_variance_)
    33. print('n_components: ', pca.n_components_)
    34. x_new = pca.transform(x)
    35. print(x_new)
    36. # plt.scatter(x_new[:, 0], x_new[:, 1], marker='o')
    37. # plt.show()
    38. return 0
    39. if __name__ == '__main__':
    40. print('Hello world!')
    41. pca1206(2)

    运行结果

    Hello world!
    ratio:  [0.8659739  0.11288239]
    variance:  [517.79687807  67.49643605]
    n_components:  2
    [[ 36.821826     6.87087815]
     [ 29.60727342  -4.61088196]
     [-12.98177572   4.20491318]
     [ 23.71472572   6.63405255]
     [ -0.55319168   4.46173212]
     [-10.81249083   3.64657117]
     [-32.58816661  -8.97984628]
     [ 22.6063955  -10.72590646]
     [ -9.26258724  -8.98537335]
     [ -3.28396933  14.15727734]
     [  9.22003112 -12.38608079]
     [-25.58490852   2.78169315]
     [-26.90316183   2.93097117]]

  • 相关阅读:
    一起走过的那些日子-2022年七夕
    计算机网络练习-计算机网络体系结构与参考模型
    阿里云PAI主机网页访问测试
    电脑技巧:原版Windows系统与Ghost系统的区别
    QT4.8xml写入(2)
    Vue3+tsx开发语法详解
    C++读取.bin二进制文件
    理“ Druid 元数据”之乱
    棒子老虎鸡-第12届蓝桥杯Scratch选拔赛真题精选
    STM32_驱动蜂鸣器自定义库
  • 原文地址:https://blog.csdn.net/Goodness2020/article/details/128209152