2016-03-12 44 views
0

我想训练一个knn使用caret::train分类数字(经典问题)采用PCA在训练前的功能。用R预处理数据到PCA组件的数据训练?

control = trainControl(method = "repeatedcv", 
         number = 10, 
         repeats = 5, 
         p = 0.9) 

knnFit = train(x = trainingDigit, 
       y = label, 
       metric = "Accuracy", 
       method = "knn", 
       trControl = control, 
       preProcess = "pca") 

我不明白怎么能代表我的数据,从而导致错误的训练:

Error in sample.int(length(x), size, replace, prob) : cannot take a sample larger than the population when 'replace = FALSE'

我的训练数据表示如下(Rdata file):

List of 10 
$ : num [1:400, 1:324] 0.934 0.979 0.877 0.853 0.945 ... 
$ : num [1:400, 1:324] 0.807 0.98 0.803 0.978 0.969 ... 
$ : num [1:400, 1:324] 0.745 0.883 0.776 0.825 0.922 ... 
$ : num [1:400, 1:324] 0.892 0.817 0.835 0.84 0.842 ... 
$ : num [1:400, 1:324] 0.752 0.859 0.881 0.884 0.855 ... 
$ : num [1:400, 1:324] 0.798 0.969 0.925 0.921 0.873 ... 
$ : num [1:400, 1:324] 0.964 0.93 0.97 0.857 0.926 ... 
$ : num [1:400, 1:324] 0.922 0.939 0.958 0.946 0.867 ... 
$ : num [1:400, 1:324] 0.969 0.947 0.916 0.861 0.86 ... 
$ : num [1:400, 1:324] 0.922 0.933 0.978 0.968 0.971 ... 

标签如下(.Rdata file):

List of 10 
$ : num [1:400] 0 0 0 0 0 0 0 0 0 0 ... 
$ : num [1:400] 1 1 1 1 1 1 1 1 1 1 ... 
$ : num [1:400] 2 2 2 2 2 2 2 2 2 2 ... 
$ : num [1:400] 3 3 3 3 3 3 3 3 3 3 ... 
$ : num [1:400] 4 4 4 4 4 4 4 4 4 4 ... 
$ : num [1:400] 5 5 5 5 5 5 5 5 5 5 ... 
$ : num [1:400] 6 6 6 6 6 6 6 6 6 6 ... 
$ : num [1:400] 7 7 7 7 7 7 7 7 7 7 ... 
$ : num [1:400] 8 8 8 8 8 8 8 8 8 8 ... 
$ : num [1:400] 9 9 9 9 9 9 9 9 9 9 ... 

回答

0

问题在于您对数据的表示。试试这个,你开始训练前:

label <- factor(c(label, recursive = TRUE)) 
trainingDigit <- data.frame(do.call(rbind, trainingDigit)) 

您需要将您的数据按摩到一个data.frame或data.frame样的格式与单个列与其他列是每个结果的功能代表你不同的结果。

此外,如果您想分类,而不是回归,您的结果需要是factor

为了清楚起见,我尝试运行如下的培训代码,它工作得很好。

library(caret) 
load("data.RData") 
load("testClass_new.RData") 

label <- factor(c(label, recursive = TRUE)) 
trainingDigit <- data.frame(do.call(rbind, trainingDigit)) 

control <- trainControl(method = "repeatedcv", 
         number = 10, 
         repeats = 5, 
         p = 0.9) 

knnFit <- train(x = trainingDigit, 
       y = label, 
       metric = "Accuracy", 
       method = "knn", 
       trControl = control, 
       preProcess = "pca") 
+0

我试着运行你的代码.. 我得到同样的错误,我只改变了路径。 – MachineLearning