从本篇开始,我们将进入投资组合与多因子策略阶段。在此之前,需要介绍一下最优化方法,或者说函数求最值。在量化投资和机器学习里,大部分最优化问题是解决全局最优而非局部最优,因此本文不讲解局部最优。
先以香蕉函数为例:100*(y-x**2)**2+(1-x)**2,这是检验优化算法性能最常用的函数之一。从表达式里很容易看出其最值在(1,1)处在求该函数前让我们先看看该函数的图像,首先导入需要的包。由于是二元函数,需要绘制3D图,需用Axes3D。
定义函数:
定义绘图范围:
meshgrid函数将点(x,y)放在网格中。绘图如下:
绘制其等高线:
接下来是求其最小值。Scipy的最优化子库scipy.optimize拥有几乎全部的常用最优化算法函数。
感兴趣的读者可以参考一篇较好的博文:
定义优化目标函数f(p):
其中(-2,2)是优化的初始点。该问题拟采用Powell算法解决,该方法是一种共轭向量法,解决计算量不大的问题时可以使用。
得到最优的点(x,y)是(1,1),值为0.迭代14次,函数赋值398次。
需要注意的是Python2和Python3在定义目标函数上可以使用的代码有一定区别,Python2里可以直接定义 def f((x,y))而不需要和Python3一样先使用,x,y=p再定义一个f(p).
本文再留下一个有约束优化的问题,希望有读者可以自行用Python3的代码解决:
该问题会在MPT模型一文中给出答案。
参考文献:
领取专属 10元无门槛券
私享最新 技术干货