我尝试用遗传算法在r中优化knn中的参数k,使用下面的代码进行了尝试,但仍然收到了一个错误。以选取的k值为适应度函数,利用knn的精度。如果你知道knn和遗传算法,请帮助我。这就是我所做的。
library(caret)
library(GA)
library(class)
#data import
tea_jenis_F3 <- read.csv("D:/inggrit/program/F3.csv")
str(tea_jenis_F3)
#to check missing data
anyNA(tea_jenis_F3)
#data slicing
set.seed(101)
intrain_jenis_F3 <- createDataPartition(tea_jenis_F3$category, p= 0.7, list = FALSE)
training_jenis_F3 <- tea_jenis_F3 [intrain_jenis_F3,]
testing_jenis_F3 <- tea_jenis_F3 [-intrain_jenis_F3,]
#transforming the dependent variable to a factor
training_jenis_F3[["category"]] = factor(training_jenis_F3[["category"]])
#fitness function
fitness_KNN <- function(chromosome)
{
# First values in chromosome are 'k' of 'knn' method
tuneGrid <- data.frame(k=chromosome[1])
# train control
train_control <- trainControl(method = "cv",number = 10)
# train the model
set.seed(1234)
model <- train(category ~ ., data= training_jenis_F3, trControl=train_control,
method="knn", tuneGrid=tuneGrid)
# Extract accuracy statistics
accuracy_val <- model$results$accuracy
}
GA <- ga(type = "real-valued", fitness = fitness_KNN, lower = -10, upper = 10, monitor = NULL)
错误:
Something is wrong; all the Accuracy metric values are missing:
Accuracy Kappa
Min. : NA Min. : NA
1st Qu.: NA 1st Qu.: NA
Median : NA Median : NA
Mean :NaN Mean :NaN
3rd Qu.: NA 3rd Qu.: NA
Max. : NA Max. : NA
NA's :1 NA's :1
Error: Stopping
In addition: There were 11 warnings (use warnings() to see them)
如果你能帮我,我将不胜感激。谢谢
发布于 2018-08-23 06:32:08
我认为问题不在于代码,而在于方法:在这种设置中使用遗传算法优化k
是不可能的,也没有必要的。
您调用了ga(type = "real-valued", lower = -10, upper = 10, ...)
,这意味着ga
将在-10到10之间搜索最佳值。
k
的负值对knn是不可能的。ga
将生成非整数值,例如k为1.234,这当然也是不可能的。幸运的是,在这种情况下,没有必要使用像遗传算法这样复杂的方法。如果您想在范围1中找到最佳的k
,10只需计算每个值的模型,如下所示:
k_cands <- 1:10
accuracy <- numeric()
for(k in k_cands) {
[compute model with k]
accuracy <- c(accuracy, model$results$accuracy)
}
best_k <- k_cands[which.max(accuracy)]
https://stackoverflow.com/questions/51928823
复制