最初にお読みください: 問題は、絶対値の括弧が実際のスコアを囲む必要があるということでした。現在の問題は、実際には十分に正確ではなく、0.000001 を無視し、許容範囲として 0.0001 を好むことです (55 に近づけるように要求すると、54.994397921372205 で停止します)。私は許容範囲を 0 の後に 1 が続くクレイジーな量に増やしましたが、たとえば 50 に近づくと、49.14 と推定されます!! ひどい!なぜこれが起こるのですか?
更新:それはある必要がありますfloat()
いくつかのベクトルに基づく関数に属するシータを見つけようとしています。このコードを R で実行して、これを文字通り R から Python に変換しようとしました。
grensscore が 50 に等しいときの Theta の値を概算したいと考えています。最初の値は theta = 0.5 で、R で繰り返します。R で約 11 回の繰り返しだけで目的に到達します。
悲しいことに、これは Python では機能せず、私はこれだけ分離しました。何らかの理由で、値は 0.5 を下回ることしかできず、0.5 を超えることはできません。これらの場所でプリントを使用すると#a
、コード内のパーツが実行されていないにもかかわらず、パーツが実行されていることが#b
わかります。これは、値が決して上がらないことを示しているため、0.4 のような値を見つけることはできません (0.5、0.25、0.37.5、0.4375 などになる必要がありますが、0.5、0.25、0.125 しか下がらないため)。そして遅かれ早かれ停止します)
#b が実行されていることがわかります。下げなければならないときに何度も別れますが、上がることはありません。私もそれらを切り替えて、順序効果があるかどうかを確認しましたが、そうではありません:それは単にそれが真であると評価されないだけです(私がそれを知っている場合でも) Rで働いていますか?
def CalcTheta(grensscore, alpha, beta):
theta = 0.5
estimate = [10000] # I just set this to not error on the check
up = 1
down = 0
while((math.fabs(sum(estimate)) - grensscore) > 0.00001):
if estimate == [10000]: # I set it like this,
estimate = [grensscore] # so it will skip the first run
# a.
if (sum(estimate) - grensscore) < 0:
down = theta
print(down)
theta = (theta + up) / 2
print(theta)
#b.
if (sum(estimate) - grensscore) > 0:
print(up, down, theta)
up = theta
theta = (theta + down) / 2
print(up, down, theta)
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)
CalcTheta(50, data[:,1], data[:,2])