是否可以在没有交叉验证的情况下使用 GridSearchCV?我正在尝试通过网格搜索优化 KMeans 聚类中的聚类数量,因此我不需要或想要交叉验证。
The 文档 http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html也让我感到困惑,因为在 fit() 方法下,它有一个无监督学习的选项(说使用 None 进行无监督学习)。但如果你想做无监督学习,你需要在没有交叉验证的情况下进行,而且似乎没有选择摆脱交叉验证。
经过多次搜索,我找到了这个线程 https://github.com/scikit-learn/scikit-learn/issues/2048。如果您使用以下命令,您似乎可以摆脱 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])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)