浅谈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中的pass语句使用方法讲解
May 14 Python
Python实现遍历数据库并获取key的值
May 17 Python
浅谈Python中chr、unichr、ord字符函数之间的对比
Jun 16 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
Apr 25 Python
Python 批量合并多个txt文件的实例讲解
May 08 Python
python 堆和优先队列的使用详解
Mar 05 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
Flask配置Cors跨域的实现
Jul 12 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
Aug 02 Python
Django密码存储策略分析
Jan 09 Python
关于多元线性回归分析——Python&amp;SPSS
Feb 24 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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
写一个用户在线显示的程序
2006/10/09 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
分享3个php获取日历的函数
2015/09/25 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
jQuery 添加/移除CSS类实现代码
2010/02/11 Javascript
jquery 学习之一 对象访问
2010/11/23 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
2020/09/12 Javascript
javascript中onmouse事件在div中失效问题的解决方法
2012/01/09 Javascript
jquery遍历checkbox介绍
2014/02/21 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
wap手机端解决返回上一页的js实例
2016/12/08 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
electron + vue项目实现打印小票功能及实现代码
2018/11/25 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
原生js实现分页效果
2020/09/23 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python操作SQLite数据库的方法详解
2017/06/16 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python二元表达式用法
2019/12/04 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
Html5新特性用canvas标签画多条直线附效果截图
2014/06/30 HTML / CSS
亚洲最大的眼镜批发商和零售商之一:Glasseslit
2018/10/08 全球购物
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
先进班级集体事迹材料
2014/01/30 职场文书
关于运动会的口号
2014/06/07 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
全国法院系统开展党的群众路线教育实践活动综述(全文)
2014/10/25 职场文书
质检员岗位职责范本
2015/04/07 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
Html5生成验证码的示例代码
2021/05/10 Javascript