如何使用遗传算法优化knn中的参数k

时间:2018-08-20 10:30:58

标签: r optimization genetic-algorithm knn

我尝试使用r中的遗传算法来优化knn中的参数k。我使用以下代码尝试了此操作,但仍然收到错误。 我根据所选的k值将knn的精度用作适应度函数。如果您了解knn和遗传算法,请帮助我。这就是我所做的。

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)

错误:

  <div class="container">
     <div class="row">
        <div class="col-xs-4">col 1</div>
        <div class="col-xs-3 col-custom">
           <div class="pull-right">col 2</div>
           <!-- data-container="body"  data-placement="top"  -->
           <i class="fa fa-info-circle fa-lg m-t-xl" aria-hidden="true" data-toggle="tooltip" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit."></i>
        </div>
        <div class="col-xs-5">col 3</div>
     </div>
  </div>

如果您能帮助我,我将不胜感激。谢谢

1 个答案:

答案 0 :(得分:1)

我认为问题不在于您的代码,而在于方法:在这种情况下,不可能并且也没有必要使用遗传算法来优化k

您致电ga(type = "real-valued", lower = -10, upper = 10, ...)表示ga将在-10和10之间搜索最佳值。现在有两个问题:

  1. 对于knn,k的负值是不可能的
  2. ga将产生非整数值,例如k为1.234,这当然也是不可能的

幸运的是,在这种情况下,不必使用诸如遗传算法之类的复杂方法。如果要在[1,10]范围内找到最好的k,只需为每个值计算模型,如下所示:

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)]