Python線性優化基礎講解~

李文哲發表於2019-04-01

目前,各組織正在利用資料科學和機器學習來解決各種業務問題。為了創造一個真正的業務影響,如何彌合資料科學管道和業務決策管道之間的差距顯得尤為重要。

資料科學管道的結果往往是資料中的預測、模式和洞察(通常沒有任何約束的概念),但僅此一項並不足以讓股東做出決定。資料科學的輸出應該要接入某種商業決策導管;這個導管包含有一些可以模擬商業關鍵方面的限制和決策變數的改善。

例如,如果您正在執行一個超市鏈—您的資料科學管道將會預測預期的銷售額。然後,您將接受這些輸入的資料並建立一個優化的庫存方式或銷售策略。

在這篇文章中,我們將展示一個這樣的例子,用線性優化來選擇觀看哪一個TED視訊。

索引

  • 線性優化導論

  • 待解決問題–為TED視訊建立觀看列表

  • 步驟1-匯入相關軟體包

  • 步驟2-為TED會談建立資料框架

  • 步驟3-設定線性優化問題

  • 步驟4-將優化結果轉換為可理解的形式

1線性優化導論

在優化技術中,採用單純形法進行線性優化是最有效的方法之一,也被評為二十世紀十大種演算法之一。作為資料科學從業者,在實現線性優化方面有實際的知識是很重要的,這篇博文是用Python的PuLP包裝來說明它的實現。

為了使事情變得有趣並容易理解,我們會通過將它應用於實際的日常問題來學習這種優化技術。與此同時,我們學到的東西也適用於各種商業問題。


待解決問題--為TED視訊建立觀看列表

TED是一個致力於傳播思想的非營利組織。TED於1984年成立,以會議的形式融合了技術、娛樂和設計等方面的知識;到了今天,TED幾乎涵蓋了100多種語言中以及近乎所有主題—從科學到商業再到全球問題。TED演講是由擁有豐富的資訊並熱愛其所在領域的專家們所提供的。

現在,別忘了這個部落格文章的目的,想象一下這種情況:你想建立一個根據不同條件下的(可以觀看的時間以及演講的數量等)TED會談最受歡迎的觀看列表。我們來看看如何通過Python程式來幫助我們以最佳的方式建立觀看列表。

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

Python線性優化基礎講解~

步驟一:匯入相關軟體包

PuLP是在Python下的一款免費開源軟體。它可以將優化問題描述為數學模型。PuLP也可以呼叫許多外部的LP求解程式(例如CBC,GLPK,CPLEX,Gurobi等)來解決這個模型,然後使用python命令來操作和顯示解決方案。預設情況下,CoinMP求解程式是與PuLP捆綁在一起的。

Python線性優化基礎講解~

4步驟二:為TED會談建立資料框架

從Kaggle下載所有TED演講(2550)的資料集,都並寫入資料框架。選擇相關列的子集,並且結果資料集應包含以下詳細資訊—講演的索引、講演的名稱、TED事件的名稱、講演的持續時間(以分鐘計)、檢視數(代表演講的人氣)

Python線性優化基礎講解~

5步驟三:設定線性優化問題

從定義LP物件開始;問題變數的建立是為了控制問題制定。

Python線性優化基礎講解~

步驟3.1:建立決策變數

遍歷資料框架的每一行以建立決策變數,以便每個講演都成為一個決策變數。因為每個講演都可以被選擇或者不被選擇為最後的觀看名單的一部分,決策變數本質上是二進位制的(1=選定,0=未選定)

Python線性優化基礎講解~

步驟3.2:定義目標函式

目標函式是每個講演觀看量的所有行的總和。這些觀看量作為講演的受歡迎度的代表,因此在本質上我們試圖通過選擇適當的談話(決策變數)來最大化觀看量(受歡迎度)

Python線性優化基礎講解~

步驟3.3:定義約束

在這個問題上,我們有兩個約束:

a)我們只有固定的總時間,這些時間可以被分配來觀看會談

b)我們不希望觀看超過一定數量的會談,以避免資訊超載

Python線性優化基礎講解~

步驟3.4:最終格式(對於問題的制定)

所制定問題的最終格式會被寫出到一個.lp檔案中。這將列出目標函式、決策變數以及對問題施加的約束。

Python線性優化基礎講解~

步驟3.5:實際優化

實際優化就是一行叫做"prob.solve"的程式碼。插入一句說明語句以確定是否為該問題獲得了最佳結果。

Python線性優化基礎講解~


6步驟四:將優化結果轉換為可理解的形式

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

Python線性優化基礎講解~

Python線性優化基礎講解~

7結語

本文展示瞭如何利用Python中可用的線性優化技術,來解決建立視訊觀看列表的日常問題。所學的概念同樣適用於更復雜的業務情況,比如涉及到數以千計的決策變數或是有許多不同的約束。

每一位資料科學從業者都需要將"優化技術"新增到他們的知識體系中,這樣他們就可以使用高階的分析方式來解決現實世界中的業務問題。這篇文章旨在幫助您朝著這個方向邁出第一步。

免責宣告:所有翻譯文章旨在技術傳播和學習交流,非商業用途。原作者:Karthikeyan Sankaran


相關文章