如何在我的 R 数据集上使用 PC(来自 PCA)?
how to use the PCs (resulting from PCA) on my dataset in R?
我是R学习者。我正在处理来自互联网的 'Human Activity Recognition' 数据集。它有 563 个变量,最后一个变量是 class 变量 'Activity',它必须被预测。
我在这里尝试使用 R 的 CARET 包中的 KNN 算法。
我创建了另一个包含 561 个数字变量的数据集,不包括最后 2 个 - 主题和 activity。
我 运行 对此进行了 PCA,并决定我将使用前 20 台 PC。
pca1 <- prcomp(human2, scale = TRUE)
我将这些 PC 的数据保存在另一个名为 'newdat'
的数据集中
newdat <- pca1$x[ ,1:20]
现在我正在尝试 运行 下面的代码:但是它给了我错误,因为这个 newdat 没有我的 class 变量
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)
我试图从原始数据中提取最后一列 'activity' 并使用带有 'newdat' 的 cbind() 附加它以在 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
您是如何尝试 cbind 列的,能否请您显示代码?我认为你只是步入了 StringsAsFactors = TRUE
所产生的困难。以下行是否解决了您的问题:
#...
#newdat <- pca1$x[ ,1:20]
newdat <- cbind(newdat, Activity = as.character(human2$Activity))
我是R学习者。我正在处理来自互联网的 'Human Activity Recognition' 数据集。它有 563 个变量,最后一个变量是 class 变量 'Activity',它必须被预测。
我在这里尝试使用 R 的 CARET 包中的 KNN 算法。
我创建了另一个包含 561 个数字变量的数据集,不包括最后 2 个 - 主题和 activity。
我 运行 对此进行了 PCA,并决定我将使用前 20 台 PC。
pca1 <- prcomp(human2, scale = TRUE)
我将这些 PC 的数据保存在另一个名为 'newdat'
的数据集中newdat <- pca1$x[ ,1:20]
现在我正在尝试 运行 下面的代码:但是它给了我错误,因为这个 newdat 没有我的 class 变量
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)
我试图从原始数据中提取最后一列 'activity' 并使用带有 'newdat' 的 cbind() 附加它以在 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
您是如何尝试 cbind 列的,能否请您显示代码?我认为你只是步入了 StringsAsFactors = TRUE
所产生的困难。以下行是否解决了您的问题:
#...
#newdat <- pca1$x[ ,1:20]
newdat <- cbind(newdat, Activity = as.character(human2$Activity))