问题标签 [scikit-optimize]
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.
scikit-optimize - skopt:如何在优化期间动态更改边界?
我刚刚开始使用 skopt,所以请随时将我重定向到我可能错过的任何基本教程。无论如何,这里是:
我有一个优化问题,我通过复杂的物理模型计算 2 峰光谱,然后提取其洛伦兹曲线(即 6 个参数,每个峰 3 个)。然后我设置了一个成本函数,计算计算参数和实验参数之间的平方差,这样我得到一个 f(x),它接受一个数组并返回一个标量(如果我理解正确,这就是 gp_minimize 所要求的)。
我使用以下方法设置问题的约束:
暗1=真实(名称=“A1”,低=1,高=100)暗2=真实(名称=“A2”,低=1,高=200)
尺寸 = [dim1, dim2,...] 但在我的特定系统中,A2 受 2*A1 约束。有没有办法在如上所示的约束中使用它,以避免搜索大量“非物理”参数空间?在我的特殊情况下,评估模型非常耗时,因此避免不必要的计算将非常有帮助:)
在此先感谢您的帮助!
最好的,克里斯
python - Scipy Opt 遗传算法优化均方误差
我正在尝试使用遗传算法找到模型的最佳 5 个参数(微分方程的解)以拟合时间序列。
我使用 Scikit-Opt 遗传算法 ( https://scikit-opt.github.io/scikit-opt/#/en/README ) 来执行以下操作:
- 定义模型 --> model(a, b, c, d, e)来拟合时间序列 --> series
(模型给出了一个微分方程的解:一个与该序列长度相同的时间序列)
- 将算法的适应度函数定义为模型解与序列解的均方误差
def fitness_func(a, b, c, d, e): error = sklearn.metrics.mean_squared_error(model(a, b, c, d, e), series) return error
- 使用一些参数构建 GA,如 lb(下界)和 ub(上界),这两个边界通过手动拟合已知:
sko.GA.GA(func = fitness_func0, n_dim = 5,size_pop = 100, max_iter = 50, lb = [-0.5, -0.3 ,0.01, 0.0001, 0.1],ub = [-0.01, -0.01, 0.5, 0.0625, 10], precision = 1e-4, prob_mut = 0.2)
- 运行 GA:
best_x, best_y = ga.run()
bext_x是使均方误差(a, b, c, d, e)最小化的参数中的 5 个, best_y是模型的 best_x 参数的均方误差值
当我运行代码时它可以工作(我的意思是,生成 5 个参数,求解模型并计算解决方案和系列之间的均方误差以找到使其最小化的参数),但它不会优化误差和给出的参数也不适合这个系列。
即使我进行手动拟合,我也发现了比遗传算法发现的最佳均方误差
python - Scikit-learn - 如何为 CV 对象使用单个静态验证集?
在 Scikit-learn中RandomSearchCV
,GridSearchCV
需要cv
参数的交叉验证对象,例如,GroupKFold
或任何其他 CV 拆分器sklearn.model_selection
。
但是,如何使用单个静态验证集?我有非常大的训练集,大验证集,我只需要 CV 对象的接口,而不是整个交叉验证。
具体来说,我使用的是 Scikit-optimize 和BayesSearchCV
( docs ),它需要 CV 对象(与常规 Scikit-learn 对象相同的接口SearchCV
)。我想使用我选择的验证集,而不是整个简历。
python - XGBoost 和 scikit-optimize:BayesSearchCV 和 XGBRegressor 不兼容 - 为什么?
我有一个非常大的数据集(700 万行,54 个特征),我想拟合回归模型以使用XGBoost
. 为了训练最好的模型,我想使用BayesSearchCV
fromscikit-optimize
对不同的超参数组合重复运行拟合,直到找到性能最好的集合。
对于给定的一组超参数,XGBoost
训练一个模型需要很长时间,所以为了找到最好的超参数而不需要花费数天时间在训练折叠、超参数等的每个排列上,我想多线程XGBoost
和BayesSearchCV
. 我的代码的相关部分如下所示:
但是,我发现n_jobs > 1
在BayesSearchCV
通话中,fit 崩溃并且我收到以下错误:
每当我在调用中使用超过 1 个线程时,此错误就会持续存在BayesSearchCV
,并且与我提供的内存无关。
这是XGBoost
and之间的一些基本不兼容scikit-optimize
,还是可以强制两个包以某种方式一起工作?如果没有某种多线程优化方式,我担心拟合我的模型需要数周时间才能执行。我能做些什么来解决这个问题?
python - 在嵌套的 RFECV 中缩放、然后调整超参数的管道。我究竟做错了什么?
我正在尝试构建一个基本的 ML 管道,该管道将在调整超参数的同时选择功能。
代码如下。
它似乎运行良好,尽管速度很慢。但是,当模型似乎已完成拟合时,它会抛出 AttributeError 并停止。当我尝试访问 search1 时,它似乎不合适,我找不到任何 best_estimator_ 或任何东西。我究竟做错了什么?
错误代码如下。
optimization - 使用 Scikit Optimize 进行黑盒优化
我必须优化一个黑盒问题,该问题依赖于评估非常昂贵的外部软件(没有函数定义也没有派生)。它取决于几个变量,其中一些是实数,另一些是整数。
我认为 Scikit Optimize 可能是一个不错的选择。
我想知道以下示例(来自 Scikit Optimize 文档)是否可以适应我的实际问题。作为“f”一个提供给定参数集成本的外部函数。这是一个虚拟函数,只是为了可重现。但是,不要仅仅依赖于“x”,而是让它依赖于“y”和“z”,它们是其中之一,仅限于整数值。
我已经看到了一些其他面向超参数优化的 Scikit Optimize 示例(基于 Scikit Learn),但它们对我来说似乎不太清楚。
这是最小的可重现示例(崩溃):
最好的问候,谢谢
python - 使用 BayesSearchCV 时如何提取最佳特征?
使用 Skopt 的 BayesSearchCV 进行特征选择时,如何提取最优特征集的特征名称?我只知道如何将特征数量与其他超参数一起获得,但无法找到如何获得这些最佳特征的名称。
python - 使用 curve_fit() 获得负 R 平方值
在使用 scipy.optimize.curve_fit() 之后,我已经阅读了有关手动计算 R 平方值的相关文章。但是,当他们的函数遵循幂律 (f(x) = a*x^b) 时,他们会计算 R 平方值。我正在尝试做同样的事情,但得到负的 R 平方值。
这是我的代码:
我的 R 平方值为 -0.057....
据我了解,对非线性函数使用 R 平方值并不好,但由于过度拟合,我希望得到比线性模型高得多的 R 平方值。还有什么问题吗?
parallel-processing - model_queue_size 是做什么的?
一般问题:使用 scikit-optimize 进行黑盒优化。在文档中找不到 model_queue_size 的作用。我正在做 ask-tell 因为我可以并行化 y 的计算,如示例中所述。因此,进行一些分析,看起来 opt.tell() 调用在 model_queue_size 设置较小时运行得更快。这就是 model_queue_size 所做的 - 限制 opt.tell() 调用中使用的样本数量?第二个问题,使用 Optimizier - ask-tell 方法时如何设置 kappa?
谢谢