将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)

Posted

技术标签:

【中文标题】将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)【英文标题】:Passing random variables to sklearn random search (RandomizedSearchCV) 【发布时间】:2021-06-11 11:48:17 【问题描述】:

下面代码中reciprocal()expon()有什么用?

svm_grid_R = 'kernel':["linear","rbf"], 'C': reciprocal(20,200000), "gamma" : expon(scale=1.0)

为什么我们不能只使用range()expon(scale=1.0)reciprocal(20,200000) 表示什么范围?

对于上下文,使用这些参数的代码如下:

svm_reg = SVR()
rnd_search = RandomizedSearchCV(svm_reg, param_distributions=svm_grid_R,
                                n_iter=50, cv=5, scoring='neg_mean_squared_error',
                                verbose=2, random_state=42)
rnd_search.fit(housing_prepared, housing_labels)

【问题讨论】:

【参考方案1】:

我建议您检查脚本中导入函数的部分,以确定它们是什么。根据您的问题,我推断如下:

reciprocal 应该来自 from scipy.stats import reciprocal,这会给你一个倒数随机变量。 expon 应该来自 from scipy.stats import expon,这会给你一个指数随机变量。

在您的代码中,您将这些随机变量作为Cgamma 参数传递给随机搜索。这意味着搜索使用的随机参数将从这两个分布中采样。

从技术上讲,您还可以使用range 告诉搜索从给定序列中随机抽取数字。另一种方法是向搜索传递一个随机变量,从中抽取随机参数。您的代码采用的是第二种方法。

为了更好地理解第二种方法的全部内容,请尝试以下方法:

# Import the distribution
from scipy.stats import expon
# Initialize a random variable with lambda=1 (scale=1)
exponential_rv = expon(scale=1)
# Draw a random sample from this distribution
exponential_rv.rvs()
> 0.780028923390962

在这种特定情况下,您的搜索会将C=0.780028923390962 传递给您的支持向量机。

【讨论】:

谢谢,所以reciprocal 给出了来自逆/倒数分布的随机数,expon 给出了 λ(尺度)为 1.0 的指数分布中的随机数? 没错!这就是代码的作用。 谢谢,帮了大忙。

以上是关于将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)的主要内容,如果未能解决你的问题,请参考以下文章

如何将 X_train + X_eval 传递给随机搜索 CV 拟合方法

使用自定义目标/损失函数的随机森林回归器(Python/Sklearn)

如何将变量从变量传递给指针结构对象?

sklearn 随机森林分类器可以处理分类变量吗?

VUE/NUXT:将随机数作为道具传递给子组件

随机森林 sklearn 变量重要性