- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试使用 KernelPCA 将数据集的维数降低为二维(既用于可视化目的,也用于进一步的数据分析)。
我尝试在各种 Gamma 值下使用 RBF 内核计算 KernelPCA,但结果不稳定:
(每一帧的Gamma值都略有不同,其中Gamma从0到1连续变化)
看起来它不是确定性的。
有没有办法稳定它/使其具有确定性?
用于生成转换数据的代码:
def pca(X, gamma1):
kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=gamma1)
X_kpca = kpca.fit_transform(X)
#X_back = kpca.inverse_transform(X_kpca)
return X_kpca
最佳答案
KernelPCA 应该是确定性的,并随着 Gamma 不断发展。
它与 RBFSampler 不同,RBFSampler 确实具有内置随机性,以提供 RBF 内核的高效(更具可扩展性)近似。
然而,KernelPCA 中可以改变的是主成分的顺序:在 scikit-learn 中,它们返回时按特征值降序排列,因此如果您有 2 个彼此接近的特征值,它可以是顺序随 Gamma 而变化。
我的猜测(来自 gif)是这里发生的事情:您绘制的轴不是恒定的,因此您的数据似乎在跳跃。
你能提供你用来制作gif的代码吗?
我猜它是沿着 2 个第一主成分绘制的数据点图,但它有助于了解您是如何生成它的。
您可以尝试通过查看每个 gamma 值的 kpca.alphas_(特征向量)的值来进一步检查它。
希望这是有道理的。
编辑:正如您所指出的,这些点看起来像轴上的反射,最合理的解释是其中一个特征向量翻转符号(注意这不会影响特征值)。
我输入 a simple gist重现问题(你需要一个 Jupyter notebook 来运行它)。当你改变 gamma 的值时,你可以看到符号翻转。
作为补充,请注意,这种差异的发生只是因为您多次适合 KernelPCA 对象。一旦您确定了特定的 Gamma 值并且您已经适合 kpca 一旦您可以多次调用转换并获得一致的结果。对于经典 PCA the docs提到:
Due to implementation subtleties of the Singular Value Decomposition (SVD), which is used in this implementation, running fit twice on the same matrix can lead to principal components with signs flipped (change in direction). For this reason, it is important to always use the same estimator object to transform data in a consistent fashion.
我不知道您会多次拟合的单个 KernelPCA 对象的行为(我没有在文档中找到任何相关内容)。
它不适用于您的情况,因为您必须使用多个 Gamma 值来拟合对象。
关于python - scikit KernelPCA 结果不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31173137/
申请后KernelPCA到我的数据并将其传递给分类器 ( SVC ) 我收到以下错误: ValueError: Input contains NaN, infinity or a value too
我正在尝试使用 KernelPCA 将数据集的维数降低为二维(既用于可视化目的,也用于进一步的数据分析)。 我尝试在各种 Gamma 值下使用 RBF 内核计算 KernelPCA,但结果不稳定: (
我是一名优秀的程序员,十分优秀!