问题标签 [grid-search]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cross-validation - 交叉验证和网格搜索有什么区别?
简单来说,交叉验证和网格搜索有什么区别?网格搜索如何工作?我应该先进行交叉验证,然后再进行网格搜索吗?
python - GridsearchCV sklearn 中的错误
我正在尝试使用 GridsearchCV 在 sklearn 中调整 GB 分类器。这是代码:
数据集 X 是 100 万行 * 245 个特征。我在接近 32 个内核的机器上运行。运行上述代码时出现以下错误,
当我使用 1000 行的子集运行相同的代码时,它可以工作。尝试了不同的 pre_dispatch 但仍然遇到问题。是因为数据大小还是其他原因?谢谢。
在 Python 2.7.9 上使用 sklearn 0.15.2
r - 对于朴素贝叶斯,插入符号和 klaR 包之间的速度差异
我正在运行一个朴素贝叶斯模型,klaR
直接使用该包非常快,在标准笔记本电脑上计算不到一秒:
mod <- NaiveBayes(category ~ ., data=training, na.action = na.omit)
然而,使用caret
包的train()
接口——我认为这只是上述函数的包装——需要很长时间:
mod <- train(category ~ ., data=training, na.action = na.omit, method="nb")
我猜这是因为train
默认包含一些重采样。我尝试包含trControl = trainControl(method = "none")
但收到以下错误:
Error in train.default(x, y, weights = w, ...) :
Only one model should be specified in tuneGrid with no resampling
任何想法为什么会发生这种情况或对这两个功能之间的速度差异的一般想法?
另外,速度差异有没有可能与公式界面有关?我的一些预测因子是超过一百个水平的因子。
python - 如何让随机网格搜索更详细?(似乎停止了,但无法诊断)
我正在运行一项相对较大的工作,其中涉及对数据集进行随机网格搜索,这(使用小的 n_iter_search)已经需要很长时间。
我在 64 核机器上运行它,大约 2 个小时,它使 2000 个线程在第一个折叠上工作。然后它完全停止向标准输出报告。它的最后报告是:
[Parallel(n_jobs=-1)]: Done 4 out of 60 | elapsed: 84.7min remaining: 1185.8min
我在 htop 上注意到几乎所有核心都处于 0%,这在训练随机森林时不会发生。程序没有反馈或错误,如果不是 htop,我会认为它仍在训练中。这以前发生过,所以这是一个反复出现的问题。机器反应灵敏,过程似乎还活着。
我已经有verbose = 10。关于如何诊断RandomizedSearchCV中发生的事情有什么想法吗?
我正在做的网格搜索:
rfc = RandomForestClassifier(n_jobs=-1)
param_grid = { 'n_estimators': sp_randint(100, 5000), 'max_features' : ['auto', None], 'min_samples_split' : sp_randint(2, 6) }
n_iter_search = 20
CV_rfc = RandomizedSearchCV(estimator=rfc, param_distributions=param_grid, n_iter = n_iter_search, verbose = 10,n_jobs = -1)
python - sklearn GridSearchCV(评分函数错误)
我想知道您是否可以帮助我解决我在运行网格搜索时收到的错误。我认为这可能是由于对网格搜索实际工作方式的误解。
我现在正在运行一个应用程序,我需要网格搜索来使用不同的评分函数评估最佳参数。我正在使用 RandomForestClassifier 将大型 X 数据集拟合到特征向量 Y,该向量 Y 是 0 和 1 的列表。(完全二进制)。我的评分函数 (MCC) 要求预测输入和实际输入完全是二元的。但是,由于某种原因,我不断收到 ValueError: multiclass is not supported。
我的理解是网格搜索,对数据集进行交叉验证,提出基于交叉验证的预测输入,然后将特征向量和预测插入到函数中。由于我的特征向量是完全二进制的,所以我的预测向量也应该是二进制的,并且在评估分数时不会出现问题。当我使用单个定义的参数(不使用网格搜索)运行随机森林时,将预测数据和特征向量插入 MCC 评分函数运行得非常好。所以我对运行网格搜索如何导致任何错误有点迷茫。
数据快照:
代码:
错误:
python - GridSearchCV 的 sklearn 中的自定义“k 时精度”评分对象
我目前正在尝试使用 scikit-learn 中的 GridSearchCV 调整超参数,使用“Precision at k”评分指标,如果我将分类器分数的前第 k 个百分位数分类为正类,这将给我精度。我知道可以使用 make_scorer 创建一个自定义记分器并创建一个 score 函数。这就是我现在所拥有的:
然而,试图打电话fit
给我Exception: Data must be 1-dimensional
,我不知道为什么。任何人都可以帮忙吗?提前致谢。
python - scikit-learn 管道:对变压器参数进行网格搜索以生成数据
我想使用 scikit-learn 管道的第一步来生成一个玩具数据集,以评估我的分析性能。我想出的一个简单易用的示例解决方案如下所示:
例如,这个正在运行的转换器可以这样调用:
一旦我尝试在此管道上进行网格搜索,这对我来说就变得很棘手:
网格搜索期望样本和标签作为输入,并且不如管道那么健壮,它不会抱怨None
作为输入参数:
这是有道理的,因为网格搜索需要将数据集划分为不同的 cv 分区。
除了上面的例子,我还有很多参数,可以在数据集生成步骤中调整。因此,我需要一个解决方案来将此步骤包含在我的参数选择交叉验证中。
问题:有没有办法从第一个转换器内部设置 GridSearch的X
s 和s ?y
或者一个解决方案会是什么样子,它使用多个不同的数据集(最好是并行的)调用 GridSearch?或者有没有人尝试过定制GridSearchCV
或者可以指出一些关于这个的阅读材料?
python - python中支持向量分类的时间尺度
我正在使用支持向量机,特别是带有 rbf 内核的 scikit learn 的 svm.SVC 来对 28,000 个图像进行分类。
这些图像是从 0 到 9 的手写数字,我的任务是分类每个图像是什么数字。每个图像都表示为 28 X 28 像素矩阵,因此我的数据集实际上是 28,000 X 28 X 28 的 3-D 矩阵。所以我将 28 X 28 矩阵展平为 784 个元素的列表,这使我的数据矩阵现在 28,000 X 784。
我的策略是首先找到 C 和 gamma 的最佳参数。所以我使用网格搜索,C 在(10^0 到 10^4)范围内,gamma 在(10^-3 到 10^3)范围内。然后我使用 10 折的 k 折,并在所有 10 折上使用 C 和 gamma 的每种可能组合对 svc 进行拟合和评分。
这是我的代码:
问题是这段代码需要一个多小时来运行所有的拟合和评分,即使我正在使用带有 40 个核心的 gridsearch 的多处理。有什么方法可以优化评分和拟合?或者代码中是否有一个巨大的错误会减慢进程?我知道当我评分时,我使用的是 svm.svc 的默认评分方法,我认为这只是平均准确度。
scikit-learn - 使用嵌套在 GridSearchCV 中的 RFECV 时,如何避免使用 estimator_params?
我目前正在使用 scikit-learn 为基于树的方法在网格搜索 (GridSearchCV) 中进行递归特征消除 (RFECV)。为此,我使用了 GitHub (0.17) 上的当前开发版本,它允许 RFECV 使用树方法中的特征重要性来选择要丢弃的特征。
为清楚起见,这意味着:
- 循环当前树方法的超参数
- 对每组参数进行递归特征消除以获得最优特征数
- 报告“分数”(例如准确性)
- 确定哪组参数产生了最好的分数
这段代码目前运行良好 - 但我收到关于使用 estimator_params 的折旧警告。这是当前代码:
以下是完整的折旧警告:
如果不使用 GridSearchCV 中的 estimator_params 将参数通过 RFECV 传递给估计器,我如何能够获得相同的结果?
python - Sklearn GridSearchCV,class_weight 因未知原因无法正常工作:(
试图class_weight
开始。我知道其余的代码有效,只是class_weight
它给了我错误:
这是我的代码
有人发现我犯的错误吗?