无需重新采样即可在mlr软件包中进行调整(集群)

时间:2019-06-06 12:05:56

标签: r cluster-analysis dbscan mlr

在mlr软件包中,我可以执行集群。假设我不想知道该模型如何处理看不见的数据,但是我只想知道对于给定的性能指标,最佳群集数是多少。

在此示例中,我使用dbscan软件包的moons数据集。

library(mlr)
library(dbscan)
data("moons")

db_task = makeClusterTask(data = moons)

db = makeLearner("cluster.dbscan")

ps = makeParamSet(makeDiscreteParam("eps", values = seq(0.1, 1, by = 0.1)),
  makeIntegerParam("MinPts", lower = 1, upper = 5))

ctrl = makeTuneControlGrid()

rdesc = makeResampleDesc("CV", iters = 3) # I don´t want to use it, but I have to 

res = tuneParams(db, 
  task = db_task, 
  control = ctrl,
  measures = silhouette, 
  resampling = rdesc, 
  par.set = ps)
#> [Tune] Started tuning learner cluster.dbscan for parameter set:
#>            Type len Def                                Constr Req Tunable
#> eps    discrete   -   - 0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1   -    TRUE
#> MinPts  integer   -   -                                1 to 5   -    TRUE
#>        Trafo
#> eps        -
#> MinPts     -
#> With control class: TuneControlGrid
#> Imputation value: Inf
#> [Tune-x] 1: eps=0.1; MinPts=1
#> Error in matrix(nrow = k, ncol = ncol(x)): invalid 'nrow' value (too large or NA)

reprex package(v0.3.0)于2019-06-06创建

但是,mlr强迫我使用重采样策略。是否知道如何在群集任务中使用mlr而无需重新采样?

1 个答案:

答案 0 :(得分:1)

mlr在集群方面非常差。 dbscan函数是非常慢速fpc包的包装。其他人则包裹Weka,这也非常慢。

请改用dbscan包。

但是,参数调整不仅仅适用于不受监督的设置。您没有标签,因此只能使用不可靠的“内部”启发式方法。而且对于DBSCAN来说,其中大多数都不可靠,因为它们会假设噪声是一个簇,但事实并非如此。很少有工具在评估中支持噪声(我已经在ELKI中看到了此选项),而且我不相信这两种变体都可以处理噪声。您可以为每个变体恕我直言构造不良的情况。在评估带噪声的聚类时,您可能至少需要使用两种方法。