经过大量搜索,我能够找到此线程。如果使用以下方法,似乎可以摆脱gridsearchcv中的交叉验证:
cv=[(slice(None), slice(None))]
我已经对我自己的编码版本的网格搜索(没有交叉验证)进行了测试,并且两种方法都得到了相同的结果。我将这个答案发布到我自己的问题上,以防其他人有同样的问题。
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])