PCA 算法详解

PCA 算法详解PCA 算法步骤 设有 m 条 n 维数据 1 将原始数据按列组成 n 行 m 列矩阵 X2 将 X 的每一行 代表一个属性字段 进行零均值化 即减去这一行的均值 3 求出协方差矩阵 4 求出协方差矩阵的特征值及对应的特征向量 5 将特征向量按对应特征值大小从上到下按行排列成矩阵 取前 k 行组成矩阵 P6 即为降维到 k 维后的数据实例 用 PCA 方法将这组二维数据其降到一维 因为这个矩阵的每行已经是零均值

PCA算法步骤:
设有m条n维数据。
1)将原始数据按列组成n行m列矩阵X
2)将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值
3)求出协方差矩阵在这里插入图片描述
4)求出协方差矩阵的特征值及对应的特征向量
5)将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵P
6)image即为降维到k维后的数据














 

实例:
在这里插入图片描述

PCA 算法详解

降维投影结果如下图:

PCA 算法详解

以上内容来自https://www.cnblogs.com/mikewolf2002/p/3429711.html

 

import numpy as np import matplotlib.pyplot as plt from sklearn.decomposition import KernelPCA from sklearn.datasets import make_circles np.random.seed(0)#使得随机数可预测 x, y = make_circles(n_samples = 400, factor = .3, noise = .05) kpca = KernelPCA(kernel = 'rbf', gamma = 10) x_kpca = kpca.fit_transform(x) plt.figure() plt.subplot(2, 2, 1, aspect = 'equal') plt.title("original space") reds = y == 0 blues = y == 1 plt.plot(x[reds, 0], x[reds, 1], "ro") plt.plot(x[blues, 0], x[blues, 1], "bo") plt.xlabel("$x_1$") plt.ylabel("$x_2$") plt.subplot(2, 2, 3, aspect = 'equal') plt.plot(x_kpca[reds, 0], x_kpca[reds, 1], "ro") plt.plot(x_kpca[blues, 0], x_kpca[blues, 1], "bo") plt.title("Projection by KPCA") plt.xlabel("1st principal compontent in space induced by $\phi$") plt.ylabel("2nd component") plt.subplots_adjust(0.02, 0.10, 0.98, 0.94, 0.04, 0.35) plt.show()

 

np.random.seed()用法 

(1)  代码中包含np.random.seed()

import numpy as np np.random.seed(0) k = 0 while(k < 4): print(np.random.randn()) k += 1

在代码中加入np.random.seed()后,不管该段代码运行多少次,输出结果都一致。

结果为:

1.7664 0.72233 0.57392 2.1458

(2) 代码中不包含np.random.seed()

import numpy as np k = 0 while(k < 4): print(np.random.randn()) k += 1

当代码中不包含np.random.seed()时,代码每次运行,运行结果都不一致。

运行结果可以为:

-0. 0. 0.0878 1.2975

也可以为:

1.99675 -0.6411 0.55894 -0.76979 

结论:当我们设置相同的seed,每次生成的随机数相同

            如果不设置seed,则每次会生成不同的随机数

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216062.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:39
下一篇 2026年3月18日 下午12:39


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号