首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

入门第三篇 投资组合之Scipy最优化介绍

从本篇开始,我们将进入投资组合与多因子策略阶段。在此之前,需要介绍一下最优化方法,或者说函数求最值。在量化投资和机器学习里,大部分最优化问题是解决全局最优而非局部最优,因此本文不讲解局部最优。

先以香蕉函数为例: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模型一文中给出答案。

参考文献:

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225G0HL0Q00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券