在 mlr 包中无需重新采样进行调整(聚类)
Tuning without resampling in mlr package (clustering)
在 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 吗?
mlr
在集群方面非常差。它的 dbscan
函数是 very 慢速 fpc
包的包装器。其他的包裹Weka,也是很慢。
改用 dbscan
包。
然而,参数调整不仅仅适用于无人监督的设置。你没有标签,所以你只有不可靠的 "internal" 启发式。其中大部分对于 DBSCAN 来说都不可靠,因为它们会假设噪声是一个簇,但事实并非如此。很少有工具支持评估中的噪声(我在 ELKI 中看到过此选项),而且我不相信处理噪声的任何一种变体都是好的。您可以为每个变体恕我直言构建不需要的案例。您可能需要至少使用两种度量来评估噪声聚类。
在 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 吗?
mlr
在集群方面非常差。它的 dbscan
函数是 very 慢速 fpc
包的包装器。其他的包裹Weka,也是很慢。
改用 dbscan
包。
然而,参数调整不仅仅适用于无人监督的设置。你没有标签,所以你只有不可靠的 "internal" 启发式。其中大部分对于 DBSCAN 来说都不可靠,因为它们会假设噪声是一个簇,但事实并非如此。很少有工具支持评估中的噪声(我在 ELKI 中看到过此选项),而且我不相信处理噪声的任何一种变体都是好的。您可以为每个变体恕我直言构建不需要的案例。您可能需要至少使用两种度量来评估噪声聚类。