導航:首頁 > 文檔加密 > 凸優化王書寧pdf

凸優化王書寧pdf

發布時間:2023-10-10 14:23:59

① 統計學經典教材推薦

威廉·G·科克倫《抽樣調查》
邏輯思路特別清晰,同時對提升統計思想能力很有幫助。
pdf版:抽樣技術(經典譯本)[美]科克倫著 統計1985.pdf
習題解答:美國著名的統計學家威廉·G·科克倫的《抽樣技術》習題解答 - 計量經濟學與統計軟體 - 經管之家(原人大經濟論壇)
當代市場調研(原書第8版) 小卡爾•麥克丹尼爾 (Carl Mcdaniel Jr.) (作者), 羅傑•蓋茨 (Roger Gates) (作者), 李桂華 (譯者), 等 (譯者)
本書是國外最為流行的市場調研教科之一,兩位作者均為國際知名的市場調研專家,既有很高的理論水平,又有豐富的實踐經驗。本書特色鮮明,語言生動,以「集中於調研客戶」為宗旨,從管理者使用或購買市場調研信息的角度介紹市場調研的思想,內容涵蓋市場調研在管理決策中的作用、調研方案的設計、利用統計工具對數據資料進行分析,以及市場調研的實際應用等諸多方面。 本書適用於營銷學專業本科生、研究生及MBA的教學,也可供企業營銷管理人員參考之用。
亞馬遜:《當代市場調研(原書第8版)》 小卡爾•麥克丹尼爾 (Carl Mcdaniel Jr.), 羅傑•蓋茨 (Roger Gates), 李桂華, 等【摘要 書評 試讀】圖書
軟體類:

Introction to Statistical Learning
R語言的重要性就不用贅述了....而且這本書還給你講了很多統計工具...作為實踐入門非常夠用。

如果你是第一種...那我把我們學校的本科生培養計劃放出來給你參考吧~每本書都有仔細看過....雖然沒學好.....

你唯一需要注意的是,開始學習的時候,數理基礎很重要!但到後來,統計思想方法更重要。

數學類:

103315 數學分析I 103316 數學分析Ⅱ 105309 數學分析III
簡單:《面向21世紀課程教材:數學分析(上冊)(第四版)》 華東師范大學數學系【摘要 書評 試讀】圖書
難:《面向21世紀課程教材:數學分析(上冊)(第二版)》 陳紀修, 於崇華, 金路【摘要 書評 試讀】圖書
100399 概率論
《華章教育·華章數學譯叢:概率論基礎教程(原書第9版)》 羅斯 (Sheldon M. Ross), 童行偉, 梁寶生【摘要 書評 試讀】圖書
103246 數理統計【超級重要】
簡單:《概率論與數理統計教程(第2版)》 茆詩松、程依明、濮曉龍【摘要 書評 試讀】圖書
推薦1:《21世紀統計學系列教材:數理統計學(第2版)》 茆詩松, 呂曉玲【摘要 書評 試讀】圖書
推薦2:《數理統計學導論(英文版•第7版)》 霍格(Robert V.Hogg), Joseoh W.McKean, Allen T.Craig【摘要 書評 試讀】圖書
翻譯版:《統計學精品譯叢:數理統計學導論(原書第7版)》 霍格 (Robert V.Hogg), Joseph W.McKean, Allen T.Craig, 王忠玉, 卜長江【摘要 書評 試讀】圖書
推薦3(我們學校研究生高等數理統計學教材):《時代教育•國外高校優秀教材精選•統計推斷(翻譯版•原書第2版)》 George Casella, Roger L.Berger, 張忠占, 傅鶯鶯【摘要 書評 試讀】圖書
推薦4(保研復習的時候看的,結構比較好,內容精簡,適合復習):《"十二五"普通高等教育本科國家級規劃教材:數理統計學講義(第3版)》 陳家鼎, 孫山澤, 李東風, 劉力平【摘要 書評 試讀】圖書
101375 運籌學、高級運籌學
簡單:《面向21世紀課程教材•信息管理與信息系統專業教材系列:運籌學(第4版)》 《運籌學》教材編寫組【摘要 書評 試讀】圖書
參考書(Youtube上有Boyd的授課視頻,聽完覺得不錯):《凸優化(英文)》 鮑迪 (Stephen Boyd)【摘要 書評 試讀】圖書
103298 高等代數I 103299 高等代數Ⅱ
強烈推薦:《高等代數(上冊):大學高等代數課程創新教材》 丘維聲【摘要 書評 試讀】圖書《高等代數(下冊):大學高等代數課程創新教材》 丘維聲【摘要 書評 試讀】圖書《高等代數學習指導書(上)》 丘維聲【摘要 書評 試讀】圖書
102110 數理綜合課(常微分方程&復變函數)
100982 實變函數
101658 泛函分析

② 機器學習對數學功底的要求到底有多高

豆瓣的話題:
研究機器學習需要什麼樣的數學基礎?

來自: 求真 2013-07-11 13:44:22
我是小碩一枚,研究方向是機器學習。通過閱讀一些機器學習的教科書,發現機器學習對於數學基礎要求比較高。
我想問一下:一般研究機器學習需要怎樣的數學基礎?
我們大學學習的高等數學、線性代數和概率論之類的數學基礎課程能夠用嗎?
skynet 2013-07-12 15:30:26
看方向,不過任何方向都基本上不夠。缺什麼補什麼吧,數學是個坑,機器學習也是個坑,人不可能同時在兩個坑裡掙扎。
贊 (3) 回應
skynet 2013-07-12 15:30:26
看方向,不過任何方向都基本上不夠。缺什麼補什麼吧,數學是個坑,機器學習也是個坑,人不可能同時在兩個坑裡掙扎。
贊 (3) 回應
求真 2013-07-12 16:07:20
看方向,不過任何方向都基本上不夠。缺什麼補什麼吧,數學是個坑,機器學習也是個坑,人不可能同 ... skynet
嗯啊,好的。
贊 回應
frce 2014-06-09 15:39:55
說得好,我喜歡。
贊 回應

opera 2014-06-09 15:43:56
高等數學、線性代數和概率論肯定是要用到的。除了它們可能還有別的。
贊 回應

Mr. L (Live long and prosper) 2014-06-09 20:51:39
應用域呢?
贊 回應
泡泡龍 2014-07-03 17:16:37
具體點應該是微積分、概率論、線性代數、隨機分布、凸優化吧
贊 回應
求真 2014-07-06 10:46:35
具體點應該是微積分、概率論、線性代數、隨機分布、凸優化吧泡泡龍
謝謝!

----------------------------------------------------------------------------------------------------

知乎的話題:
如果對機器學習僅是以應用為目的的話,到底需要多少數學…,比如說微分流形,代數拓撲,泛函之類的需要懂嗎?

「僅是以應用為目的」有點含糊。。乍一看題主好像想說是在公司里用,但後面又出來一大票高大上課程,看起來又好像偏學界。。前面的大大們提到的感覺更偏學界。我補充一些工業界的情況。

總的來說我偏向匿名用戶的回答。如果對機器學習僅是以應用為目的的話,到底需要多少數學…,比如說微分流形,代數拓撲,泛函之類的需要懂嗎? - 匿名用戶的回答
在思考這個問題之前,要先搞清楚公司花錢雇你來幹啥的。我的經驗是,這有兩種情況。一是公司原來沒有一項業務,現在要把一些機器學習這個東西跑起來(從無到有)。二是在你接手的時候公司已經有一定基礎了,現在要把性能調上去(從差到優)。前者完全不用任何數學,先用別人有的模塊/代碼把系統擼起來是王道。後者看具體問題,大多數情況不用數學。

從無到有的情況,比如我原來在facebook做place deplication,大概就是說非死不可上面超多可以簽到的地點,要判斷裡面有哪些是重復的地點。類似知乎上面有很多重復的問題,如何鑒別和重定向這些問題。這個問題從機器學習的角度來看並不難,有很多已有工作。但公司更關心的其實是怎麼把隨便一個系統在fb數十TB的數據上日起來。所以我們的絕大多數時間根本不是花在評估哪個機器學習模型更好,這個流形有什麼性質,那個系統有什麼下限,而是——擼hadoop用幾千個核先把feature抽出來。有了feature以後後台分類器是特媽隨便找的這種事我會亂說?這種情況跟數學完全沒鳥關系好嗎。

從有到優的情況,我也參與了這個項目的調優。基本經驗是——分類器啊模型啊再復雜精巧數學性質再好沒吊用,關鍵還是看feature。弄一個有效的feature出來精度呼呼的往上漲,各種分類器瞎JB換啊調啊基本沒差別。。(當然deep learning這種模型的質變除外,但這個和不搞科研的人就沒啥關系了)所以你要問數學有沒有用,我說有用,根據數學才能提出有效的模型——但這特媽是學界人家十年磨一劍的人用的。放公司里用數學拱KPI分分鍾被nen死。隔壁王二狗整倆新feature獎金拿得多多的,這邊你要死磕泛函產品狗咬死你。。
當然在偏研究的地方比如Google X的某些部門還是有用的,但我覺得這還是偏學界。

總的來說,我的建議是,如果想去公司的話就不要糾結逼格過高的事情了。學好線性代數,統計和凸優化就出門打怪吧,攢系統經驗和dirty trick才是王道。當然我也不是說就不要搞數學,只是如果你去公司的話,在學好線代統計凸優化的前提下,同樣的時間花在學計算機系統的構建和系統性的思考方法上,比學習數學更劃算。

編輯於 2015-04-09 35 條評論 感謝

這里有個80-20原則的應用。
只要20%的機器學習知識,其實已經可以在80%的商業應用里取得滿意的效果。

但,如果公司精益求精,或者說是專注於機器學習演算法的公司,可能要投入指數級別的努力來達到性能的提升。

不請自來,我本人就是從數學轉到數據科學上來的,是完全以應用為目的學的機器學習。本科加PHD九年中,數學方面的課程大概學過:數學分析(微積分),線性代數,概率論,統計,應用統計,數值分析,常微分方程,偏微分方程,數值偏微分方程,運籌學,離散數學,隨機過程,隨機偏微分方程,抽象代數,實變函數,泛函分析,復變函數,數學建模,拓撲,微分幾何,漸近分析等等

從我個人的學習過程中,覺得對機器學習的應用有幫助的數學學科有(重要性從高到低):

1, 線性代數(或叫高等代數):必需,所有的演算法最後都會向量化表示,線性代數不熟的話,演算法都看不懂啊

2,微積分:這個是所有高等數學的基礎,不細說了

3,統計:這里包括統計理論基礎,和應用統計(主要就是線性模型)。很多機器學習內容的前身就是統計啊。

3.5, 凸優化: 經 @徐文浩 補充,原因跟6相似

前三個感覺是想要學好機器學習所必需的,後面的雖然不必需,但是適當了解之後,幫助也很大:

4,概率論:基礎概率論就夠了,以測度為基礎的高級概率論對機器學習幫助不大

5,數值分析:數值分析的一部分包括了插值,擬合,數值求解各種方程,數值積分,這些小技術雖然沒有跟機器學習直接扯上關系,但是可能在你處理復雜問題時的一些小地方起到奇效。數值分析的另一大塊就是數值線性代數了,包括怎麼矩陣求逆了,矩陣的各種分解了,矩陣特徵根奇異值什麼了,這裡面很多演算法都會被機器學習的書法直接使用的。比如SVD就被Principal Component Analysis直接調用了啊。

6,運籌學:運籌就是做優化,說白了就是把問題表示成數學公式和限制條件,然後求最大值或最小值。所以不少機器學習裡面先進的優化演算法,最先都是在運籌裡面出現的

暫時就想到這么多,至於題主說的泛函,微分流形,代數拓撲啥的,完全不需要了解啊。

編輯於 2015-04-28 26 條評論 感謝

我就是從數學轉ML的。我就知道,肯定有人要扯很多純數學的「基礎背景」。我說一些實在的,微分幾何,流形,代數拓撲這些知識,只要你去找相關的研究論文,總能找得到和Ml有交集的地方。但是,不代表你必須掌握它們。在大部分的ML研究里,還是微積分和線性代數、概率統計的功底最重要。不要太小看微積分和線性代數,很多時候做研究時要用的推導還是需要很多熟練的技巧才可以勝任。至於其他知識,可以用到時再補充。

----------------------------------------------------------------------------------------------
CSDN的TOPIC:
機器學習需要學習哪些數學知識 [問題點數:20分,結帖人hanyahui88]
收藏

關注
hanyahui88
大眼的小眼
本版等級:
結帖率:100%

樓主發表於: 2014-10-16 11:07:37
機器學習數學數據分析演算法
最近公司做數據分析,但是以前都沒有接觸過,看了一下所有的演算法,很多都是跟數學有關,看不懂很多數學符號,所以問問我應該學習什麼數學 好像離散數學是必須的
更多0分享到:
相關推薦:
阿里雲機器學習演算法應用實踐
統計機器學習入門——重抽樣方法
統計機器學習入門——分類2
統計機器學習入門——線性模型選擇與正則化2

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理
回復次數:9

關注
OrthocenterCh...
Kenney_Qin
本版等級:

#1 得分:3回復於: 2014-10-16 13:18:23
以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
hanyahui88
大眼的小眼
本版等級:

#2 得分:0回復於: 2014-10-17 09:12:48
引用 1 樓 OrthocenterChocolate 的回復:以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。
我最近在研究均值漂移演算法,裡面的核函數,好多公式都看不懂 我也不知道學什麼數學可以看懂這些公式。
你說的求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等 這些是什麼數學中的??

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
longburulin
longburulin
本版等級:

#3 得分:2回復於: 2014-10-17 09:51:41
引用 2 樓 hanyahui88 的回復:Quote: 引用 1 樓 OrthocenterChocolate 的回復: 以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。我最近在研究均值漂移演算法,裡面的核函數,好多公式都看不懂 我也不知道學什麼數學可以看懂這些公式。
你說的求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等 這些是什麼數學中的??
數值分析裡面好像除了拉格朗日對偶沒有 其他好像有

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
OrthocenterCh...
Kenney_Qin
本版等級:

#4 得分:0回復於: 2014-10-19 21:38:16
引用 2 樓 hanyahui88 的回復:Quote: 引用 1 樓 OrthocenterChocolate 的回復: 以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。我最近在研究均值漂移演算法,裡面的核函數,好多公式都看不懂 我也不知道學什麼數學可以看懂這些公式。
你說的求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等 這些是什麼數學中的??
求導,求梯度,拉格朗日乘子法是高等數學裡面的,拉格朗日對偶,牛頓迭代法你可以看看凸優化,其實凸優化應該包含了你想看的很多機器學習中的數學知識,只不過它們是建立在一些更為基礎的數學知識上(如求導)。

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
hanyahui88
大眼的小眼
本版等級:

#5 得分:0回復於: 2014-10-21 14:40:54
引用 4 樓 OrthocenterChocolate 的回復:Quote: 引用 2 樓 hanyahui88 的回復:Quote: 引用 1 樓 OrthocenterChocolate 的回復: 以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。我最近在研究均值漂移演算法,裡面的核函數,好多公式都看不懂 我也不知道學什麼數學可以看懂這些公式。
你說的求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等 這些是什麼數學中的??求導,求梯度,拉格朗日乘子法是高等數學裡面的,拉格朗日對偶,牛頓迭代法你可以看看凸優化,其實凸優化應該包含了你想看的很多機器學習中的數學知識,只不過它們是建立在一些更為基礎的數學知識上(如求導)。

也就是看高等數學 和凸優化 基本就可以了???

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
OrthocenterCh...
Kenney_Qin
本版等級:

#6 得分:5回復於: 2014-10-23 14:32:40
引用 5 樓 hanyahui88 的回復:Quote: 引用 4 樓 OrthocenterChocolate 的回復:Quote: 引用 2 樓 hanyahui88 的回復:Quote: 引用 1 樓 OrthocenterChocolate 的回復: 以我平時接觸到的機器學習演算法來說,與其相關的的數學知識有:求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等,數學知識是基礎,很多機器學習演算法是建立在數學的基礎上,是數值計算的比較多,和離散數學關系不是特別大,如果你要做圖演算法,那離散數學就很重要了。我最近在研究均值漂移演算法,裡面的核函數,好多公式都看不懂 我也不知道學什麼數學可以看懂這些公式。
你說的求導,求梯度,拉格朗日乘子法,拉格朗日對偶,牛頓迭代法等 這些是什麼數學中的??求導,求梯度,拉格朗日乘子法是高等數學裡面的,拉格朗日對偶,牛頓迭代法你可以看看凸優化,其實凸優化應該包含了你想看的很多機器學習中的數學知識,只不過它們是建立在一些更為基礎的數學知識上(如求導)。

也就是看高等數學 和凸優化 基本就可以了???
對,還有些矩陣運算,如果不熟悉的話再看看線性代數,建議你碰到不會的再去查,而不是事先全部看完, 不然太多了。

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
q243021856
狼痕
本版等級:

#7 得分:5回復於: 2014-10-23 14:58:16
微積分、線性代數、概率論、離散數學、統計學

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
shaowei213
Tracysw
本版等級:

#8 得分:5回復於: 2014-10-23 15:38:32
引用 7 樓 q243021856 的回復:微積分、線性代數、概率論、離散數學、統計學
專業

對我有用[0] 丟個板磚[0] 引用 | 舉報 | 管理

關注
hanyahui88
大眼的小眼
本版等級:

#9 得分:0回復於: 2014-10-28 11:45:36
好的 謝謝大家

③ 機器學習需要什麼數學基礎

④ 銷售量服從泊松分布,怎樣獲取最大利潤

如何實現大數據利潤最大利潤化

制定合適的價格很重要,再怎麼誇大都不過分。價格提高1%意味著經營利潤平均可以增長8.7%(當然,假設銷量沒有損失)。不過我們估計,在許多公司每年制定的成千上萬個定價決策中,多達30%未能給出最合適的價格——這意味著收入大量流失。而且考慮到如今海量數據為公司提供了難得的機會,可以做出合理得多的定價決策,這種現狀尤其令人不安。對那些能夠井然有序地應對復雜的大數據的公司而言,這蘊含著巨大價值。

將數據轉化為利潤的四個步驟

想制定更合適的價格,關鍵是完全明白現在可供公司使用的數據。這就需要放大目標,而不是縮小目標。正如綜合性能源和化工企業沙索(Sasol)集團副總裁兼營銷和銷售總經理湯姆·奧布賴恩(Tom O』Brien)提及這種做法時說:「銷售團隊知道價格,還可能知道銷量,但這種做法需要了解更多信息:極其精細的數據,實際上來自每一張發票,按產品、客戶和包裝分門別類。」

事實上,將大數據成功應用於B2B環境方面最激動人心的一些例子實際上不僅僅著眼於定價,還涉及一家公司的商業引擎的其他方面。比如說,「動態交易評分」(dynamic deal scoring)提供了單筆交易層面的價格指導,還提供了決策逐級上報點、激勵機制、績效評分及更多方面,立足於一系列相似的盈/虧交易。使用較小的、相關的交易樣本很有必要,因為與任何一筆交易息息相關的因素會有變化,這導致一系列總體交易成為毫無用處的衡量基準。我們已見過這種方法應用於技術行業,取得了巨大成功。將銷售利潤率提高了4到8個百分點(相對於同一家公司的對照組)。

想獲得足夠精細的數據,公司就要做好這四項工作

傾聽數據。制定最合理的價格不是牽涉數據的挑戰(公司通常已經坐擁龐大的數據寶庫),而是牽涉分析的挑戰。最出色的B2C公司知道如何解釋自己擁有的海量數據,並見機行事,但B2B公司往往一味管理數據,而不是利用數據推動決策。優秀的分析工具可以幫助公司確定經常被忽視的因素(比如更宏觀的經濟形勢、產品偏好以及銷售代表的洽談),揭示什麼因素左右針對每個客戶群和產品的價格。

提高自動化。人工分析數千種孝頃產品太耗費時間和財力。自動化系統可以識別狹小的客戶群,確定什麼因素左右每個客戶群的價值,並且拿來與歷史交易數據進行比較。這樣一來,公司就可以根據數據,為產品群和客戶群制定有針對性的價格。自動化還大大簡化了復制和調整分析的工作,因此沒必要每次都從頭開始分析。

培養技能、樹立信心。實施新價格既在運營方面帶來了挑戰,又在溝通攜族方面帶來了挑戰。成功的公司非常注重深思熟慮的變革計劃,幫助銷售隊伍了解並接受新的定價方法。公司需要與銷售代表們齊心協力,解釋為什麼實行建議價,這巧隱陸套價格體系是如何運作的,那樣銷售代表就會非常信任價格,從而竭力說服顧客。同樣重要的是制定一套明確清晰的溝通方法,為價格給出一個理由,從而著重突出價值,然後針對具體顧客給出相應的理由。全面的洽談培訓也至關重要,以便讓銷售代表獲得信心和工具,那樣與客戶面對面交流時,能拿出頗有說服力的理由。最優秀的領導陪同銷售代表會見最難拿下的客戶,專注於迅速見效,那樣銷售代表就能樹立起信心,積極奉行新的定價方法。林德集團旗下瑞士PanGas AG公司的總經理羅伯特·克里格(Robert Krieger)說:「表明領導層支持這種新的定價方法這個立場,至關重要。為此,我們採取的做法就是領導層與銷售代表一起拜見難纏的客戶。我們不僅能夠幫助銷售代表,還能夠闡明為什麼制定新價格。」

積極管理績效。想改善績效管理,公司就需要藉助實用的績效指標支持銷售隊伍。最大的影響來自確保銷售一線對於客戶帶來的利潤瞭然於胸;銷售和營銷部門擁有合適的分析技能,得以發現機會,並牢牢抓住機會。還需要將權力下放給銷售隊伍,讓他們自行調整價格,而不是依賴集中式團隊。這不僅需要創業理念,還需要在針對特定的客戶制定價格策略時有一定的創造力。在改變定價策略和績效衡量標準的同時,可能還要改變激勵機制。

我們已經看到了這一幕:軟體、化工、建材和電信等眾多行業的公司利用大數據,幫助制定更合理的定價決策,因而收到顯著成效。這些公司都有數量眾多的庫存單位(SKU)和交易,還有一大批高度分散的客戶;重新制定價格後,都發現利潤率提高了3%到8%,這些價格是在極其精細的產品數據層面制定的。僅舉一例,一家歐洲建材公司為幾種有所選擇的產品制定合適的價格後,利潤增幅高達20%。如果公司想制定合適的價格,就應該充分利用大數據,並投入足夠的資源來支持銷售代表,否則它們會發現自己在為此付出高昂的代價:利潤流失。

轉載請註明:數據分析 » 如何實現大數據利潤最大利潤化

量化分析師的python_python 金融量化分析_python金融大數據分析

量化分析師的Python_python 金融量化分析_python金融大數據分析

一、SciPy概述
前篇已經大致介紹了NumPy,接下來讓我們看看SciPy能做些什麼。NumPy替我們搞定了向量和矩陣的相關操作,基本上算是一個高級的科學計算器。SciPy基於NumPy提供了更為豐富和高級的功能擴展,在統計、優化、插值、數值積分、時頻轉換等方面提供了大量的可用函數,基本覆蓋了基礎科學計算相關的問題。

在量化分析中,運用最廣泛的是統計和優化的相關技術,本篇重點介紹SciPy中的統計和優化模塊,其他模塊在隨後系列文章中用到時再做詳述。

本篇會涉及到一些矩陣代數,如若感覺不適,可考慮跳過第三部分或者在理解時簡單採用一維的標量代替高維的向量。

首先還是導入相關的模塊,我們使用的是SciPy裡面的統計和優化部分:

In[1]:

import numpy as npimport scipy.stats as statsimport scipy.optimize as opt

二、統計部分2.1 生成隨機數

我們從生成隨機數開始,這樣方便後面的介紹。生成n個隨機數可用rv_continuous.rvs(size=n)或rv_discrete.rvs(size=n),其中rv_continuous表示連續型的隨機分布,如均勻分布(uniform)、正態分布(norm)、貝塔分布(beta)等;rv_discrete表示離散型的隨機分布,如伯努利分布(bernoulli)、幾何分布(geom)、泊松分布(poisson)等。我們生成10個[0, 1]區間上的隨機數和10個服從參數$a = 4$,$b = 2$的貝塔分布隨機數:

In[2]:

rv_unif = stats.uniform.rvs(size=10)print rv_unifrv_beta = stats.beta.rvs(size=10, a=4, b=2)print rv_beta

[ 0.20630272 0.25929204 0.16859206 0.92573462 0.16383319 0.3475617 0.83792048 0.79574153 0.37945051 0.23439682][ 0.71216492 0.85688464 0.70310131 0.3783662 0.69507561 0.78626586 0.54529967 0.4261079 0.26646767 0.8519046 ]

在每個隨機分布的生成函數里,都內置了默認的參數,如均勻分布的上下界默認是0和1。可是一旦需要修改這些參數,每次生成隨機都要敲這么老長一串有點麻煩,能不能簡單點?SciPy里頭有一個Freezing的功能,可以提供簡便版本的命令。SciPy.stats支持定義出某個具體的分布的對象,我們可以做如下的定義,讓beta直接指代具體參數$a = 4$和$b = 2$的貝塔分布。為讓結果具有可比性,這里指定了隨機數的生成種子,由NumPy提供。

In[3]:

np.random.seed(seed=2015)rv_beta = stats.beta.rvs(size=10, a=4, b=2)print "method 1:"print rv_betanp.random.seed(seed=2015)beta = stats.beta(a=4, b=2)print "method 2:"print beta.rvs(size=10)

method 1:[ 0.43857338 0.9411551 0.75116671 0.92002864 0.62030521 0.56585548 0.41843548 0.5953096 0.88983036 0.94675351]method 2:[ 0.43857338 0.9411551 0.75116671 0.92002864 0.62030521 0.56585548 0.41843548 0.5953096 0.88983036 0.94675351]

2.2 假設檢驗

好了,現在我們生成一組數據,並查看相關的統計量(相關分布的參數可以在這里查到:http://docs.scipy.org/doc/scipy/reference/stats.html):

In[4]:

norm_dist = stats.norm(loc=0.5, scale=2)n = 200dat = norm_dist.rvs(size=n)print "mean of data is: " + str(np.mean(dat))print "median of data is: " + str(np.median(dat))print "standard deviation of data is: " + str(np.std(dat))

mean of data is: 0.705195138069median of data is: 0.658167882933standard deviation of data is: 2.08967006905

假設這個數據是我們獲取到的實際的某些數據,如股票日漲跌幅,我們對數據進行簡單的分析。最簡單的是檢驗這一組數據是否服從假設的分布,如正態分布。這個問題是典型的單樣本假設檢驗問題,最為常見的解決方案是採用K-S檢驗( Kolmogorov-Smirnov test)。單樣本K-S檢驗的原假設是給定的數據來自和原假設分布相同的分布,在SciPy中提供了kstest函數,參數分別是數據、擬檢驗的分布名稱和對應的參數:

In[5]:

mu = np.mean(dat)sigma = np.std(dat)stat_val, p_val = stats.kstest(dat, 'norm', (mu, sigma))print 'KS-statistic D = %6.3f p-value = %6.4f' % (stat_val, p_val)

KS-statistic D = 0.045 p-value = 0.8195

假設檢驗的$p$-value值很大(在原假設下,$p$-value是服從[0, 1]區間上的均勻分布的隨機變數,可參考http://en.wikipedia.org/wiki/P-value ),因此我們接受原假設,即該數據通過了正態性的檢驗。在正態性的前提下,我們可進一步檢驗這組數據的均值是不是0。典型的方法是$t$檢驗($t$-test),其中單樣本的$t$檢驗函數為ttest_1samp:

In[6]:

stat_val, p_val = stats.ttest_1samp(dat, 0)print 'One-sample t-statistic D = %6.3f, p-value = %6.4f' % (stat_val, p_val)

One-sample t-statistic D = 4.761, p-value = 0.0000

我們看到$p$-value$ < 0.05$,即給定顯著性水平0.05的前提下,我們應拒絕原假設:數據的均值為0。我們再生成一組數據,嘗試一下雙樣本的$t$檢驗(ttest_ind):

In[7]:

norm_dist2 = stats.norm(loc=-0.2, scale=1.2)dat2 = norm_dist2.rvs(size=n/2)stat_val, p_val = stats.ttest_ind(dat, dat2, equal_var=False)print 'Two-sample t-statistic D = %6.3f, p-value = %6.4f' % (stat_val, p_val)

Two-sample t-statistic D = 5.565, p-value = 0.0000

注意,這里我們生成的第二組數據樣本大小、方差和第一組均不相等,在運用$t$檢驗時需要使用Welch』s $t$-test,即指定ttest_ind中的equal_var=False。我們同樣得到了比較小的$p$-value$,在顯著性水平0.05的前提下拒絕原假設,即認為兩組數據均值不等。

stats還提供其他大量的假設檢驗函數,如bartlett和levene用於檢驗方差是否相等;anderson_ksamp用於進行Anderson-Darling的K-樣本檢驗等。

2.3 其他函數

有時需要知道某數值在一個分布中的分位,或者給定了一個分布,求某分位上的數值。這可以通過cdf和ppf函數完成:

In[8]:

g_dist = stats.gamma(a=2)print "quantiles of 2, 4 and 5:"print g_dist.cdf([2, 4, 5])print "Values of 25%, 50% and 90%:"print g_dist.pdf([0.25, 0.5, 0.95])

quantiles of 2, 4 and 5:[ 0.59399415 0.90842181 0.95957232]Values of 25%, 50% and 90%:[ 0.1947002 0.30326533 0.36740397]

對於一個給定的分布,可以用moment很方便的查看分布的矩信息,例如我們查看$N(0, 1)$的六階原點矩:

In[9]:

stats.norm.moment(6, loc=0, scale=1)

Out[9]:

15.000000000895332

describe函數提供對數據集的統計描述分析,包括數據樣本大小,極值,均值,方差,偏度和峰度:

In[10]:

norm_dist = stats.norm(loc=0, scale=1.8)dat = norm_dist.rvs(size=100)info = stats.describe(dat)print "Data size is: " + str(info[0])print "Minimum value is: " + str(info[1][0])print "Maximum value is: " + str(info[1][1])print "Arithmetic mean is: " + str(info[2])print "Unbiased variance is: " + str(info[3])print "Biased skewness is: " + str(info[4])print "Biased kurtosis is: " + str(info[5])

Data size is: 100Minimum value is: -4.12414564687Maximum value is: 4.82577602489Arithmetic mean is: 0.0962913592209Unbiased variance is: 2.88719292463Biased skewness is: -0.00256548794681Biased kurtosis is: -0.317463421177

當我們知道一組數據服從某些分布的時候,可以調用fit函數來得到對應分布參數的極大似然估計(MLE, maximum-likelihood estimation)。以下代碼示例了假設數據服從正態分布,用極大似然估計分布參數:

In[11]:

norm_dist = stats.norm(loc=0, scale=1.8)dat = norm_dist.rvs(size=100)mu, sigma = stats.norm.fit(dat)print "MLE of data mean:" + str(mu)print "MLE of data standard deviation:" + str(sigma)

MLE of data mean:-0.249880829912MLE of data standard deviation:1.89195303507

pearsonr和spearmanr可以計算Pearson和Spearman相關系數,這兩個相關系數度量了兩組數據的相互線性關聯程度:

In[12]:

norm_dist = stats.norm()dat1 = norm_dist.rvs(size=100)exp_dist = stats.expon()dat2 = exp_dist.rvs(size=100)cor, pval = stats.pearsonr(dat1, dat2)print "Pearson correlation coefficient: " + str(cor)cor, pval = stats.pearsonr(dat1, dat2)print "Spearman's rank correlation coefficient: " + str(cor)

Pearson correlation coefficient: -0.0262911931014Spearman's rank correlation coefficient: -0.0262911931014

其中的$p$-value表示原假設(兩組數據不相關)下,相關系數的顯著性。

最後,在分析金融數據中使用頻繁的線性回歸在SciPy中也有提供,我們來看一個例子:

In[13]:

x = stats.chi2.rvs(3, size=50)y = 2.5 + 1.2 * x + stats.norm.rvs(size=50, loc=0, scale=1.5)slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)print "Slope of fitted model is:" , slopeprint "Intercept of fitted model is:", interceptprint "R-squared:", r_value**2

Slope of fitted model is: 1.44515601191Intercept of fitted model is: 1.91080684516R-squared: 0.798786910173

在前面的鏈接中,可以查到大部分stat中的函數,本節權作簡單介紹,挖掘更多功能的最好方法還是直接讀原始的文檔。另外,StatsModels(http://statsmodels.sourceforge.net )模塊提供了更為專業,更多的統計相關函數。若在SciPy沒有滿足需求,可以採用StatsModels。

三、優化部分

優化問題在投資中可謂是根本問題,如果手上有眾多可選的策略,應如何從中選擇一個「最好」的策略進行投資呢?這時就需要用到一些優化技術針對給定的指標進行尋優。隨著越來越多金融數據的出現,機器學習逐漸應用在投資領域,在機器學習中,優化也是十分重要的一個部分。以下介紹一些常見的優化方法,雖然例子是人工生成的,不直接應用於實際金融數據,我們希望讀者在後面遇到優化問題時,能夠從這些簡單例子迅速上手解決。

3.1 無約束優化問題

所謂的無約束優化問題指的是一個優化問題的尋優可行集合是目標函數自變數的定義域,即沒有外部的限制條件。例如,求解優化問題 [

minimizef(x)=x24.8x+1.2

] 就是一個無約束優化問題,而求解 [

minimizef(x)=x24.8x+1.2subject tox≥0

]則是一個帶約束的優化問題。更進一步,我們假設考慮的問題全部是凸優化問題,即目標函數是凸函數,其自變數的可行集是凸集。(詳細定義可參考斯坦福大學Stephen Boyd教授的教材convex optimization,下載鏈接:http://stanford.e/~boyd/cvxbook )

我們以Rosenbrock函數 [ f(mathbf{x}) = sum{i=1}^{N-1} 100 (x_i – x{i-1}^2)^2 + (1 – x_{i-1})^2 ] 作為尋優的目標函數來簡要介紹在SciPy中使用優化模塊scipy.optimize。

首先需要定義一下這個Rosenbrock函數:

In[14]:

def rosen(x): """The Rosenbrock function""" return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)

3.1.1 Nelder-Mead單純形法

單純形法是運籌學中介紹的求解線性規劃問題的通用方法,這里的Nelder-Mead單純形法與其並不相同,只是用到單純形的概念。設定起始點$mathbf{x}_0 = (1.3, 0.7, 0.8, 1.9, 1.2)$,並進行最小化的尋優。這里『xtol』表示迭代收斂的容忍誤差上界:

In[15]:

x_0 = np.array([0.5, 1.6, 1.1, 0.8, 1.2])res = opt.minimize(rosen, x_0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Nelder-Mead Simplex algorithm:"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 436 Function evaluations: 706Result of minimizing Rosenbrock function via Nelder-Mead Simplex algorithm: status: 0 nfev: 706 success: True fun: 1.6614969876635003e-17 x: array([ 1., 1., 1., 1., 1.]) message: 'Optimization terminated successfully.' nit: 436

Rosenbrock函數的性質比較好,簡單的優化方法就可以處理了,還可以在minimize中使用method=』powell』來指定使用Powell』s method。這兩種簡單的方法並不使用函數的梯度,在略微復雜的情形下收斂速度比較慢,下面讓我們來看一下用到函數梯度進行尋優的方法。

3.1.2 Broyden-Fletcher-Goldfarb-Shanno法

Broyden-Fletcher-Goldfarb-Shanno(BFGS)法用到了梯度信息,首先求一下Rosenbrock函數的梯度:

[ begin{split} frac{partial f}{partial xj} &= sum{i=1}^N 200(xi – x{i-1}^2)(delta{i,j} – 2x{i-1}delta{i-1,j}) -2(1 – x{i-1})delta_{i-1,j} &= 200(xj – x{j-1}^2) – 400xj(x{j+1} – x_j^2) – 2(1 – x_j) end{split}] 其中當$i=j$時,$delta_{i,j} = 1$,否則$delta_{i,j} = 0$。

邊界的梯度是特例,有如下形式: [ begin{split} frac{partial f}{partial x_0} &= -400x_0(x_1 – x_0^2) – 2(1 – x_0), frac{partial f}{partial x{N-1}} &= 200(x{N-1} – x_{N-2}^2) end{split}]

我們可以如下定義梯度向量的計算函數了:

In[16]:

def rosen_der(x): xm = x[1:-1] xm_m1 = x[:-2] xm_p1 = x[2:] der = np.zeros_like(x) der[1:-1] = 200*(xm-xm_m1**2) - 400*(xm_p1 - xm**2)*xm - 2*(1-xm) der[0] = -400*x[0]*(x[1]-x[0]**2) - 2*(1-x[0]) der[-1] = 200*(x[-1]-x[-2]**2) return der

梯度信息的引入在minimize函數中通過參數jac指定:

In[17]:

res = opt.minimize(rosen, x_0, method='BFGS', jac=rosen_der, options={'disp': True})print "Result of minimizing Rosenbrock function via Broyden-Fletcher-Goldfarb-Shanno algorithm:"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 52 Function evaluations: 63 Gradient evaluations: 63Result of minimizing Rosenbrock function via Broyden-Fletcher-Goldfarb-Shanno algorithm: status: 0 success: True njev: 63 nfev: 63 hess_inv: array([[ 0.00726515, 0.01195827, 0.0225785 , 0.04460906, 0.08923649], [ 0.01195827, 0.02417936, 0.04591135, 0.09086889, 0.18165604], [ 0.0225785 , 0.04591135, 0.09208689, 0.18237695, 0.36445491], [ 0.04460906, 0.09086889, 0.18237695, 0.36609277, 0.73152922], [ 0.08923649, 0.18165604, 0.36445491, 0.73152922, 1.46680958]]) fun: 3.179561068096293e-14 x: array([ 1. , 0.99999998, 0.99999996, 0.99999992, 0.99999983]) message: 'Optimization terminated successfully.' jac: array([ 4.47207141e-06, 1.30357917e-06, -1.86454207e-07, -2.00564982e-06, 4.98799446e-07])

3.1.3 牛頓共軛梯度法(Newton-Conjugate-Gradient algorithm)

用到梯度的方法還有牛頓法,牛頓法是收斂速度最快的方法,其缺點在於要求Hessian矩陣(二階導數矩陣)。牛頓法大致的思路是採用泰勒展開的二階近似: [ f(mathbf{x}) approx f(mathbf{x}_0) + nabla f(mathbf{x}_0)(mathbf{x} – mathbf{x}_0) + frac{1}{2}(mathbf{x} – mathbf{x}_0)^Tmathbf{H}(mathbf{x}_0)(mathbf{x} – mathbf{x}_0) ] 其中$mathbf{H}(mathbf{x}_0)$表示二階導數矩陣。若Hessian矩陣是正定的,函數的局部最小值可以通過使上面的二次型的一階導數等於0來獲取,我們有: [ mathbf{x}_{mathrm{opt}} = mathbf{x}_0 – mathbf{H}^{-1}nabla f ]

這里可使用共軛梯度近似Hessian矩陣的逆矩陣。下面給出Rosenbrock函數的Hessian矩陣元素通式:

[ begin{split} H{i,j} = frac{partial^2 f}{partial x_i partial x_j} &= 200(delta{i,j} – 2x{i-1}delta{i-1,j}) – 400xi(delta{i+1,j} – 2xidelta{i,j}) – 400delta{i,j}(x{i+1} – xi^2) + 2delta{i,j}, &= (202 + 1200xi^2 – 400x{i+1}) delta{i,j} – 400x_idelta{i+1,j} – 400x{i-1}delta{i-1,j} end{split}] 其中$i,j in [1, N-2]$。其他邊界上的元素通式為: [ begin{split} frac{partial^2 f}{partial x_0^2} &= 1200x_0^2 – 400x_1 + 2, frac{partial^2 f}{partial x_0 partial x_1} = frac{partial^2 f}{partial x_1 partial x_0} &= -400x_0, frac{partial^2 f}{partial x{N-1} partial x{N-2}} = frac{partial^2 f}{partial x{N-2} partial x{N-1}} &= -400x_{N-2}, frac{partial^2 f}{partial x_{N-1}^2} &= 200. end{split}]

例如,當$N=5$時的Hessian矩陣為:

[ mathbf{H} =

[1200x20400x1+2400x0000400x0202+1200x21400x2400x1000400x1202+1200x22400x3400x2000400x2202+1200x23400x4400x3000400x3200]

]為使用牛頓共軛梯度法,我們需要提供一個計算Hessian矩陣的函數:

In[18]:

def rosen_hess(x): x = np.asarray(x) H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1) diagonal = np.zeros_like(x) diagonal[0] = 1200*x[0]**2-400*x[1]+2 diagonal[-1] = 200 diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:] H = H + np.diag(diagonal) return H

In[19]:

res = opt.minimize(rosen, x_0, method='Newton-CG', jac=rosen_der, hess=rosen_hess, options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian):"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 20 Function evaluations: 22 Gradient evaluations: 41 Hessian evaluations: 20Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian): status: 0 success: True njev: 41 nfev: 22 fun: 1.47606641102778e-19 x: array([ 1., 1., 1., 1., 1.]) message: 'Optimization terminated successfully.' nhev: 20 jac: array([ -3.62847530e-11, 2.68148992e-09, 1.16637362e-08, 4.81693414e-08, -2.76999090e-08])

對於一些大型的優化問題,Hessian矩陣將異常大,牛頓共軛梯度法用到的僅是Hessian矩陣和一個任意向量的乘積,為此,用戶可以提供兩個向量,一個是Hessian矩陣和一個任意向量$mathbf{p}$的乘積,另一個是向量$mathbf{p}$,這就減少了存儲的開銷。記向量$mathbf{p} = (p_1, ldots, p_{N-1})$,可有

[ mathbf{H(x)p} = begin{bmatrix} (1200x0^2 – 400x_1 + 2)p_0 -400x_0p_1 vdots -400x{i-1}p{i-1} + (202 + 1200x_i^2 – 400x{i+1})pi – 400x_ip{i+1} vdots -400x{N-2}p{N-2} + 200p_{N-1} end{bmatrix} ]

我們定義如下函數並使用牛頓共軛梯度方法尋優:

In[20]:

def rosen_hess_p(x, p): x = np.asarray(x) Hp = np.zeros_like(x) Hp[0] = (1200*x[0]**2 - 400*x[1] + 2)*p[0] - 400*x[0]*p[1] Hp[1:-1] = -400*x[:-2]*p[:-2]+(202+1200*x[1:-1]**2-400*x[2:])*p[1:-1] -400*x[1:-1]*p[2:] Hp[-1] = -400*x[-2]*p[-2] + 200*p[-1] return Hpres = opt.minimize(rosen, x_0, method='Newton-CG', jac=rosen_der, hessp=rosen_hess_p, options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian times arbitrary vector):"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 20 Function evaluations: 22 Gradient evaluations: 41 Hessian evaluations: 58Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian times arbitrary vector): status: 0

轉載請註明:數據分析 » 量化分析師的Python_python 金融量化分析_python金融大數據分析

閱讀全文

與凸優化王書寧pdf相關的資料

熱點內容
抖音小店app如何聯系客服 瀏覽:973
linux打開多個終端 瀏覽:500
linux中的命令 瀏覽:573
優化小米6相機演算法 瀏覽:256
ak47pdf 瀏覽:141
人與文化pdf 瀏覽:640
原子幣app在哪裡注冊的 瀏覽:529
php數組保存文件 瀏覽:226
無理的命令 瀏覽:510
問道手游解壓失敗是什麼原因 瀏覽:776
mysql命令提示 瀏覽:373
apachephp中文亂碼 瀏覽:342
pythonimportpylab 瀏覽:238
阿里雲app伺服器價格表 瀏覽:981
appstore怎麼搶手機 瀏覽:845
列印伺服器是什麼列印隊列 瀏覽:359
網上怎麼用app辦理營業執照 瀏覽:861
sql如何查看伺服器地址 瀏覽:780
編譯速度和系統有關嗎 瀏覽:60
復盛製冷壓縮機 瀏覽:983