在内核 PCA(主成分分析)输出的最终数据中,有哪些方法可以选择什么内核会导致良好的数据分离,以及优化内核参数的方法有哪些?
如果可能的话,Layman 的术语将不胜感激,并且解释这种方法的论文的链接也很好。
在内核 PCA(主成分分析)输出的最终数据中,有哪些方法可以选择什么内核会导致良好的数据分离,以及优化内核参数的方法有哪些?
如果可能的话,Layman 的术语将不胜感激,并且解释这种方法的论文的链接也很好。
在任何基于内核的方法中选择最佳内核(内核类型或内核参数)的一般方法是交叉验证。有关支持向量机的内核选择的讨论,请参见此处:如何为 SVM 选择内核?
交叉验证背后的想法是我们遗漏一些“测试”数据,运行我们的算法以将模型拟合到剩余的“训练”数据上,然后检查生成的模型对测试数据的描述程度(以及误差有多大)是)。对不同的遗漏数据重复此过程,对误差进行平均以形成平均交叉验证误差,然后可以比较不同的算法以选择产生最低误差的算法。在 SVM 中,可以使用例如分类准确度(或相关度量)作为模型性能的度量。然后,人们会选择一个能够产生最佳测试数据分类的内核。
那么问题就变成了:在 kPCA 中可以使用什么模型性能度量?如果您想实现“良好的数据分离”(可能是良好的类分离),那么您可以以某种方式在训练数据上对其进行测量并使用它来找到最佳内核。但是请注意,PCA/kPCA 并非旨在产生良好的数据分离(它们根本不考虑类标签)。所以一般来说,人们会想要另一种与类别无关的模型性能度量。
在标准 PCA 中,可以使用重构误差作为测试集的性能度量。在内核 PCA 中,也可以计算重建误差,但问题是不同内核之间无法比较:重建误差是在目标特征空间中测量的距离;而不同的内核对应不同的目标空间......所以我们有一个问题。
解决这个问题的一种方法是在原始空间中计算重建误差,而不是在目标空间中。显然,遗漏的测试数据点位于原始空间中。但它的 kPCA 重建存在于目标空间的 [低维子空间] 中。但是,可以做的是在原始空间中找到一个点(“原像”),该点将被映射到尽可能接近该重建点,然后测量测试点与该原像之间的距离作为重构误差。
我不会在这里给出所有的公式,而是请你参考一些论文,在这里只插入几个数字。
kPCA中“原像”的概念显然在这篇论文中被引入:
米卡等人。没有做交叉验证,但他们需要前图像用于去噪,见下图:
去噪(粗)点是 kPCA 投影的前图像(这里没有测试和训练)。找到这些前图像并非易事:需要使用梯度下降,损失函数将取决于内核。
这是一篇最近的论文,它使用前图像进行交叉验证和内核/超参数选择:
这是他们的算法:
以下是一些结果(我认为这几乎是不言自明的):
多动手回答一种评估方法是将 kpca 输出输入到监督模型中,看看性能是否提高,
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
clf = Pipeline([
("kpca", KernelPCA(n_components=2)),
("log_reg", LogisticRegression())
])
param_grid = [{
"kpca__gamma": np.linspace(0.03, 0.05, 10),
"kpca__kernel": ["rbf", "sigmoid"]
}]
grid_search = GridSearchCV(clf, param_grid, cv=3)
grid_search.fit(X, y)
如果你打印出最好的结果
print(grid_search.best_params_)
{'kpca__gamma': 0.043333333333333335, 'kpca__kernel': 'rbf'}
另一种方法是查看重构误差,这意味着您进入较低维度,然后尝试从原始空间重构和计算误差
rbf_pca = KernelPCA(n_components = 2, kernel="rbf", gamma=0.0433,
fit_inverse_transform=True) #make sure fit_inverse_transform is true
X_reduced = rbf_pca.fit_transform(X)
X_preimage = rbf_pca.inverse_transform(X_reduced)
from sklearn.metrics import mean_squared_error
mean_squared_error(X, X_preimage)
32.786308795766132
您可以使用网格搜索来找到最佳超参数。