我正在聚集大约100条记录的样本(未标记)并尝试使用grid_search来评估具有各种超参数的聚类算法.我正在使用得分silhouette_score很好.
在这里,我的问题是,我并不需要使用的交叉验证方面GridSearchCV/ RandomizedSearchCV,但我不能找到一个简单GridSearch/ RandomizedSearch.我可以写我自己,但ParameterSampler和ParameterGrid对象是非常有用的.
我的下一步将是子类化BaseSearchCV并实现我自己的_fit()方法,但认为值得问一下,有更简单的方法来做到这一点,例如通过传递一些东西到cv参数?
def silhouette_score(estimator, X):
clusters = estimator.fit_predict(X)
score = metrics.silhouette_score(distance_matrix, clusters, metric='precomputed')
return score
ca = KMeans()
param_grid = {"n_clusters": range(2, 11)}
# run randomized search
search = GridSearchCV(
ca,
param_distributions=param_dist,
n_iter=n_iter_search,
scoring=silhouette_score,
cv= # can I pass something here to only use a single fold?
)
search.fit(distance_matrix)
Run Code Online (Sandbox Code Playgroud) 在scikit中有一个绝对有用的类GridSearchCV - 学习网格搜索和交叉验证,但我不想做交叉验证.我想在没有交叉验证的情况下进行网格搜索,并使用整个数据进行训练.更具体地说,我需要在网格搜索期间使用"oob得分"评估RandomForestClassifier制作的模型.有简单的方法吗?或者我应该自己上课?
要点是
我有一个不平衡的数据集,所以我有一个过采样策略,我只在训练数据时应用.我想使用scikit-learn类GridSearchCV或者cross_val_score在我的估算器(例如SVC)上探索或交叉验证一些参数.但是我看到你要么传递cv折叠的数量,要么传递标准的交叉验证生成器.
我想创建一个自定义cv生成器,所以我得到并分层5折并仅过滤我的训练数据(4倍)并让scikit-learn通过我的估计器的参数网格查看并使用剩余的折叠进行验证.
提前致谢.
我想运行常规的“不带CV的网格搜索”,即我不想交叉验证,但是cv=1不允许设置。
我之所以这样做,是因为我使用分类器来绘制决策边界并可视化/理解我的数据,而不是预测标签,并且不关心泛化错误。我想尽量减少训练错误。
编辑:我想我真的在问两个问题
cv=1的GridSearchCV?由以下ogrisel回答scoring参数插入我自己的评分函数GridSearchCV。