python - 没有交叉验证的 Scikit Learn GridSearchCV(无监督学习)

标签 python optimization machine-learning scikit-learn cluster-analysis

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

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

最佳答案

经过大量搜索,我找到了 this thread .如果您使用以下方法,您似乎可以摆脱 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])

关于python - 没有交叉验证的 Scikit Learn GridSearchCV(无监督学习),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636370/

相关文章:

python - 使用 map 应用多个功能

python - 在线程中调用 pack_forget()

mysql - 使用多个 JOIN 优化 MySQL 查询

machine-learning - 自动编码器隐藏层中的输入 x 最大化激活函数是什么?

python - Paramiko 和伪 tty 分配

python - 为 PyTorch 使用大数据集的最有效方法?

java - 订阅数据馈送的多个并发用户的设计和架构

python - 如何高效去除冗余线性约束进行优化?

python - 属性错误: 'Word2Vec' object has no attribute 'endswith'

python - T5 微调模型输出 而不是大括号和其他特殊字符