问题描述:有一批样本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:)

求解过程:

  1. 定义优化函数:

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

    例如:男性要占总样本的50%,则        

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

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

  4. 运行: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中

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

  1. STOP: TOTAL NO. of f AND g EVALUATIONS EXCEEDS LIMIT   增大参数maxfun;
  2. CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH  调小参数tol

SciPy中的optimize.minimize实现受限优化问题相关推荐

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

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

  2. python scipy.optimize.minimize多变量多参数优化

    python scipy.optimize.minimize多变量多参数优化 x是一维变量,无超参数 x是二维变量,无超参数,带bounds x是二维变量,有一个超参数,带bounds x是二维变量, ...

  3. scipy.optimize.minimize 的优化算法(1): Nelder–Mead Simplex

    Nelder–Mead Simplex Algorithm Reference: http://home.agh.edu.pl/~pba/pdfdoc/Numerical_Optimization.p ...

  4. 基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化

    基于 scipy.optimize.minimize 方法对 MindQuantm 搭建的变参量子线路进行优化. 任务详情请参考 MindQuantum 官网 import numpy as np i ...

  5. Scipy优化scipy.optimize.minimize

    如果喜欢请点赞,收藏,谢谢! 要解决一个优化问题 m i n i m i z e x [ 0 ] , x [ 1 ] \mathrm{minimize}_{x[0],x[1]} minimizex[0 ...

  6. python非线性规划scipy.optimize.minimize介绍

    目录 0. 官方说明 1. Parameters 2. Returns 3. 案例 1)无约束求极值 2)有约束求极值 参考资料 0. 官方说明 在 python 里用非线性规划求极值,最常用的就是 ...

  7. scipy.optimize.minimize参数

    scipy.optimize.minimize 英文文档 scipy.optimize.minimize(fun, x0, args=(), method=None, jac=None, hess=N ...

  8. 非线性规划(scipy.optimize.minimize)

    1.minimize() 函数介绍 在 python 里用非线性规划求极值,最常用的就是 scipy.optimize.minimize(). [官方介绍点这里](Constrained minimi ...

  9. 拟合与优化——利用Scipy包的optimize模块

    目录 chap 0 对数组的操作 0.1 python中的数组创建 0.2 对数组的四则运算 0.3 各种ufunc函数 chap 1 非线性方程组求解 1.1 基础版(不引入Jacobi矩阵 ) 1 ...

最新文章

  1. 空间到底是什么?---車粒子
  2. 《每日一题》49. Group Anagrams 字母异位词分组
  3. php面试专题---2、常量及数据类型考点
  4. php程序xml有必要学习吗,对初学者非常有用的PHP技巧
  5. MSP430F5529 DriverLib 库函数学习笔记(七)定时器B
  6. Vue前后端对接时判断是否与后端连接成功
  7. 从起源到未来:能自己编程和改进的超人工智能会出现吗?
  8. 面向资源的权限体系设计随想
  9. android html5小游戏源代码,HTML5小游戏源代码大全(300M)
  10. Android10源码下载和编译(解锁/刷机)
  11. python复利计算_用Python计算基金定投收益代码
  12. TeamViewer15免费版更换账户登录设备
  13. 支持多种登录模式的token方案设计(微信、支付宝登录等)和数据库设计含手机号绑定方法
  14. 如何删除管理员也无法删除的文件夹
  15. 2016基于百度地图定位
  16. Apex_json应用
  17. Python实现手写体数字图片识别+GUI界面+画板数字识别
  18. CodeBlocks控制台中文乱码
  19. Ubuntu系统中查看电脑驱动信息
  20. 【机器学习系列】【模型评价】【ROC曲线、约登指数最佳阈值】一个函数中实现约登指数计算并集成到ROC图中,给出默认阈值及最佳阈值下的混淆矩阵

热门文章

  1. Java实时显示日历,实现日历
  2. vue table表格 时间字段分两行( parseTime-格式化时间)
  3. 注意力不集中怎么办?注意力如何训练?如何集中自己注意力?
  4. 【linux iic子系统】gpio模拟i2c(八)
  5. 计算机比较实用的知识,电脑小知识:最常用的10个电脑技巧
  6. 苹果造车史诗级降级,8年自动驾驶梦碎!2026年推出10万刀「泰坦」,彻底放弃L5...
  7. c语言条件运算符ppt,C语言程序设计——运算符 条件结构.ppt
  8. OmniGraffle Pro 7.18.5 强大的图形工具
  9. 记一次前端大厂面试 | 掘金技术征文
  10. aide编写C语言程序,AIDE最常用设置