溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python線性優(yōu)化基礎(chǔ)講解

發(fā)布時(shí)間:2020-07-25 07:34:05 來(lái)源:網(wǎng)絡(luò) 閱讀:399 作者:NLP李文哲 欄目:編程語(yǔ)言

目前,各組織正在利用數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)來(lái)解決各種業(yè)務(wù)問(wèn)題。為了創(chuàng)造一個(gè)真正的業(yè)務(wù)影響,如何彌合數(shù)據(jù)科學(xué)管道和業(yè)務(wù)決策管道之間的差距顯得尤為重要。

數(shù)據(jù)科學(xué)管道的結(jié)果往往是數(shù)據(jù)中的預(yù)測(cè)、模式和洞察(通常沒(méi)有任何約束的概念),但僅此一項(xiàng)并不足以讓股東做出決定。數(shù)據(jù)科學(xué)的輸出應(yīng)該要接入某種商業(yè)決策導(dǎo)管;這個(gè)導(dǎo)管包含有一些可以模擬商業(yè)關(guān)鍵方面的限制和決策變量的改善。

例如,如果您正在運(yùn)行一個(gè)超市鏈—您的數(shù)據(jù)科學(xué)管道將會(huì)預(yù)測(cè)預(yù)期的銷售額。然后,您將接受這些輸入的數(shù)據(jù)并創(chuàng)建一個(gè)優(yōu)化的庫(kù)存方式或銷售策略。

在這篇文章中,我們將展示一個(gè)這樣的例子,用線性優(yōu)化來(lái)選擇觀看哪一個(gè)TED視頻。

索引

  • 線性優(yōu)化導(dǎo)論

  • 待解決問(wèn)題–為TED視頻創(chuàng)建觀看列表

  • 步驟1-導(dǎo)入相關(guān)軟件包

  • 步驟2-為TED會(huì)談創(chuàng)建數(shù)據(jù)框架

  • 步驟3-設(shè)置線性優(yōu)化問(wèn)題

  • 步驟4-將優(yōu)化結(jié)果轉(zhuǎn)換為可理解的形式

1線性優(yōu)化導(dǎo)論

在優(yōu)化技術(shù)中,采用單純形法進(jìn)行線性優(yōu)化是最有效的方法之一,也被評(píng)為二十世紀(jì)十大種算法之一。作為數(shù)據(jù)科學(xué)從業(yè)者,在實(shí)現(xiàn)線性優(yōu)化方面有實(shí)際的知識(shí)是很重要的,這篇博文是用Python的PuLP包裝來(lái)說(shuō)明它的實(shí)現(xiàn)。

為了使事情變得有趣并容易理解,我們會(huì)通過(guò)將它應(yīng)用于實(shí)際的日常問(wèn)題來(lái)學(xué)習(xí)這種優(yōu)化技術(shù)。與此同時(shí),我們學(xué)到的東西也適用于各種商業(yè)問(wèn)題。

2 待解決問(wèn)題--為TED視頻創(chuàng)建觀看列表

TED是一個(gè)致力于傳播思想的非營(yíng)利組織。TED于1984年成立,以會(huì)議的形式融合了技術(shù)、娛樂(lè)和設(shè)計(jì)等方面的知識(shí);到了今天,TED幾乎涵蓋了100多種語(yǔ)言中以及近乎所有主題—從科學(xué)到商業(yè)再到全球問(wèn)題。TED演講是由擁有豐富的信息并熱愛(ài)其所在領(lǐng)域的專家們所提供的。

現(xiàn)在,別忘了這個(gè)博客文章的目的,想象一下這種情況:你想創(chuàng)建一個(gè)根據(jù)不同條件下的(可以觀看的時(shí)間以及演講的數(shù)量等)TED會(huì)談最受歡迎的觀看列表。我們來(lái)看看如何通過(guò)Python程序來(lái)幫助我們以最佳的方式創(chuàng)建觀看列表。

本文的代碼可以在這里找到。我的Jupyter的截圖如下所示:

Python線性優(yōu)化基礎(chǔ)講解


3 步驟一:導(dǎo)入相關(guān)軟件包

PuLP是在Python下的一款免費(fèi)開(kāi)源軟件。它可以將優(yōu)化問(wèn)題描述為數(shù)學(xué)模型。PuLP也可以調(diào)用許多外部的LP求解程序(例如CBC,GLPK,CPLEX,Gurobi等)來(lái)解決這個(gè)模型,然后使用python命令來(lái)操作和顯示解決方案。默認(rèn)情況下,CoinMP求解程序是與PuLP捆綁在一起的。

Python線性優(yōu)化基礎(chǔ)講解


4步驟二:為TED會(huì)談創(chuàng)建數(shù)據(jù)框架

從Kaggle下載所有TED演講(2550)的數(shù)據(jù)集,都并寫(xiě)入數(shù)據(jù)框架。選擇相關(guān)列的子集,并且結(jié)果數(shù)據(jù)集應(yīng)包含以下詳細(xì)信息—講演的索引、講演的名稱、TED事件的名稱、講演的持續(xù)時(shí)間(以分鐘計(jì))、視圖數(shù)(代表演講的人氣)

Python線性優(yōu)化基礎(chǔ)講解


5步驟三:設(shè)置線性優(yōu)化問(wèn)題

從定義LP對(duì)象開(kāi)始;問(wèn)題變量的創(chuàng)建是為了控制問(wèn)題制定。

Python線性優(yōu)化基礎(chǔ)講解


步驟3.1:創(chuàng)建決策變量

遍歷數(shù)據(jù)框架的每一行以創(chuàng)建決策變量,以便每個(gè)講演都成為一個(gè)決策變量。因?yàn)槊總€(gè)講演都可以被選擇或者不被選擇為最后的觀看名單的一部分,決策變量本質(zhì)上是二進(jìn)制的(1=選定,0=未選定)

Python線性優(yōu)化基礎(chǔ)講解


步驟3.2:定義目標(biāo)函數(shù)

目標(biāo)函數(shù)是每個(gè)講演觀看量的所有行的總和。這些觀看量作為講演的受歡迎度的代表,因此在本質(zhì)上我們?cè)噲D通過(guò)選擇適當(dāng)?shù)恼勗?決策變量)來(lái)最大化觀看量(受歡迎度)

Python線性優(yōu)化基礎(chǔ)講解


步驟3.3:定義約束

在這個(gè)問(wèn)題上,我們有兩個(gè)約束:

a)我們只有固定的總時(shí)間,這些時(shí)間可以被分配來(lái)觀看會(huì)談

b)我們不希望觀看超過(guò)一定數(shù)量的會(huì)談,以避免信息超載

Python線性優(yōu)化基礎(chǔ)講解


步驟3.4:最終格式(對(duì)于問(wèn)題的制定)

所制定問(wèn)題的最終格式會(huì)被寫(xiě)出到一個(gè).lp文件中。這將列出目標(biāo)函數(shù)、決策變量以及對(duì)問(wèn)題施加的約束。

Python線性優(yōu)化基礎(chǔ)講解


步驟3.5:實(shí)際優(yōu)化

實(shí)際優(yōu)化就是一行叫做"prob.solve"的代碼。插入一句說(shuō)明語(yǔ)句以確定是否為該問(wèn)題獲得了最佳結(jié)果。

Python線性優(yōu)化基礎(chǔ)講解


6步驟四:將優(yōu)化結(jié)果轉(zhuǎn)換為可理解的形式

表明特定的、被選上以最大化輸出的決策變量(講演)的優(yōu)化結(jié)果,必須轉(zhuǎn)換成觀看列表的格式,如下所示:

Python線性優(yōu)化基礎(chǔ)講解


Python線性優(yōu)化基礎(chǔ)講解


7結(jié)語(yǔ)

本文展示了如何利用Python中可用的線性優(yōu)化技術(shù),來(lái)解決創(chuàng)建視頻觀看列表的日常問(wèn)題。所學(xué)的概念同樣適用于更復(fù)雜的業(yè)務(wù)情況,比如涉及到數(shù)以千計(jì)的決策變量或是有許多不同的約束。

每一位數(shù)據(jù)科學(xué)從業(yè)者都需要將"優(yōu)化技術(shù)"添加到他們的知識(shí)體系中,這樣他們就可以使用高級(jí)的分析方式來(lái)解決現(xiàn)實(shí)世界中的業(yè)務(wù)問(wèn)題。這篇文章旨在幫助您朝著這個(gè)方向邁出第一步。

免責(zé)聲明:所有翻譯文章旨在技術(shù)傳播和學(xué)習(xí)交流,非商業(yè)用途。原作者:Karthikeyan Sankaran


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI