2016-10-24 1 views
1

パイプラインを最適化しようとしていて、RandomizedSearchCVnp.random.RandomStateオブジェクトを渡そうとしました。私はそれを働かせることはできませんが、私はそれに他の配布物を与えることができます。sklearnの `RandomizedSearchCV`が` np.random.RandomState`で動作しません

RandomSearchCVnp.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() 

答えて

2

はすぐに呼び出しの時点でサンプルを描くnp.random.RandomState()タイプのオブジェクトのクラス、メソッドuniformとして、期待されています。

これと比較すると、scipyのstats.uniform()はまだからサンプルを配信しています。 (私はそれがあなたのケースで期待どおりに動作しているかわかりませんが、パラメータには注意してください)。

あなたはnp.random.RandomState()に基づいて何かを組み込みたい場合は、docsで述べたように、独自のクラスを構築する必要があります。

この例では、サンプリング・パラメータのための多くの有用なディストリビューションが含まれているscipy.statsモジュールを、使用していますエキソン、ガンマ、ユニフォーム、ランデントなどです。原則として、値をサンプリングするrvs(random variate sample)メソッドを提供する任意の関数を渡すことができます。 rvs関数への呼び出しは、連続呼び出しで可能なパラメータ値から独立したランダムサンプルを提供する必要があります。

+0

ありがとうございました! 'RandomizedSearchCV(model、param_distributions = {" bandwidth ":stats.uniform(0.1、1)}、n_iter = 30、n_jobs = 2)にエラーがありますか?私はそれをhttps://jakevdp.github.io/blog/2013/12/01/kernel-density-estimation/ –

+0

@ O.rkaから外していました。uniform-classはコンストラクタ引数を実装していません[私が見ているように](https://github.com/scipy/scipy/blob/v0.18.1/scipy/stats/_continuous_distns.py#L4883)。継承される上位クラスは、範囲のaとbのような名前付き引数のみを使用します。だから私は、あなたが(0,1)のデフォルト範囲からサンプルをやっていることを恐れているが、それについて100%は確信していない。しかし、それはチェックするのが簡単なはずです。 – sascha

+0

このようなことをしますか? 'stats.uniform(5,1​​).rvs(3).tolist() #[5.172340508345329、5.137135749628878、5.932595463037163]'それともバックエンドで違いますか? –

関連する問題