是否可以在没有交叉验证的情况下使用GridSearchCV?我试图通过网格搜索优化KMeans集群中的集群数量,因此我不需要或不需要交叉验证。
documentation也让我感到困惑,因为在fit()方法下,它有一个无监督学习的选项(说无人监督学习使用None)。但是如果你想进行无监督学习,你需要在没有交叉验证的情况下进行,并且似乎没有选择去除交叉验证。
答案 0 :(得分:14)
经过多次搜索,我找到了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])
答案 1 :(得分:6)
我会回答你的问题,因为它似乎仍未得到答复。使用带有selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: //input[@value='Advanced']
循环的并行方法,您可以使用for
模块。
multiprocessing
答案 2 :(得分:1)
我认为使用cv = ShuffleSplit(test_size = 0.20,n_splits = 1)和n_splits = 1是一个更好的解决方案,如post建议
答案 3 :(得分:0)
我最近基于this answer提出了以下自定义交叉验证器。我将其传递给GridSearchCV
,它为我正确地禁用了交叉验证:
import numpy as np
class DisabledCV:
def __init__(self):
self.n_splits = 1
def split(self, X, y, groups=None):
yield (np.arange(len(X)), np.arange(len(y)))
def get_n_splits(self, X, y, groups=None):
return self.n_splits
我希望它能提供帮助。