将随机变量传递给 sklearn 随机搜索 (RandomizedSearchCV)
Passing random variables to sklearn random search (RandomizedSearchCV)
下面代码中的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)
我建议您检查脚本中导入函数的部分,以确定它们是什么。根据您的问题,我推断如下:
reciprocal
应该来自 from scipy.stats import reciprocal
,这会给你一个互惠的随机变量。
expon
应该来自 from scipy.stats import expon
,这会给你一个指数随机变量。
在您的代码中,您将这些随机变量作为 C
和 gamma
参数传递给随机搜索。这意味着搜索使用的随机参数将从这两个分布中采样。
从技术上讲,您还可以使用 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()
有什么用?
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)
我建议您检查脚本中导入函数的部分,以确定它们是什么。根据您的问题,我推断如下:
reciprocal
应该来自from scipy.stats import reciprocal
,这会给你一个互惠的随机变量。expon
应该来自from scipy.stats import expon
,这会给你一个指数随机变量。
在您的代码中,您将这些随机变量作为 C
和 gamma
参数传递给随机搜索。这意味着搜索使用的随机参数将从这两个分布中采样。
从技术上讲,您还可以使用 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
传递给您的支持向量机。