带 Kernlab 的内核 PCA 和结肠癌数据集的分类
kernel PCA with Kernlab and classification of Colon--cancer dataset
我需要在 colon-‐cancer 数据集上执行内核 PCA:
然后
我需要绘制主成分数与 PCA 数据分类精度的关系图。
对于第一部分,我在 R 中使用 kernlab,如下所示(让特征数量为 2,然后我将其从 2-100 改变)
kpc <- kpca(~.,data=data[,-1],kernel="rbfdot",kpar=list(sigma=0.2),features=2)
我很难理解如何使用此 PCA 数据进行分类(我可以使用任何分类器,例如 SVM)
编辑:我的问题是如何将 PCA 的输出输入分类器
数据看起来像这样(清理后的数据)
未清理的原始数据是这样的
我将在此处向您展示如何使用 kernlab
包的 kpca
功能的小示例:
我检查了结肠癌文件,但它需要一些清理才能使用它,所以我将使用随机数据集向您展示如何:
假设数据集如下:
y <- rep(c(-1,1), c(50,50))
x1 <- runif(100)
x2 <- runif(100)
x3 <- runif(100)
x4 <- runif(100)
x5 <- runif(100)
df <- data.frame(y,x1,x2,x3,x4,x5)
> df
y x1 x2 x3 x4 x5
1 -1 0.125841208 0.040543611 0.317198114 0.40923767 0.635434021
2 -1 0.113818719 0.308030825 0.708251147 0.69739496 0.839856000
3 -1 0.744765204 0.221210582 0.002220568 0.62921565 0.907277935
4 -1 0.649595597 0.866739474 0.609516644 0.40818013 0.395951297
5 -1 0.967379006 0.926688915 0.847379556 0.77867315 0.250867680
6 -1 0.895060293 0.813189446 0.329970821 0.01106764 0.123018797
7 -1 0.192447416 0.043720717 0.170960540 0.03058768 0.173198036
8 -1 0.085086619 0.645383728 0.706830885 0.51856286 0.134086770
9 -1 0.561070374 0.134457795 0.181368729 0.04557505 0.938145228
为了 运行 pca
你需要做:
kpc <- kpca(~.,data=data[,-1],kernel="rbfdot",kpar=list(sigma=0.2),features=4)
这和你的使用方法是一样的。但是,我需要指出的是,特征参数是 主成分 的数量,而不是 y
变量中 类 的数量。也许您已经知道这一点,但是拥有 2000 个变量并且仅生成 2 个主成分可能不是您想要的。您需要通过检查特征值来仔细选择这个数字。在您的情况下,我可能会选择 100 个主成分,并根据最高特征值选择前 n 个主成分。让我们在 运行 之前的代码之后在我的随机示例中看到这一点:
为了查看特征值:
> kpc@eig
Comp.1 Comp.2 Comp.3 Comp.4
0.03756975 0.02706410 0.02609828 0.02284068
在我的例子中,所有组件的特征值都非常低,因为我的数据是随机的。在你的情况下,我假设你会得到更好的。您需要选择 n 个具有最高值的组件。零值表示该分量不解释任何方差。 (只是为了演示,我将在下面的 svm 中使用所有这些)。
为了访问主成分,即 PCA 输出,您可以这样做:
> kpc@pcv
[,1] [,2] [,3] [,4]
[1,] -0.1220123051 1.01290883 -0.935265092 0.37279158
[2,] 0.0420830469 0.77483019 -0.009222970 1.14304032
[3,] -0.7060568260 0.31153129 -0.555538694 -0.71496666
[4,] 0.3583160509 -0.82113573 0.237544936 -0.15526000
[5,] 0.1158956953 -0.92673486 1.352983423 -0.27695507
[6,] 0.2109994978 -1.21905573 -0.453469345 -0.94749503
[7,] 0.0833758766 0.63951377 -1.348618472 -0.26070127
[8,] 0.8197838629 0.34794455 0.215414610 0.32763442
[9,] -0.5611750477 -0.03961808 -1.490553198 0.14986663
...
...
这个 returns 一个 4 列的矩阵,即作为 PCA 输出的特征参数的数量,即主成分。 kerlab
使用 S4 方法调度系统,这就是你在 kpc@pcv
.
使用 @
的原因
然后您需要使用上述矩阵按以下方式输入 svm:
svmmatrix <- kpc@pcv
library(e1071)
svm(svmmatrix, as.factor(y))
Call:
svm.default(x = svmmatrix, y = as.factor(y))
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 95
就是这样! here 可以找到我在互联网上找到的关于 pca 的非常好的解释,以防您或阅读本文的任何其他人想要了解更多信息。
我需要在 colon-‐cancer 数据集上执行内核 PCA:
然后
我需要绘制主成分数与 PCA 数据分类精度的关系图。
对于第一部分,我在 R 中使用 kernlab,如下所示(让特征数量为 2,然后我将其从 2-100 改变)
kpc <- kpca(~.,data=data[,-1],kernel="rbfdot",kpar=list(sigma=0.2),features=2)
我很难理解如何使用此 PCA 数据进行分类(我可以使用任何分类器,例如 SVM)
编辑:我的问题是如何将 PCA 的输出输入分类器
数据看起来像这样(清理后的数据)
未清理的原始数据是这样的
我将在此处向您展示如何使用 kernlab
包的 kpca
功能的小示例:
我检查了结肠癌文件,但它需要一些清理才能使用它,所以我将使用随机数据集向您展示如何:
假设数据集如下:
y <- rep(c(-1,1), c(50,50))
x1 <- runif(100)
x2 <- runif(100)
x3 <- runif(100)
x4 <- runif(100)
x5 <- runif(100)
df <- data.frame(y,x1,x2,x3,x4,x5)
> df
y x1 x2 x3 x4 x5
1 -1 0.125841208 0.040543611 0.317198114 0.40923767 0.635434021
2 -1 0.113818719 0.308030825 0.708251147 0.69739496 0.839856000
3 -1 0.744765204 0.221210582 0.002220568 0.62921565 0.907277935
4 -1 0.649595597 0.866739474 0.609516644 0.40818013 0.395951297
5 -1 0.967379006 0.926688915 0.847379556 0.77867315 0.250867680
6 -1 0.895060293 0.813189446 0.329970821 0.01106764 0.123018797
7 -1 0.192447416 0.043720717 0.170960540 0.03058768 0.173198036
8 -1 0.085086619 0.645383728 0.706830885 0.51856286 0.134086770
9 -1 0.561070374 0.134457795 0.181368729 0.04557505 0.938145228
为了 运行 pca
你需要做:
kpc <- kpca(~.,data=data[,-1],kernel="rbfdot",kpar=list(sigma=0.2),features=4)
这和你的使用方法是一样的。但是,我需要指出的是,特征参数是 主成分 的数量,而不是 y
变量中 类 的数量。也许您已经知道这一点,但是拥有 2000 个变量并且仅生成 2 个主成分可能不是您想要的。您需要通过检查特征值来仔细选择这个数字。在您的情况下,我可能会选择 100 个主成分,并根据最高特征值选择前 n 个主成分。让我们在 运行 之前的代码之后在我的随机示例中看到这一点:
为了查看特征值:
> kpc@eig
Comp.1 Comp.2 Comp.3 Comp.4
0.03756975 0.02706410 0.02609828 0.02284068
在我的例子中,所有组件的特征值都非常低,因为我的数据是随机的。在你的情况下,我假设你会得到更好的。您需要选择 n 个具有最高值的组件。零值表示该分量不解释任何方差。 (只是为了演示,我将在下面的 svm 中使用所有这些)。
为了访问主成分,即 PCA 输出,您可以这样做:
> kpc@pcv
[,1] [,2] [,3] [,4]
[1,] -0.1220123051 1.01290883 -0.935265092 0.37279158
[2,] 0.0420830469 0.77483019 -0.009222970 1.14304032
[3,] -0.7060568260 0.31153129 -0.555538694 -0.71496666
[4,] 0.3583160509 -0.82113573 0.237544936 -0.15526000
[5,] 0.1158956953 -0.92673486 1.352983423 -0.27695507
[6,] 0.2109994978 -1.21905573 -0.453469345 -0.94749503
[7,] 0.0833758766 0.63951377 -1.348618472 -0.26070127
[8,] 0.8197838629 0.34794455 0.215414610 0.32763442
[9,] -0.5611750477 -0.03961808 -1.490553198 0.14986663
...
...
这个 returns 一个 4 列的矩阵,即作为 PCA 输出的特征参数的数量,即主成分。 kerlab
使用 S4 方法调度系统,这就是你在 kpc@pcv
.
@
的原因
然后您需要使用上述矩阵按以下方式输入 svm:
svmmatrix <- kpc@pcv
library(e1071)
svm(svmmatrix, as.factor(y))
Call:
svm.default(x = svmmatrix, y = as.factor(y))
Parameters:
SVM-Type: C-classification
SVM-Kernel: radial
cost: 1
gamma: 0.25
Number of Support Vectors: 95
就是这样! here 可以找到我在互联网上找到的关于 pca 的非常好的解释,以防您或阅读本文的任何其他人想要了解更多信息。