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 ...
随机推荐
- 高性能JAVA开发之内存管理
这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题,调研了一些java内存管理的资料,现整理如下: 一.JVM中的对象生命周期 对象的生命周期一般分为7个阶段:创建阶段,应用阶段,不可视阶 ...
- put out|smashed|As soon as|provided
CONJ-SUBORD 如果:假如:只要If you say that something will happen provided or provided that something else h ...
- 机器人可以拥有社交智能吗?——微软雷德蒙研究院院长Eric Horvitz与他的个人虚拟助理之梦
Horvitz与他的个人虚拟助理之梦" title="机器人可以拥有社交智能吗?--微软雷德蒙研究院院长Eric Horvitz与他的个人虚拟助理之梦">编者按:到 ...
- sqlserver开窗函数改造样例
作一个查询的性能优化. 先清缓存 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 原查询 前人遗留. ) ),) select @total=sum(price*pe ...
- 关于js中的比较时遇到的坑
关于JavaScript中比较遇到的坑 当你的要比较数字的大小但是你的数字确是字符串时,就会出错比如说: console.log('5' > '6') // fasle consloe.log( ...
- 吴裕雄--天生自然HTML学习笔记:HTML 表单和输入
HTML 表单用于收集不同类型的用户输入. <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- Spring返回jsp页面
1.SpringMVC返回的jsp,需要配置相应的viewResolvers,如: <property name="viewResolvers"> <list&g ...
- 云服务器——之Linux下安装tomcat
在上一篇文章中已经准备好了tomcat安装的基本环境jdk的安装,那么我们现在来记录tomcat的安装. 第一步:下载tomcat安装包 http://tomcat.apache.org/ 第二步:通 ...
- 我是一个Bug, 终极大Bug
我是一个Bug ,在这个系统中潜伏很久了,历经多轮测试的严酷考验而屹立不倒,如果Bug界按难度分类的话,我绝对属于地狱模式. 现在,我就等待一个倒霉蛋来触发, 可是他老是不来. 其实不能叫倒霉蛋 , ...
- 将java project打包成jar包,web project 打包成war包的几种演示
将java项目打包成jar 第一种:MyEclipse将java项目打包成jar. 1,右击项目,选择export . 2,点击Java,选择JAR file . 3,在JAR file文本中浏览打包 ...