R 优化代码以最小化错误
我已经编写了下面的代码,通过更改alpha的值(使用迭代方法)来最小化错误 我使用了R 优化代码以最小化错误,r,optimization,R,Optimization,我已经编写了下面的代码,通过更改alpha的值(使用迭代方法)来最小化错误 我使用了sapply进行基本优化。但是,如果点数超过10000,则此代码将永远运行。那么,有没有更好的实现方法或标准技术来优化(比如二分法)。如果是的话,你能帮我优化代码吗 注意:我需要alpha的值至少有4位小数 非常感谢您的帮助。用替换而不是for并不会更有效。它通常只是简单的代码 然而,您实际上可以利用代码中的矢量化,这会更快 例如,sapply(错误,函数(x)x*x)可以简单地替换为x*x。因此,R中数字的平方
sapply
进行基本优化。但是,如果点数超过10000,则此代码将永远运行。那么,有没有更好的实现方法或标准技术来优化(比如二分法
)。如果是的话,你能帮我优化代码吗
注意:我需要alpha的值至少有4位小数
非常感谢您的帮助。用
替换而不是for
并不会更有效。它通常只是简单的代码
然而,您实际上可以利用代码中的矢量化,这会更快
例如,sapply(错误,函数(x)x*x)
可以简单地替换为x*x
。因此,R中数字的平方误差之和就是sum((OY-PY)**2)
因此,您的整个功能归结为:
minimizeAlpha = function(Y, OY, alpha)
sum((OY - alpha * Y) ** 2)
这应该更有效-但首先也是最重要的是它的代码更好,可读性更好。您可以通过vapply
和使用返回值,即vapply(alphas,函数(x)minimizeAlpha(Y,OY,x),数值(1))获得一些效率
应该考虑用sapply
替换的,这不是一个优化,这是一个误解。@akrun-sse=vapply(alphas,FUN=function(x)minimizeAlpha(Y,OY,x),FUN.VALUE=0.0)
。代码仍然在永远运行。这是正确的语法吗?我说了一些效率,但是没有那么多。否则,一个选项可能是复制长度为“Y”、“OY”和“OY”的Alpha,并应用函数,同时替换函数中的sapply
。太好了。这很有魅力。只是为了增加我的理解,是不是这行代码占用了时间?此外,如果NPOINT进一步增加,即使这需要时间。所以,我听说有一些标准,比如Bisection
方法来解决这些问题?我走对了吗?@KartheekPalepu是的,sapply
行实质上是将一个高效的C操作分解成几个部分,并以R而不是C运行更多(较慢)的代码。关于第二个问题,你走对了。另外,请看一下用于实现此功能的高级策略的optimize
和optim
函数。
minimizeAlpha = function(Y, OY, alpha)
sum((OY - alpha * Y) ** 2)