Python线性优化基础讲解~
目前,各组织正在利用数据科学和机器学习来解决各种业务问题。为了创造一个真正的业务影响,如何弥合数据科学管道和业务决策管道之间的差距显得尤为重要。
数据科学管道的结果往往是数据中的预测、模式和洞察(通常没有任何约束的概念),但仅此一项并不足以让股东做出决定。数据科学的输出应该要接入某种商业决策导管;这个导管包含有一些可以模拟商业关键方面的限制和决策变量的改善。
例如,如果您正在运行一个超市链—您的数据科学管道将会预测预期的销售额。然后,您将接受这些输入的数据并创建一个优化的库存方式或销售策略。
在这篇文章中,我们将展示一个这样的例子,用线性优化来选择观看哪一个TED视频。
索引
- 线性优化导论
- 待解决问题–为TED视频创建观看列表
- 步骤1-导入相关软件包
- 步骤2-为TED会谈创建数据框架
- 步骤3-设置线性优化问题
- 步骤4-将优化结果转换为可理解的形式
1线性优化导论
在优化技术中,采用单纯形法进行线性优化是最有效的方法之一,也被评为二十世纪十大种算法之一。作为数据科学从业者,在实现线性优化方面有实际的知识是很重要的,这篇博文是用Python的PuLP包装来说明它的实现。
为了使事情变得有趣并容易理解,我们会通过将它应用于实际的日常问题来学习这种优化技术。与此同时,我们学到的东西也适用于各种商业问题。
2 待解决问题--为TED视频创建观看列表
TED是一个致力于传播思想的非营利组织。TED于1984年成立,以会议的形式融合了技术、娱乐和设计等方面的知识;到了今天,TED几乎涵盖了100多种语言中以及近乎所有主题—从科学到商业再到全球问题。TED演讲是由拥有丰富的信息并热爱其所在领域的专家们所提供的。
现在,别忘了这个博客文章的目的,想象一下这种情况:你想创建一个根据不同条件下的(可以观看的时间以及演讲的数量等)TED会谈最受欢迎的观看列表。我们来看看如何通过Python程序来帮助我们以最佳的方式创建观看列表。
本文的代码可以在这里找到。我的Jupyter的截图如下所示:
3 步骤一:导入相关软件包
PuLP是在Python下的一款免费开源软件。它可以将优化问题描述为数学模型。PuLP也可以调用许多外部的LP求解程序(例如CBC,GLPK,CPLEX,Gurobi等)来解决这个模型,然后使用python命令来操作和显示解决方案。默认情况下,CoinMP求解程序是与PuLP捆绑在一起的。
4步骤二:为TED会谈创建数据框架
从Kaggle下载所有TED演讲(2550)的数据集,都并写入数据框架。选择相关列的子集,并且结果数据集应包含以下详细信息—讲演的索引、讲演的名称、TED事件的名称、讲演的持续时间(以分钟计)、视图数(代表演讲的人气)
5步骤三:设置线性优化问题
从定义LP对象开始;问题变量的创建是为了控制问题制定。
步骤3.1:创建决策变量
遍历数据框架的每一行以创建决策变量,以便每个讲演都成为一个决策变量。因为每个讲演都可以被选择或者不被选择为最后的观看名单的一部分,决策变量本质上是二进制的(1=选定,0=未选定)
步骤3.2:定义目标函数
目标函数是每个讲演观看量的所有行的总和。这些观看量作为讲演的受欢迎度的代表,因此在本质上我们试图通过选择适当的谈话(决策变量)来最大化观看量(受欢迎度)
步骤3.3:定义约束
在这个问题上,我们有两个约束:
a)我们只有固定的总时间,这些时间可以被分配来观看会谈
b)我们不希望观看超过一定数量的会谈,以避免信息超载
步骤3.4:最终格式(对于问题的制定)
所制定问题的最终格式会被写出到一个.lp文件中。这将列出目标函数、决策变量以及对问题施加的约束。
步骤3.5:实际优化
实际优化就是一行叫做"prob.solve"的代码。插入一句说明语句以确定是否为该问题获得了最佳结果。
6步骤四:将优化结果转换为可理解的形式
表明特定的、被选上以最大化输出的决策变量(讲演)的优化结果,必须转换成观看列表的格式,如下所示:
7结语
本文展示了如何利用Python中可用的线性优化技术,来解决创建视频观看列表的日常问题。所学的概念同样适用于更复杂的业务情况,比如涉及到数以千计的决策变量或是有许多不同的约束。
每一位数据科学从业者都需要将"优化技术"添加到他们的知识体系中,这样他们就可以使用高级的分析方式来解决现实世界中的业务问题。这篇文章旨在帮助您朝着这个方向迈出第一步。
免责声明:所有翻译文章旨在技术传播和学习交流,非商业用途。原作者:Karthikeyan Sankaran
Python线性优化基础讲解~的更多相关文章
- Python数据可视化基础讲解
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:爱数据学习社 首先,要知道我们用哪些库来画图? matplotlib ...
- Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice)
Python入门篇-基础数据类型之整型(int),字符串(str),字节(bytes),列表(list)和切片(slice) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Py ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- Python开发(一):Python介绍与基础知识
Python开发(一):Python介绍与基础知识 本次内容 一:Python介绍: 二:Python是一门什么语言 三:Python:安装 四:第一个程序 “Hello world” 五:Pytho ...
- [资料分享]Python视频教程(基础篇、进阶篇、项目篇)
Python是一种开放源代码的脚本编程语言,这种脚本语言特别强调开发速度和代码的清晰程度.它可以用来开发各种程序,从简单的脚本任务到复杂的.面向对象的应用程序都有大显身手的地方.Python还被当作一 ...
- Verilog语法基础讲解之参数化设计
Verilog语法基础讲解之参数化设计 在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
- 原生AJAX基础讲解及兼容处理
原文:原生AJAX基础讲解及兼容处理 AJAX = Asynchronous JavaScript and XML (异步的JavaScript和XML). AJAX不是新技术 ,但却是热门的技术.它 ...
- JavaScript继承基础讲解,原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承
说好的讲解JavaScript继承,可是迟迟到现在讲解.废话不多说,直接进入正题. 既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考<面向对象J ...
随机推荐
- android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码
Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...
- [LC] 209. Minimum Size Subarray Sum
Given an array of n positive integers and a positive integer s, find the minimal length of a contigu ...
- jtemplates使用+同内容列合并
function ImportStatistics(val, pros) { top.$.jBox.tip("导入已完成,正在统计整理导入的数据...", 'loading'); ...
- 无标定量|有标定量|谱图计数|XIC|AMT数据库|RT对对齐|母离子|子离子|SILVER|SRM|iBAQ|APEX|差异蛋白筛选|MaxQuant|PANDA|C-HPP
生物医学大数据-蛋白质定量 现今肽段定量效率存在巨大差异.比如相同质量蛋白质,但是肽段和蛋白信号不均一,在物理条件一致时,仅有70%的重复率,并且当重复次数变多时,overlapping在变少. 无标 ...
- RSA算法原理(简单易懂)
1. 什么是RSA RSA算法是现今使用最广泛的公钥密码算法,也是号称地球上最安全的加密算法.在了解RSA算法之前,先熟悉下几个术语 根据密钥的使用方法,可以将密码分为对称密码和公钥密码 对称密码:加 ...
- Linux启动初始化配置文件浅析
转自:http://blog.51cto.com/19055/1144600 1)/etc/profile 登录时,会执行. 全局(公有)配置,不管是哪个用户,登录时都会读取该文件. (2)/ec ...
- 吴裕雄--天生自然python学习笔记:Python3 数据结构
列表 Python中列表是可变的,这是它区别于字符串和元组的最重要的特点,一句话概括即:列表可以修改,而字符串和元组不能. list.append(x) 把一个元素添加到列表的结尾,相当于 a[len ...
- Allure介绍
以下内容基于pytest的框架进行展示: 什么是Allure Allure是一个独立的报告插件,生成美观易读的报告,目前支持语言:Java, PHP, Ruby, Python, Scala, C#. ...
- 漫说测试 | 研发虐我千百遍,我待bug如初恋
的行业之一他们的运筹帷幄,他们的勾心斗角,只有自己知道.000,但绝对也是最枯燥的行业之一! IT可能是几个最高薪行业之一,但同时也绝对是最辛苦的行业之一!IT业是最需要创新能力的行业之一,但绝对也是 ...
- oracle监控参数
Sar –u 检查CPU的繁忙程度列说明Usr用户模式下cpu运行所占的百分比Sys系统模式下cpu运行所占的百分比Wio因为有进程等待块I/O而使cpu处于闲置状态所占百分比IdleCpu为闲置状态 ...