SciPy中的optimize.minimize实现受限优化问题
问题描述:有一批样本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来进行优化。
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 : strConstraint type: 'eq' for equality, 'ineq' for inequality.fun : callableThe function defining the constraint.jac : callable, optionalThe Jacobian of `fun` (only for SLSQP).args : sequence, optionalExtra 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中可以使用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中scipy.optimize_浅谈SciPy中的optimize.minimize实现受限优化问题
问题描述:有一批样本x,每个样本都有几个固定的标签,如(男,24岁,上海),需要从中抽取一批样本,使样本总的标签比例满足分布P(x),如(男:女=49%:51%.20岁:30岁=9%:11%..... ...
- python scipy.optimize.minimize多变量多参数优化
python scipy.optimize.minimize多变量多参数优化 x是一维变量,无超参数 x是二维变量,无超参数,带bounds x是二维变量,有一个超参数,带bounds x是二维变量, ...
- scipy.optimize.minimize 的优化算法(1): Nelder–Mead Simplex
Nelder–Mead Simplex Algorithm Reference: http://home.agh.edu.pl/~pba/pdfdoc/Numerical_Optimization.p ...
- 基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化
基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化. 任务详情请参考 MindQuantum 官网 import numpy as np i ...
- Scipy优化scipy.optimize.minimize
如果喜欢请点赞,收藏,谢谢! 要解决一个优化问题 m i n i m i z e x [ 0 ] , x [ 1 ] \mathrm{minimize}_{x[0],x[1]} minimizex[0 ...
- python非线性规划scipy.optimize.minimize介绍
目录 0. 官方说明 1. Parameters 2. Returns 3. 案例 1)无约束求极值 2)有约束求极值 参考资料 0. 官方说明 在 python 里用非线性规划求极值,最常用的就是 ...
- scipy.optimize.minimize参数
scipy.optimize.minimize 英文文档 scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=N ...
- 非线性规划(scipy.optimize.minimize)
1.minimize() 函数介绍 在 python 里用非线性规划求极值,最常用的就是 scipy.optimize.minimize(). [官方介绍点这里](Constrained minimi ...
- 拟合与优化——利用Scipy包的optimize模块
目录 chap 0 对数组的操作 0.1 python中的数组创建 0.2 对数组的四则运算 0.3 各种ufunc函数 chap 1 非线性方程组求解 1.1 基础版(不引入Jacobi矩阵 ) 1 ...
最新文章
- 空间到底是什么?---車粒子
- 《每日一题》49. Group Anagrams 字母异位词分组
- php面试专题---2、常量及数据类型考点
- php程序xml有必要学习吗,对初学者非常有用的PHP技巧
- MSP430F5529 DriverLib 库函数学习笔记(七)定时器B
- Vue前后端对接时判断是否与后端连接成功
- 从起源到未来:能自己编程和改进的超人工智能会出现吗?
- 面向资源的权限体系设计随想
- android html5小游戏源代码,HTML5小游戏源代码大全(300M)
- Android10源码下载和编译(解锁/刷机)
- python复利计算_用Python计算基金定投收益代码
- TeamViewer15免费版更换账户登录设备
- 支持多种登录模式的token方案设计(微信、支付宝登录等)和数据库设计含手机号绑定方法
- 如何删除管理员也无法删除的文件夹
- 2016基于百度地图定位
- Apex_json应用
- Python实现手写体数字图片识别+GUI界面+画板数字识别
- CodeBlocks控制台中文乱码
- Ubuntu系统中查看电脑驱动信息
- 【机器学习系列】【模型评价】【ROC曲线、约登指数最佳阈值】一个函数中实现约登指数计算并集成到ROC图中,给出默认阈值及最佳阈值下的混淆矩阵
热门文章
- Java实时显示日历,实现日历
- vue table表格 时间字段分两行( parseTime-格式化时间)
- 注意力不集中怎么办?注意力如何训练?如何集中自己注意力?
- 【linux iic子系统】gpio模拟i2c(八)
- 计算机比较实用的知识,电脑小知识:最常用的10个电脑技巧
- 苹果造车史诗级降级,8年自动驾驶梦碎!2026年推出10万刀「泰坦」,彻底放弃L5...
- c语言条件运算符ppt,C语言程序设计——运算符 条件结构.ppt
- OmniGraffle Pro 7.18.5 强大的图形工具
- 记一次前端大厂面试 | 掘金技术征文
- aide编写C语言程序,AIDE最常用设置