在mlr包中进行无重采样的调优(群集)

在mlr包中进行无重采样的调优(群集),r,cluster-analysis,dbscan,mlr,R,Cluster Analysis,Dbscan,Mlr,在mlr包中,我可以执行集群。假设我不想知道模型在看不见的数据上的表现,但我只想知道对于给定的性能度量,集群的最佳数量是多少 在本例中,我使用dbscan包的moons数据集 库(mlr) 图书馆(dbscan) 数据(“卫星”) db_任务=makeClusterTask(数据=卫星) db=makeLearner(“cluster.dbscan”) ps=makeParamSet(makeDiscreteParam(“eps”,value=seq(0.1,1,by=0.1)), makeIn

在mlr包中,我可以执行集群。假设我不想知道模型在看不见的数据上的表现,但我只想知道对于给定的性能度量,集群的最佳数量是多少

在本例中,我使用dbscan包的moons数据集

库(mlr)
图书馆(dbscan)
数据(“卫星”)
db_任务=makeClusterTask(数据=卫星)
db=makeLearner(“cluster.dbscan”)
ps=makeParamSet(makeDiscreteParam(“eps”,value=seq(0.1,1,by=0.1)),
makeIntegerParam(“MinPts”,下=1,上=5))
ctrl=makeTuneControlGrid()
rdesc=makeResampleDesc(“CV”,iters=3)#我不想使用它,但我必须使用它
res=调谐参数(db,
任务=db_任务,
control=ctrl,
尺寸=轮廓,
重采样=rdesc,
PARSET=PS)
#>[Tune]已开始调整参数集的learner cluster.dbscan:
#>类型len Def Constr Req可调
#>eps离散--0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1-真
#>MinPts整数--1到5-真
#>特拉沃
#>每股收益-
#>明普茨-
#>使用控制类:TuneControlGrid
#>插补值:Inf
#>[Tune-x]1:eps=0.1;MinPts=1
#>矩阵中的错误(nrow=k,ncol=ncol(x)):无效的“nrow”值(太大或NA)
由(v0.3.0)于2019-06-06创建


然而,mlr迫使我使用重采样策略。你知道如何在集群任务中使用mlr而不重新采样吗?

mlr
在集群中非常糟糕。它的
dbscan
函数是非常慢的
fpc
包的包装器。其他的包裹Weka,速度也很慢

改用
dbscan
软件包


然而,参数调整不仅仅在无监督的设置下起作用。你没有标签,所以你只有不可靠的“内部”启发。对于DBSCAN来说,其中大多数都是不可靠的,因为他们会假设噪声是一个集群,但事实并非如此。很少有工具支持评估中的噪声(我在ELKI中看到了这方面的选项),而且我不相信处理噪声的两种变体都是好的。您可以为每个变体IMHO构造不需要的情况。您可能需要使用至少两个度量来评估有噪声的集群。

您的代码没有为我运行(请参阅上面插入的reprex)。为什么不看看在调优过程中由性能最佳的模型计算出的集群数量?我不明白为什么它不起作用(我把它放在那里,直到我明白原因为止)。我有一些数据集,其中CV和轮廓图的结果不同。我已经用
dbscan
软件包尝试过了。问题是,我必须事先设置簇的数量,然后绘制knn图。但在我的案例中,它们并不清晰可见(即通过PCA)。因此,基于度量的调优似乎是一种解决方案。如果您想预定义集群的数量,k-means似乎更合适,因为它强制了这样一种结构。然而,考虑光学和HDBSCAN *,而不是在DSPCAN上的网格搜索。这就是为什么光学一开始就被发明了,不需要选择ε。