sklearn的"RandomizedSearchCV"不适用于"np.random.RandomState"



我正在尝试优化管道,并想尝试给RandomizedSearchCV一个np.random.RandomState对象。我不能让它工作,但我可以给它其他的分布。

是否有一种特殊的语法可以用来给RandomSearchCV一个np.random.RandomState(0).uniform(0.1,1.0) ?

from scipy import stats
import numpy as np
from sklearn.neighbors import KernelDensity
from sklearn.grid_search import RandomizedSearchCV
# Generate data
x = np.random.normal(5,1,size=int(1e3))
# Make model
model = KernelDensity()
# Gridsearch for best params
# This one works
search_params = RandomizedSearchCV(model, param_distributions={"bandwidth":stats.uniform(0.1, 1)}, n_iter=30, n_jobs=2)
search_params.fit(x[:, None])
# RandomizedSearchCV(cv=None, error_score='raise',
#           estimator=KernelDensity(algorithm='auto', atol=0, bandwidth=1.0, breadth_first=True,
#        kernel='gaussian', leaf_size=40, metric='euclidean',
#        metric_params=None, rtol=0),
#           fit_params={}, iid=True, n_iter=30, n_jobs=2,
#           param_distributions={'bandwidth': <scipy.stats._distn_infrastructure.rv_frozen object at 0x106ab7da0>},
#           pre_dispatch='2*n_jobs', random_state=None, refit=True,
#           scoring=None, verbose=0)
# This one doesn't work :(
search_params = RandomizedSearchCV(model, param_distributions={"bandwidth":np.random.RandomState(0).uniform(0.1, 1)}, n_iter=30, n_jobs=2)
# TypeError: object of type 'float' has no len()

您所观察到的是预期的,因为类型为np.random.RandomState() 的对象的类方法uniform在调用时立即绘制了一个样本。

与此相比,使用scipy的stats.uniform() 创建了一个尚未从采样的发行版。(虽然我不确定它是否像你期望的那样在你的情况下工作;

如果你想合并基于np.random.RandomState()的东西,你必须像在文档中提到的那样构建自己的类:

这个例子使用了。Stats模块,其中包含许多有用的采样参数分布,如expon, gamma, uniform或randint。原则上,可以传递任何提供rvs(随机变量样本)方法来对值进行抽样的函数。对rvs函数的调用应该从连续调用的可能参数值中提供独立的随机样本。

相关内容

  • 没有找到相关文章

最新更新