浅谈SciPy中的optimize.minimize实现受限优化问题


Posted in Python onFebruary 29, 2020

问题描述:有一批样本x,每个样本都有几个固定的标签,如(男,24岁,上海),需要从中抽取一批样本,使样本总的标签比例满足分布P(x),如(男:女=49%:51%、20岁:30岁=9%:11%、..........)

采用KL-散度作为优化目标函数。

KL-散度又叫相对熵

KL-散度在机器学习中,P用来表示样本的真实分布,比如[1,0,0]表示当前样本属于第一类。Q用来表示模型所预测的分布,比如[0.7,0.2,0.1]

KL-散度直观的理解就是如果用P来描述样本,那么就非常完美。而用Q来描述样本,虽然可以大致描述,但是不是那么的完美,信息量不足,需要额外的一些“信息增量”才能达到和P一样完美的描述。如果我们的Q通过反复训练,也能完美的描述样本,那么就不再需要额外的“信息增量”,Q等价于P。

公式:

浅谈SciPy中的optimize.minimize实现受限优化问题

使用SciPy中的optimize.minimize来进行优化。

def minimize(fun, x0, args=(), method=None, jac=None, hess=None,
    hessp=None, bounds=None, constraints=(), tol=None,
    callback=None, options=None):

几个重要的参数:

fun:目标函数(he objective function to be minimized);

x0:参数初始值(Initial guess. Array of real elements of size (n,));

bounds:参数取值范围限制(Bounds on variables for L-BFGS-B, TNC, SLSQP and trust-constr methods.)

constraints:约束函数(Constraints definition (only for COBYLA, SLSQP and trust-constr)

Constraints for COBYLA, SLSQP are defined as a list of dictionaries.
Each dictionary with fields:
 
 type : str
  Constraint type: 'eq' for equality, 'ineq' for inequality.
 fun : callable
  The function defining the constraint.
 jac : callable, optional
  The Jacobian of `fun` (only for SLSQP).
 args : sequence, optional
  Extra arguments to be passed to the function and Jacobian.
)

tol : 目标函数误差范围,控制迭代结束(optional Tolerance for termination. For detailed control, use solver-specific options.) options : 其他一些可选参数(dict, optional A dictionary of solver options. All methods accept the following generic options:)

求解过程:

定义优化函数:

def obj_function(x): 其中x为要优化的变量,在本问题中有480类的样本(如:男,24岁,上海),每类样本10-1000个不等,x为每类抽取的比例。要从中抽取50000个样本,满足22个约束条件(男:女=50%:50%、20岁:30岁=9%:11%等等)。

例如:男性要占总样本的50%,则 浅谈SciPy中的optimize.minimize实现受限优化问题

选择优化函数。SciPy中可以使用bounds参数的算法有:L-BFGS-B, TNC, SLSQP and trust-constr,可以使用constraints 参数的算法有: COBYLA, SLSQP and trust-constr

调参:optimize.minimize有统一的参数,但每个优化算法都有自己特有的参数,可以看源码中的参数列表。

运行:res = optimize.minimize(sample_fun, np.array(x0), bounds=bound, method='L-BFGS-B', tol=1e-11, options={'disp': True, 'maxiter': 300, 'maxfun': 1500000}),最终的结果保存在res.x中

如果程序没达到指定的迭代次数就停止,可能有两种原因:

STOP: TOTAL NO. of f AND g EVALUATIONS EXCEEDS LIMIT 增大参数maxfun;

CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH 调小参数tol

以上这篇浅谈SciPy中的optimize.minimize实现受限优化问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python进程通信之匿名管道实例讲解
Apr 11 Python
Python Requests 基础入门
Apr 07 Python
python中numpy.zeros(np.zeros)的使用方法
Nov 07 Python
python如何实现内容写在图片上
Mar 23 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
Oct 22 Python
浅谈python 导入模块和解决文件句柄找不到问题
Dec 15 Python
python for 循环获取index索引的方法
Feb 01 Python
python列表推导和生成器表达式知识点总结
Jan 10 Python
pytorch 限制GPU使用效率详解(计算效率)
Jun 27 Python
如何基于pandas读取csv后合并两个股票
Sep 25 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 Python
使用python求解二次规划的问题
Feb 29 #Python
Python龙贝格法求积分实例
Feb 29 #Python
python计算导数并绘图的实例
Feb 29 #Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 #Python
Pytorch对Himmelblau函数的优化详解
Feb 29 #Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 #Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
You might like
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
js Date概念详细介绍
2013/11/22 Javascript
jquery移除、绑定、触发元素事件使用示例详解
2014/04/10 Javascript
两种不同的方法实现js对checkbox进行全选和反选
2014/05/13 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
jQuery之简单的表单验证实例
2016/07/07 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
2018/05/01 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
Python编程语言的35个与众不同之处(语言特征和使用技巧)
2014/07/07 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python图像灰度变换及图像数组操作
2016/01/27 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
Python打印不合法的文件名
2020/07/31 Python
英国高街品牌:Miss Selfridge(塞尔弗里奇小姐)
2016/09/21 全球购物
瑞典灯具和照明网上商店:Lamp24.se
2018/03/17 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
你懂得怎么写自荐信吗?
2013/12/27 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
新学期决心书
2014/03/11 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
销售主管竞聘书
2014/03/31 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
2015年护士节慰问信
2015/03/23 职场文书
工程项目合作意向书
2015/05/08 职场文书
ant design charts 获取后端接口数据展示
2022/05/25 Javascript