首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >没有交叉验证的Scikit学习GridSearchCV (无监督学习)

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

Stack Overflow用户
提问于 2017-06-19 17:15:57
回答 4查看 16.6K关注 0票数 29

在没有交叉验证的情况下可以使用GridSearchCV吗?我试图通过网格搜索来优化KMeans集群中的集群数量,因此我不需要或不希望交叉验证。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-06-21 17:10:55

经过多次搜索,我找到了这条线。如果您使用: GridSearchCV,则可以消除交叉验证:

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

我在没有交叉验证的情况下对我自己编码的网格搜索进行了测试,从这两种方法中我得到了相同的结果。我把这个答案贴在我自己的问题上,以防其他人有同样的问题。

编辑:要在注释中回答jjrr的问题,下面是一个示例用例:

代码语言:javascript
运行
复制
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])
票数 43
EN

Stack Overflow用户

发布于 2017-06-20 19:07:36

我要回答你的问题,因为它似乎还没有得到回答。使用并行方法和for循环,您可以使用multiprocessing模块。

代码语言:javascript
运行
复制
from multiprocessing.dummy import Pool
from sklearn.cluster import KMeans
import functools

kmeans = KMeans()

# define your custom function for passing into each thread
def find_cluster(n_clusters, kmeans, X):
    from sklearn.metrics import silhouette_score  # you want to import in the scorer in your function

    kmeans.set_params(n_clusters=n_clusters)  # set n_cluster
    labels = kmeans.fit_predict(X)  # fit & predict
    score = silhouette_score(X, labels)  # get the score

    return score

# Now's the parallel implementation
clusters = [3, 4, 5]
pool = Pool()
results = pool.map(functools.partial(find_cluster, kmeans=kmeans, X=X), clusters)
pool.close()
pool.join()

# print the results
print(results)  # will print a list of scores that corresponds to the clusters list
票数 8
EN

Stack Overflow用户

发布于 2018-05-30 16:48:58

我认为将cv=ShuffleSplit(test_size=0.20,n_splits=1)与n_splits=1一起使用是一个更好的解决方案,帖子建议

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44636370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档