无需交叉验证的Scikit Learn GridSearchCV(无监督学习)

发布于 2021-01-29 18:41:18

是否可以在没有交叉验证的情况下使用GridSearchCV?我正在尝试通过网格搜索优化KMeans聚类中的聚类数量,因此我不需要或想要交叉验证。

文档也使我感到困惑,因为在fit()方法下,它有一个用于非监督学习的选项(例如,将None用于非监督学习)。但是,如果您想进行无监督学习,则需要在没有交叉验证的情况下进行学习,而且似乎没有摆脱交叉验证的选择。

关注者
0
被浏览
165
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    经过大量搜索,我能够找到此线程。如果使用以下方法,似乎可以摆脱GridSearchCV中的交叉验证:

    cv=[(slice(None), slice(None))]

    我已经对我自己的编码版本的网格搜索(没有交叉验证)进行了测试,并且两种方法都得到了相同的结果。我将这个答案发布到我自己的问题上,以防其他人有同样的问题。

    编辑:在评论中回答jjrr的问题,这是一个示例用例:

    from sklearn.metrics import silhouette_score as sc
    
    def cv_silhouette_scorer(estimator, X):
        estimator.fit(X)
        cluster_labels = estimator.labels_
        num_labels = len(set(cluster_labels))
        num_samples = len(X.index)
        if num_labels == 1 or num_labels == num_samples:
            return -1
        else:
            return sc(X, cluster_labels)
    
    cv = [(slice(None), slice(None))]
    gs = GridSearchCV(estimator=sklearn.cluster.MeanShift(), param_grid=param_dict, 
                      scoring=cv_silhouette_scorer, cv=cv, n_jobs=-1)
    gs.fit(df[cols_of_interest])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看