① 統計學經典教材推薦
威廉·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
好的 謝謝大家
③ 機器學習需要什麼數學基礎
數學基礎
歡迎補充。
文中提供的PDF下載鏈接,均來自於網路,如有問題,請站內告知。
《矩陣分析》 PDFRoger Horn。矩陣分析領域無爭議的經典
《概率論及其應用》 PDF威廉·費勒。極牛的書,可數學味道太重,不適合做機器學習的
《All Of Statistics》 PDF 掃描版PDF 高清版機器學習這個方向,統計學也一樣非常重要。推薦All of statistics,這是CMU的一本很簡潔的教科書,注重概念,簡化計算,簡化與Machine Learning無關的概念和統計內容,可以說是很好的快速入門材料。
《Nonlinear Programming, 2nd》 PDF最優化方法,非線性規劃的參考書。
《Convex Optimization》 PDF配套代碼Boyd的經典書籍,被引用次數超過14000次,面向實際應用,並且有配套代碼,是一本不可多得的好書。
《Numerical Optimization》 PDF第二版,Nocedal著,非常適合非數值專業的學生和工程師參考,演算法流程清晰詳細,原理清楚。
《Introction to Mathematical Statistics》 PDF第六版,Hogg著,本書介紹了概率統計的基本概念以及各種分布,以及ML,Bayesian方法等內容。
《An Introction to Probabilistic Graphical Models》 PDFJordan著,本書介紹了條件獨立、分解、混合、條件混合等圖模型中的基本概念,對隱變數(潛在變數)也做了詳細介紹,相信大家在隱馬爾科夫鏈和用Gaussian混合模型來實現EM演算法時遇到過這個概念。
《Probabilistic Graphical Models-Principles and Techniques》 PDFKoller著,一本很厚很全面的書,理論性很強,可以作為參考書使用。
具體數學 PDF經典
bind一月 4
線性代數 (Linear Algebra):我想國內的大學生都會學過這門課程,但是,未必每一位老師都能貫徹它的精要。這門學科對於Learning是必備的基礎,對它的透徹掌握是必不可少的。我在科大一年級的時候就學習了這門課,後來到了香港後,又重新把線性代數讀了一遍,所讀的是
Introction to Linear Algebra (3rd Ed.) by Gilbert Strang.
這本書是MIT的線性代數課使用的教材,也是被很多其它大學選用的經典教材。它的難度適中,講解清晰,重要的是對許多核心的概念討論得比較透徹。我個人覺得,學習線性代數,最重要的不是去熟練矩陣運算和解方程的方法——這些在實際工作中MATLAB可以代勞,關鍵的是要深入理解幾個基礎而又重要的概念:子空間(Subspace),正交(Orthogonality),特徵值和特徵向量(Eigenvalues and eigenvectors),和線性變換(Linear transform)。從我的角度看來,一本線代教科書的質量,就在於它能否給這些根本概念以足夠的重視,能否把它們的聯系講清楚。Strang的這本書在這方面是做得很好的。
而且,這本書有個得天獨厚的優勢。書的作者長期在MIT講授線性代數課(18.06),課程的video在MIT的Open courseware網站上有提供。有時間的朋友可以一邊看著名師授課的錄像,一邊對照課本學習或者復習。
Linear Algebra
概率和統計 (Probability and Statistics):概率論和統計的入門教科書很多,我目前也沒有特別的推薦。我在這里想介紹的是一本關於多元統計的基礎教科書:
Applied Multivariate Statistical Analysis (5th Ed.) by Richard A. Johnson and Dean W. Wichern
這本書是我在剛接觸向量統計的時候用於學習的,我在香港時做研究的基礎就是從此打下了。實驗室的一些同學也借用這本書學習向量統計。這本書沒有特別追求數學上的深度,而是以通俗易懂的方式講述主要的基本概念,讀起來很舒服,內容也很實用。對於Linear regression, factor analysis, principal component analysis (PCA), and canonical component analysis (CCA)這些Learning中的基本方法也展開了初步的論述。
之後就可以進一步深入學習貝葉斯統計和Graphical models。一本理想的書是
Introction to Graphical Models (draft version). by M. Jordan and C. Bishop.
我不知道這本書是不是已經出版了(不要和Learning in Graphical Models混淆,那是個論文集,不適合初學)。這本書從基本的貝葉斯統計模型出發一直深入到復雜的統計網路的估計和推斷,深入淺出,statistical learning的許多重要方面都在此書有清楚論述和詳細講解。MIT內部可以access,至於外面,好像也是有電子版的。
④ 銷售量服從泊松分布,怎樣獲取最大利潤
如何實現大數據利潤最大利潤化
制定合適的價格很重要,再怎麼誇大都不過分。價格提高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金融大數據分析