3

1 to Nしたがって、アルファのベクトルが 1 つ、ベータのベクトルが 1 つあり、(アルファとベータの1 to N) すべての推定値の合計が 60になるときのシータを見つけようとしています。

\sum_{i=1}^N \frac{e^{\alpha_i(\theta-\beta_i)}}{1 + e^{\alpha_i(\theta-\beta_i)}} = 60

def CalcTheta(grensscore, alpha, beta):
    theta = 0.0001
    estimate = [grensscore-1]
    while(sum(estimate) < grensscore):
        theta += 0.00001
        for x in range(len(beta)):
            if x == 0:
                estimate = []
            estimate.append(math.exp(alpha[x] * (theta - beta[x])) /
                            (1 + math.exp(alpha[x] * (theta - beta[x]))))
    return(theta)

基本的に私がしたことは、から始めてtheta = 0.0001、これらすべての合計を繰り返し計算し、60 未満の場合は毎回 0.0001 を追加していきます。60 を超えると、シータが見つかったことを意味します。

私はこの方法で値を見つけましたtheta。問題は、Python を使用して 0.456 のシータを見つけるのに約 60 秒かかったということです。

このシータを見つけるためのより迅速なアプローチは何ですか (これを他のデータに適用したいため)?

4

1 に答える 1

2

θの下限と上限が分かっていて、関数がこれらの間の範囲で単調である場合、二分アルゴリズムを使用して目的の値を簡単かつ迅速に見つけることができます。

于 2013-03-18T21:38:29.673 に答える