2017-11-23 16 views
0

私はscipy.minimize関数を使用しています。ここでは、1つのパラメータで2つの小数点以下のオプションのみを検索したいと考えています。scipyを使用して1つのパラメータの制約で最小化

def cost(parameters,input,target): 
    from sklearn.metrics import mean_squared_error 
    output = self.model(parameters = parameters,input = input) 
    cost = mean_squared_error(target.flatten(), output.flatten()) 

    return cost 

parameters = [1, 1] # initial parameters 
res = minimize(fun=cost, x0=parameters,args=(input,target) 
model_parameters = res.x 

ここで、self.modelは、パラメータに基づいていくつかの行列操作を実行する関数です。入力とターゲットは2つの行列です。この関数は、パラメータ[1]に制約があることを除いて、私が望むやり方で機能します。理想的には、np.arange(0,10,0.01)のような数の少ない配列を与えたいと思います。これは可能ですか?

答えて

1

平滑度は、これらのオプティマイザの中核となる仮定の1つです。

いくつかの変数が離散的であり、一部が複雑でない問題は、混合整数最適化(MI-線形プログラミングではうまく働く、MI-凸型プログラミングでは問題ないがソルバーが良くない)またはグローバル最適化(通常は派生自由)を使用しています。ここで、これを最適化するための変数

  • 内部ループnp.arange(0,10,0.01)固定用

    • 外側のループ

      は、あなたのタスクの詳細に応じて、私は問題を分解お勧めします変数は固定されています

    • 最高の目的(ステータス=成功)のモデルを返します

    これはNの内部最適化で有効です。ここでは、N=state-space of your to fix-varです。

    あなたのタスク/データによっては、(NPのarangeを使用してのような)単調固定空間を横断するのは良い考えかもしれませんし、必要に応じi+1(潜在的に少ない反復の問題のための初期点として反復iのソリューションを使用推測が良いならば)。しかし、これはおそらくここでは関係ありません。次の部分をご覧ください。

    実際に2つのパラメータが表示されている場合、この分解は1つの変数のみで内部問題につながります。次にminimizeを使用せず、minimize_scalarを使用してください(より速く、より堅牢で、初期点は必要ありません)。

  • +0

    はい、私は本当にこの機能で最適化するために2つのパラメータしか必要としません。私はあなたの最後の文章に従うかどうか分からないが、これは私の関数でもう一つのパラメータを使って一つのパラメータだけを最適化しなければならないということを意味するのだろうか? –

    +1

    はい。残りのパラメータのみを最適化し、以前に固定した他のパラメータを何とかしてください! – sascha

    関連する問題