我尝试使用R中的函数U48meas
优化Th0U8meas
和optim
,但正如您在下面的代码中看到的那样,结果相当差:结果{{1 }}和U48calc
分别远离目标Th0U8calc
和U48meas
值。
有没有人有关于如何改善健康的提示?
Th0U8meas
答案 0 :(得分:0)
嗯,通常我不会认为这是一个答案,但是评论的时间太长了。
如何改善健康的提示?
其中两项估计是在边界上。以下是估算值与您给出的界限的对比情况:
est lbound ubound
1.00e-12 1e-14 1.0e-12 estimate = upper bound
1.00e+04 1e+04 6.0e+04 estimate = lower bound
1.22e+00 1e+00 1.3e+00 nicely in the middle
对边界的估计通常很糟糕。你应该考虑边界的来源,并确保它们准确设置。
参数具有极其不同的比例。这对optim
不利,当任何参数的1单位变化与另一参数的1单位变化具有大致相似的效果时,基于梯度的方法效果最佳。您可以提供parscale
参数以自动重新缩放它们。 ?optim
帮助说" 优化是在par/parscale
上执行的,这些应该具有可比性,因为任何元素的单位变化都会产生缩放值的单位变化&#34 ;.这些不必接近精确,但让参数范围接近同一数量级可能会有很大帮助。
与无界参数值相比,边界总是不太理想。与重新缩放类似,您可以缩放参数以生成边界(0,1),然后应用logit变换将其映射到(-Inf,Inf)。然后,您可以估计这些无界参数并应用逆变换以获得原始比例的值。这为您提供了更大的灵活性,因为您可以使用任何方法,而不仅仅是L-BFGS。
使用其他control
参数来尝试诊断问题并提高性能。打开trace
可以更好地了解正在发生的事情。也许减少公差并增加最大迭代次数。
请改用optimx
。 optim
,optimx
的作者John Nash建议人们使用他的for pixel in polygon: # predetermined using a basic scan-line polygon-fill algorithm
edge_distances = {}
for edge in polygon:
distance = calc_point_to_line_distance(pixel, edge) # simple formula, constant time
edge_distances[edge] = distance
colour = calc_pixel_colour(edge_distances) # runs in O(num_edges) time
set_pixel_colour(pixel, colour)
软件包以获得更好的性能和稳健性。