如何在我的R数据集中使用PC(由PCA产生)?

时间:2017-11-20 04:40:00

标签: r classification knn predictive

我是学习者。我正致力于人类活动识别'来自互联网的数据集。它有563个变量,最后一个变量是类变量' Activity'这是必须预测的。

我试图在R的CARET包中使用KNN算法。

我创建了另一个包含561个数字变量的数据集,不包括最后一个 - 主题和活动。

我在那里运行了PCA,并决定使用前20台个人电脑。

pca1 <- prcomp(human2, scale = TRUE)

我将这些电脑的数据保存在另一个名为“newdat&#39;

的数据集中
newdat <- pca1$x[ ,1:20]

现在我尝试运行以下代码:但是它给了我错误,因为这个newdat没有我的类变量

trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
set.seed(3333)
knn_fit <- train(Activity ~., data = newdat, method = "knn",
                 trControl=trctrl,
                 preProcess = c("center", "scale"),
                 tuneLength = 10)

我试图提取最后一栏&#39;活动&#39;从原始数据中并使用cbind()将其添加到&new;新的&#39;在knn-fit(上面)上使用它,但它没有附加。

有关如何使用PC的任何建议吗?

以下是代码:

human1 <- read.csv("C:/NIIT/Term 2/Prog for Analytics II/human-activity-recognition-with-smartphones (1)/train1.csv", header = TRUE)
humant <- read.csv("C:/NIIT/Term 2/Prog for Analytics II/human-activity-recognition-with-smartphones (1)/test1.csv", header = TRUE)

#taking the predictor columns
human2 <- human1[ ,1:561]


pca1 <- prcomp(human2, scale = TRUE)
newdat <- pca1$x[ ,1:15]
newdat <- cbind(newdat, Activity = as.character(human1$Activity))

pca1 <- preProcess(human1[,1:561], 
                   method=c("BoxCox", "center", 
                            "scale", "pca"))
PC = predict(pca1, human1[,1:561])


trctrl <- trainControl(method = "repeatedcv", number = 10, repeats = 3)
set.seed(3333)
knn_fit <- train(Activity ~., data = newdat, method = "knn",
                 trControl=trctrl,
                 preProcess = c("center", "scale"),
                 tuneLength = 10)

#applying knn_fit to test data

test_pred <- predict(knn_fit, newdata = testing)
test_pred

#checking the prediction
confusionMatrix(test_pred, testing$V1 )

我在下面的部分遇到了错误。我附上了错误:

> knn_fit <- train(Activity ~., data = newdat, method = "knn",
+                  trControl=trctrl,
+                  preProcess = c("center", "scale"),
+                  tuneLength = 10)
Error: cannot allocate vector of size 1.3 Gb

1 个答案:

答案 0 :(得分:0)

您是如何尝试cbind列的,请您显示代码?我想你只是简单地解决了StringsAsFactors = TRUE产生的困难。以下行是否解决了您的问题:

#...
#newdat <- pca1$x[ ,1:20]    
newdat <- cbind(newdat, Activity = as.character(human2$Activity))