Ⅰ 怎麼凸顯pdf中的黑字
凸顯PDF中的黑字的方法如下:
1、首先,選擇需要進行高亮的文字。
2、接著,右鍵,出現臘純新的選項卡,游標移動到「高亮」項目上。
3、最後,高亮項目右側有個「添返配加」點擊此選項漏局指即可實現文字高亮。
Ⅱ 深度機器學習中的batch的大小對學習效果有何影響
深度機器學習中的batch的大小對學習效果有何影響?
如題,在深度學習中,剛入門的小弟一直聽聞一個batch中同時訓練多個數據可以得到較好的效果,於是小弟在caffe上跑deepID的網路時對如何選取batchsize頗具困惑。懇求萬能的知友給予指點~~
14 個回答
談談深度學習中的 Batch_Size Batch_Size(批尺寸)是機器學習中一個重要參數,涉及諸多矛盾,下面逐一展開。 首先,為什麼需要有 Batch_Size 這個參數? Batch 的選擇,首先決定的是下降的方向。如果數據集比較小,完全可以採用全數據集 ( Full Batch Lea… 顯示全部
談談深度學習中的 Batch_Size
Batch_Size(批尺寸)是機器學習中一個重要參數,涉及諸多矛盾,下面逐一展開。
首先,為什麼需要有 Batch_Size 這個參數?
Batch 的選擇,首先決定的是下降的方向。如果數據集比較小,完全可以採用全數據集 ( Full Batch Learning)的形式,這樣做至少有 2 個好處:其一,由全數據集確定的方向能夠更好地代表樣本總體,從而更准確地朝向極值所在的方向。其二,由於不同權重的梯度值差別巨大,因此選取一個全局的學習率很困難。 Full Batch Learning 可以使用Rprop 只基於梯度符號並且針對性單獨更新各權值。
對於更大的數據集,以上 2 個好處又變成了 2 個壞處:讓大其一,隨著數據集的海量增長和內存限制,一次性載入所有的數據進來變得越來越不可行。其二,以 Rprop 的方式迭代,會由於各個 Batch 之間的采樣差異性,各次梯度修正值相互抵消,無法修正。這才有了後來 RMSProp 的妥協方案。
既然 Full Batch Learning 並不適用大數據集,那麼走向另一個極端怎麼樣?
所謂另一個極端,就是每次只訓練一個樣本,即 Batch_Size = 1。這就是在線學習(Online Learning)。線性神經元在均方誤差代價函數的錯誤面是一個拋物面,橫截面是橢圓。對於多層神經元、非線性網路,在局部依然近似是拋物面。使用在線學習,每次修正方向以各自樣本的梯度方向修正,橫沖直撞各自為政,難以達到收斂。
可不可以選擇一個適中的 Batch_Size 值呢?
當然可以,這就是批梯度下降法(Mini-batches Learning)。因為如果數據集足夠充分,那麼用一半(甚至少得多)的數據訓練算出來的梯度與用全部數據訓練出來的梯度是幾乎一樣的。
在合理范圍內,增大 Batch_Size 有何好處?
內存利用率提高了,大矩陣乘法的並行化效率提高。
跑完一次 epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。
在一定范圍內,一般來說 Batch_Size 越大,其確定的下降方向越准,引起訓練震盪越小。
盲目增大 Batch_Size 有何壞處?
內存利用率提高了,但是內存容量可能撐不住了。
跑完一次 epoch(全數據集)所需的迭代次數減少,要想達到相同的精度,其所花費的時間大大增加了,從而對參數的修正也就顯得更加緩慢。
Batch_Size 增大到一定程度,其確定的下降方向已經基本不再變化。
調節 Batch_Size 對訓練效果影響到底如何?
這里跑一個 LeNet 在 MNIST 數據集上的效果。MNIST 是一個手寫體標准庫,我使用的是 Theano 框架。這是一個 python 的深度學習庫。安裝方便(幾行命令而已),調試簡單(自帶 Profile),GPU / CPU 通吃,官方教程相當完備雹滑辯,支持模塊十分豐富(除了 CNNs,更是支持 RBM / DBN / LSTM / RBM-RNN / SdA / MLPs)。在其上層有Keras 封裝,支持 GRU / JZS1, JZS2, JZS3 等較新結構,支持 Adagrad / Adadelta / RMSprop / Adam 等優化演算法。
運行結果如上圖所示,其中絕對時間做了標幺化處理。運行結果與上文分析相印證:
Batch_Size 太小,算源缺法在 200 epoches 內不收斂。
隨著 Batch_Size 增大,處理相同數據量的速度越快。
隨著 Batch_Size 增大,達到相同精度所需要的 epoch 數量越來越多。
由於上述兩種因素的矛盾, Batch_Size 增大到某個時候,達到時間上的最優。
由於最終收斂精度會陷入不同的局部極值,因此 Batch_Size 增大到某些時候,達到最終收斂精度上的最優。
歡迎一起討論。
知乎用戶 理論物理跳深度學習...60%概率失業
20 人贊同
批訓練的引入最大好處是針對非凸損失函數來做的, 畢竟非凸的情況下, 全樣本就算工程上算的動, 也會卡在局部優上, 批表示了全樣本的部分抽樣實現, 相當於人為引入修正梯度上的采樣雜訊,使「一路不通找別路」更有可能搜索最優值。 樓上很多說到隨機梯度… 顯示全部
批訓練的引入最大好處是針對非凸損失函數來做的, 畢竟非凸的情況下, 全樣本就算工程上算的動, 也會卡在局部優上, 批表示了全樣本的部分抽樣實現, 相當於人為引入修正梯度上的采樣雜訊,使「一路不通找別路」更有可能搜索最優值。
樓上很多說到隨機梯度收斂問題,物理上是這樣的理解,
增加噪音擴大了你的行動范圍,不會受限於局部。
然而過大的行動范圍使得你的選擇過多而」迷茫「。
這是一個損失函數局部優有「多坑人」和局部優「數目太多好難選」之間的競爭,競爭平衡點才是你最終的訓練值。故此,最終的訓練值是一個分布,大夥們一般取平均來證明自己的模型多牛逼。
物理上,就是能量(坑好深)和熵(選擇多)的競爭結果,而且復雜系統中,能量和熵一輩子都在競爭,討論自由能最小值在非凸問題上的意義,比直接討論損失函數的最小值更有意義。
然而,這種牛逼,不僅依賴模型,而且依賴數據本身。調參需要預先建立競爭平衡的理論模型,單純用軟體刷指標只能用在某個數據集上,不具有轉移性。純浪費電!
這些觀點在大部分復雜物理系統的采樣,自旋玻璃的研究,蛋白質折疊構象搜索上,都有廣泛的認識。但是工業界被凸優化影響過多了,除了特徵選擇和防止過擬合外可以通過直覺建立,遇到非凸優化問題,基本不可能拍腦袋調出一個通用的(如果數學上可以,物理上應該最先發現,然而並沒有)。於是,即便在物理上遇到這種問題,目前很low,而且節省成本的方法就是燒錢增加計算蠻力點。矛盾到我笑尿了。
關於深度學習中的非凸優化,可以參考LeCun今年來對深度學習和自旋玻璃之間的聯系,以及隨機微分方程同增強采樣之間的研究。
Yinghong li 重新出發干實事
caffe小菜鳥也來答一下,感覺就是大batch size在顯存能允許的情況下收斂速度是比較快的但有時的確會有陷入局部最小的情況,小batch size引入的隨機性會更大些,有時候能有更好的效果,但是就是收斂速度慢一些…… 還有就是除了batch size這個參數外,如果在… 顯示全部
caffe小菜鳥也來答一下,感覺就是大batch size在顯存能允許的情況下收斂速度是比較快的但有時的確會有陷入局部最小的情況,小batch size引入的隨機性會更大些,有時候能有更好的效果,但是就是收斂速度慢一些……
還有就是除了batch size這個參數外,如果在solver setting中有momentum這個參數的話也要注意batch size的選取,具體參考一下caffe的tutorial
關於訓練參數怎麼選取可以參考以下一些文章:
Bengio的 Practical recommendations for gradient-based learning
Lecun 和 Bottou的 Efficient Backprop
還有一個代碼上的細節,就是caffe的代碼實現上選取一個batch的時候似乎是按著資料庫的圖片順序選取輸入圖片的,所以在生成資料庫的時候切記要shuffle一下圖片順序~
供題主參考,求大神指正~
匿名用戶
4 人贊同
搞機器學習大忌就是不做實驗想當然,話說這種問題題主跑幾組不同的batch不就知道了...調參調參不調哪來的參~ 另外,運用在不同的領域,不同的網路結構,不同的訓練方法,batch的取法,用法和影響也不一樣。不知道題主問的是哪種batch? 顯示全部
搞機器學習大忌就是不做實驗想當然,話說這種問題題主跑幾組不同的batch不就知道了...調參調參不調哪來的參~
另外,運用在不同的領域,不同的網路結構,不同的訓練方法,batch的取法,用法和影響也不一樣。不知道題主問的是哪種batch?
知乎用戶 我是認真的
我也看到過說理論上batchsize=1是最好的,不過實際上調的時候,可能因為我調參的能力比較有限,確實batchsize太小會出現網路收斂不穩定,最後結果比較差的情況,這個在ImageNet和其他資料庫上都遇到過,而batchsize太大確實也會影響隨機性的引入。目前一般… 顯示全部
我也看到過說理論上batchsize=1是最好的,不過實際上調的時候,可能因為我調參的能力比較有限,確實batchsize太小會出現網路收斂不穩定,最後結果比較差的情況,這個在ImageNet和其他資料庫上都遇到過,而batchsize太大確實也會影響隨機性的引入。目前一般調ImageNet的時候,大家都喜歡把顯存占滿,不過小一些的庫,個人感覺還是應該大大小小都嘗試一下。不知道各路大神有沒有什麼好辦法指點一下。。
匿名用戶
23 人贊同
看你GPU顯存,顯存大就把batch size設大點,反之亦然。一般情況下對學習效果沒影響。 補充點細節: 事實上從優化的角度來說最快的是純stochastic,即batch size為1。 關於這一點參見Leon Bottou的分析:http://leon.bottou.org/publications/pdf/compstat-2010.pdf。當然,文中的分析適用於large … 顯示全部
看你GPU顯存,顯存大就把batch size設大點,反之亦然。一般情況下對學習效果沒影響。
補充點細節:
事實上從優化的角度來說最快的是純stochastic,即batch size為1。
關於這一點參見Leon Bottou的分析:http://leon.bottou.org/publications/pdf/compstat-2010.pdf。當然,文中的分析適用於large scale的情況下,但deep neural net適用的條件之一就是有大量數據。另外http://cilvr.nyu.e/lib/exe/fetch.php?media=deeplearning:dl-optimization.pdf 的第11頁也有比較stochastic和batch的優劣。
拿Yann Lecun在上述第二個鏈接第10頁中舉的toy example來說,如果事實上只有100個數據點,但有人各復制了10遍拿給你,你不知道。這時候你如果做batch gradient descent,更只用了100個點效果一樣;而做stochastic gradient descent則相當於做了10個epoch。相近的計算量後者效果顯然更好。至於mini batch,要你取的每個mini batch都很diverse的情況才會效果好。
當然你會說,現實中哪會有100個數據各重復10遍就直接拿來用的?沒錯,是不會,但現實中的數據,尤其是large scale的數據中,必然有大量的rendancy,不然你也很難學出有較好泛化性的model。因此stochastic在large scale總是優於batch。
那為什麼還要用mini batch呢?這是由於GPU並行運算的性質,同時把多組數據傳過去一起運算比一條一條運算來的快,因而mini batch只是為了充分利用GPU memory而做出的妥協。既然如此,batch size也調到剛好能塞進顯存就差不多了。
司徒功源 非典型程序猿
2 人贊同
簡而言之,步子太大容易扯著蛋... 顯示全部
簡而言之,步子太大容易扯著蛋...
發布於 2016-01-14 1 條評論 感謝
匿名用戶
9 人贊同
其實是有影響的。batch數太小,而類別又比較多的時候,真的可能會導致loss函數震盪而不收斂,尤其是在你的網路比較復雜的時候。這個做過幾個實驗,但是沒有詳細的做,主要是針對googlenet,alexnet以及vgg幾個模型(實驗結果就是batch為32的時候,alex開始… 顯示全部
其實是有影響的。batch數太小,而類別又比較多的時候,真的可能會導致loss函數震盪而不收斂,尤其是在你的網路比較復雜的時候。這個做過幾個實驗,但是沒有詳細的做,主要是針對googlenet,alexnet以及vgg幾個模型(實驗結果就是batch為32的時候,alex開始收斂,但是googlenet不收斂;提高batch size,googlenet開始收斂)。
就像lecun[note]里說的一樣,隨機梯度下降不能像full batch那樣明顯的保證收斂。一般而言,根據你的GPU顯存,設置為最大,而且一般要求是8的倍數(比如32,128),這樣,GPU內部的並行運算效率最高。
那麼怎麼選擇batch number呢?就像剛才說的,8的倍數,然後是稍微大一點(一般而言)。另外一個方法,就是選擇一部分數據,跑幾個batch看看你的loss是不是在變小,選擇一個合適的就可以了。
Ⅲ 南科大商學院招收博士研究生,研究助理,以及博士後是哪個老師
南方科技大學商學院(信息系統與管理工程系)長期招收博士研究生,研究助理,以及博士後。請仔細閱讀以下信息,如感興趣按照要求發簡歷以及郵件聯系。有意向者請將申請意願(註明到崗時間)pdf格式詳細簡歷郵件發送到:heqc_at_sustech.e.cn招聘信息
(一)博士生
A.招收香港四校聯合培養博士生(頒發合作大學博士學位)
南科大為以上項目提供最高4年的獎助學金資助,其中在境外學習期間(一般第一和第四年),南科大按合作大學博士生標准提供獎助學金。
注意:聯合培養不要求數學背景。
本課題組現招收攻讀聯培項目博士學位的研究生。申請人需符合以下條件:
1. 理工、計算機、管理科學、工業工程等跨學科背景碩士學歷或即將碩士畢業(或非常優秀的本科生);
2. 具有優秀的英文文獻閱讀能力與英文論文寫作能力;
3. 具有較強的學習能力和端正的學習態度,動手能力較強;
4. 熱愛學術研究,有志從事科研工作。
B.本校(碩)博士生推免以及統招(南科大「商務智能與大數據分析」學位)
申請條件
1、已在本科院校獲得推薦免試資格的優秀應屆本科畢業生。
2、具有概率統計、數學優化等理科背景,即將本科畢業的學生悄好。
3. 報考統招博士需要碩士的學歷(學籍)認證報告。
3、學術研究興趣濃厚,有較強的分析問題、解決問題的能力和較強的創新意識。
4、誠實守信,學風端正,無未解除的處分記錄。
5、對信息管理,商務智能,大數據分析,智能管理與發展創新,智能製造與供應鏈管理與決策,大數據金融智能管理,工商管理等有興趣,為人認真負責,數學基礎扎實。
申請程序
根據教育部的統一安排,2020年推免生的正式報名和錄取工作需通過「全國推免服務系統」進行。 我院接收推免生的復試以面試為主,復試時申請人應提供相關材料,詳情請查詢南方科技大學接收2020年推薦免試研究生(含直博生)預報名通知。
(二)科研助理:如果無法立刻錄取南科大博士,可以申請科研助理。要求本科以上學位, 提供有競爭力的工資,提供五險一金(12%),過節費、餐補等福利待遇豐厚
(三)研究助理教授/青年會士/博士後
研究助理教授薪資面議。博士後聘期兩年,年薪33.5萬元起(含廣東省補貼稅前15萬、深圳市補貼稅後6萬),並按深圳市有關規定參加社保及住房公積金(用人單位繳納五險一金、租房補貼、餐補、高溫補貼、過節費和計生獎)。特別優秀者可申請校長卓越博士後,年薪約41.5萬元。博士後在站期間提供2.5萬學術交流經費。課題組提供充足科研支持,協助博士後本人作為課題負責人申請國家、地方各級基金項目。
課題組協助符合條件的博士後申請「廣東省海外青年博士後引進項目」。世界排名(不含境內)前200名的高校博士生,申請成功後省財政每名進站博士後資助60萬元生活補貼;出站後,與廣東省用人單位簽訂工作協議額外補貼40萬元。博士後出站選擇留深工作(3年以上合同),可申請啟孫鉛深圳市博士後留深科研資助,每年10萬,共資助3年。落戶深圳可申請一次性補貼3萬元。
附:指導教師簡介
Qiaochu He, 2019年加入南方科技大學商學院。他的主要研究方向是運營管理(Operations Management)、特別是服務系統和信息系統。有近30多篇國際一流期刊論文已發表或在返修、其中多篇運營管理國際頂級期刊。已累計為相關領域頂級期刊或者會議(如POM,MSOM,EJOR等)審稿近30次,在國際知名學術會議或機構受邀報告近30次。曾工作於斯倫貝謝凱鋒波士頓研究所、沃爾瑪電子(矽谷)商務部,香港科技大學、北卡州立大學夏洛特分校(助理教授),並先後指導10多名碩士和博士生,及本科畢業設計項目(CSI-Ametek生產過程流程優化)。曾在加州大學,北卡州立大學以及香港科技大學教授供應鏈管理、生產製造系統、數據分析、系統模擬、編程演算法、隨機過程、凸優化、排隊論、概率論、動態規劃等10多門課程。曾得到中國國家自然科學基金(NSFC)面上項目(主持)、深圳市科創委項目(主持)、香港基礎研究基金General Research Fund的項目資助(聯合主持)、北卡州立大學FRG項目資助等。曾獲IEEE CASE 最佳醫療自動化獎, IISE Annual Conference 最佳醫療論文獎(指導學生),POMS-HK 最佳學生論文獎第一名,Katta G. Murty Prize最佳優化論文獎等。
Ⅳ 統計學經典教材推薦
威廉·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 泛函分析
Ⅳ 銷售量服從泊松分布,怎樣獲取最大利潤
如何實現大數據利潤最大利潤化
制定合適的價格很重要,再怎麼誇大都不過分。價格提高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金融大數據分析
Ⅵ 機器學習中的損失函數
機器學習中的損失函數
損失函數(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函數,通常使用L(Y, f(x))來表示,損失函數越小,模型的魯棒性就越好。損失函數是經驗風險函數的核心部分,也是結構風險函數重要組成部分。模型的結構風險函數包括了經驗風險項和正則項,通常可以表示成如下式子:
其中,前面的均值函數表示的是經驗風險函數,L代表的是損失函數,後面的是正則化項(regularizer)或者叫懲罰項(penalty term),它可以是L1,也可以是L2,或者其他的正則函數。整個式子表示的意思是找到使目標函數最小時的值。下面主要列出幾種常見的損失函數。
一、log對數損失函數(邏輯回歸)
有些人可能覺得邏輯回歸的損失函數就是平方損失,其實並不是。平方損失函數可以通過線性回歸在假設樣本是高斯分布的條件下推導得到,而邏輯回歸得到的並不是平方損失。在邏輯回歸的推導中,它假設樣本服從伯努利分布(0-1分布),然後求得滿足該分布的似然函數,接著取對數求極值等等。而邏輯回歸並沒有求似然函數的極值,而是把極大化當做是一種思想,進而推導出它的經驗風險函數為:最小化負的似然函數(即max F(y, f(x)) —-> min -F(y, f(x)))。從損失函數的視角來看,它就成了log損失函數了。
log損失函數的標准形式:
L(Y,P(Y|X))=?logP(Y|X)L(Y,P(Y|X))=?log?P(Y|X)剛剛說到,取對數是為了方便計算極大似然估計,因為在MLE中,直接求導比較困難,所以通常都是先取對數再求導找極值點。損失函數L(Y, P(Y|X))表達的是樣本X在分類Y的情況下,使概率P(Y|X)達到最大值(換言之,就是利用已知的樣本分布,找到最有可能(即最大概率)導致這種分布的參數值;或者說什麼樣的參數才能使我們觀測到目前這組數據的概率最大)。因為log函數是單調遞增的,所以logP(Y|X)也會達到最大值,因此在前面加上負號之後,最大化P(Y|X)就等價於最小化虛鏈L了。
邏輯回歸的P(Y=y|x)表達式如下:P(Y=y|x)=11+exp(?yf(x))P(Y=y|x)=11+exp(?yf(x))
將它帶入到上式,通過推導可以得到logistic的損失函數表達式,如下:
L(y,P(Y=y|x))=log(1+exp(?yf(x)))L(y,P(Y=y|x))=log?(1+exp(?yf(x)))
邏輯回歸最後得到的目標式子如下:
如果是二分類的話模譽仿,則m值等於2,如果是多分類,m就是相應的類別總個數。這里需要解釋一下:之所以有人認為邏輯回歸是平方損失,是因為在使用梯度旦纖下降來求最優解的時候,它的迭代式子與平方損失求導後的式子非常相似,從而給人一種直觀上的錯覺。
這里有個PDF可以參考一下:Lecture 6: logistic regression.pdf.
二、平方損失函數(最小二乘法, Ordinary Least Squares )
最小二乘法是線性回歸的一種,OLS將問題轉化成了一個凸優化問題。在線性回歸中,它假設樣本和雜訊都服從高斯分布(為什麼假設成高斯分布呢?其實這里隱藏了一個小知識點,就是中心極限定理,可以參考【central limit theorem】),最後通過極大似然估計(MLE)可以推導出最小二乘式子。最小二乘的基本原則是:最優擬合直線應該是使各點到回歸直線的距離和最小的直線,即平方和最小。換言之,OLS是基於距離的,而這個距離就是我們用的最多的歐幾里得距離。為什麼它會選擇使用歐式距離作為誤差度量呢(即Mean squared error, MSE),主要有以下幾個原因:
簡單,計算方便;
歐氏距離是一種很好的相似性度量標准;
在不同的表示域變換後特徵性質不變。
平方損失(Square loss)的標准形式如下:
(Y,f(X))=(Y?f(X))2L(Y,f(X))=(Y?f(X))2
當樣本個數為n時,此時的損失函數變為:
Y-f(X)表示的是殘差,整個式子表示的是殘差的平方和,而我們的目的就是最小化這個目標函數值(註:該式子未加入正則項),也就是最小化殘差的平方和(resial sum of squares,RSS)。
而在實際應用中,通常會使用均方差(MSE)作為一項衡量指標,公式如下:
MSE=1n∑i=1n(Yi~?Yi)2MSE=1n∑i=1n(Yi~?Yi)2
上面提到了線性回歸,這里額外補充一句,我們通常說的線性有兩種情況,一種是因變數y是自變數x的線性函數,一種是因變數y是參數的線性函數。在機器學習中,通常指的都是後一種情況。
三、指數損失函數(Adaboost)
學過Adaboost演算法的人都知道,它是前向分步加法演算法的特例,是一個加和模型,損失函數就是指數函數。在Adaboost中,經過m此迭代之後,可以得到:
Adaboost每次迭代時的目的是為了找到最小化下列式子時的參數 和G:
而指數損失函數(exp-loss)的標准形式如下
可以看出,Adaboost的目標式子就是指數損失,在給定n個樣本的情況下,Adaboost的損失函數為:
關於Adaboost的推導,可以參考Wikipedia:AdaBoost或者《統計學習方法》P145.
四、Hinge損失函數(SVM)
在機器學習演算法中,hinge損失函數和SVM是息息相關的。在線性支持向量機中,最優化問題可以等價於下列式子:
下面來對式子做個變形,令:
於是,原式就變成了:
如若取,式子就可以表示成:
可以看出,該式子與下式非常相似:
前半部分中的就是hinge損失函數,而後面相當於L2正則項。
Hinge 損失函數的標准形式
可以看出,當|y|>=1時,L(y)=0。
更多內容,參考Hinge-loss。
補充一下:在libsvm中一共有4中核函數可以選擇,對應的是-t參數分別是:
0-線性核;
1-多項式核;
2-RBF核;
3-sigmoid核。
五、其它損失函數
除了以上這幾種損失函數,常用的還有:
0-1損失函數
絕對值損失函數
下面來看看幾種損失函數的可視化圖像,對著圖看看橫坐標,看看縱坐標,再看看每條線都表示什麼損失函數,多看幾次好好消化消化。
OK,暫時先寫到這里,休息下。最後,需要記住的是:參數越多,模型越復雜,而越復雜的模型越容易過擬合。過擬合就是說模型在訓練數據上的效果遠遠好於在測試集上的性能。此時可以考慮正則化,通過設置正則項前面的hyper parameter,來權衡損失函數和正則項,減小參數規模,達到模型簡化的目的,從而使模型具有更好的泛化能力。
Ⅶ POR 1: POR基礎綜述(更新中...)
離散模型和連續模型
離散模型可數
連續模型不可數
線性模型和非線性模型
線性模型具有addtivity(函數可以寫成多個答核分布的線性疊加)和proportionality(呈比例)
非線性模型則至少違背了上面兩種性質的一個
概率模型(probablistic models)和決定模型(deterministic models)
概率模型中用概率來描述模型的結果
決定模型中不考慮隨機因素,可以使用sensitivity analysis來整合不確定的因素
圖1中一些常用模型的走向
線性規劃LP問題:OR model Determinstic OR Continuous Variables Linear Function
離散時間馬爾科夫鏈:OR model Probablistic OR Discrete Variables Discrete Space
連續時間馬爾科夫鏈:OR model Probablistic OR Continuous Variables Discrete Space
對於OR模型中的Probablistic OR下面的continuous space,相關的問題比如:強化學習, 序列相關DP問題,特殊限制條件下的凸優化問題等等
概率空間的構成
樣本空間:
事件空間: ,事件空間是樣本空間的一個子集
事件的概率:
概率空間的定義由這三個概念組成,記為( , , )
概率的規則
概率的交集和舉舉段並集規則
P(A and B) = P(A B),兩個事件同時發生
P(A or B) = P(A B),兩個事件發生一個
P(A B) = P(A) + P(B) - P(A B)
P(A B) = P(A) + P(B) - P(A B)
註:藉助Venn圖可以證明其他關於概率的運算規則:
交換律 A B=B A
結合律 A B C = A (B C)
分配律 A (B C)=(A B) (A C)
摩根律 = , =
條件概率
P(AB) =P(A B) = P(B|A)P(A)
獨立的定義 P(B|A)=P(B)
獨立的充要條件 P(AB)=P(A)P(B)
證明:左到右, , 因此
右到左, , 得證
互斥(mutually exclusive)和獨立(independent)
互斥代表兩個事件沒有重疊的部分,互斥不等於獨立
互斥 :
獨立 :
例如:投硬幣,正面與反面是互斥的,但是頭發是黃的和眼睛是黑的這兩件事是獨立的
如果不互斥,可以從Venn圖證正譽明則對於事件 ,i {1, 2,... ,n}有
全概率公式 (Law of Total Probability)
證明:
貝葉斯公式
概率密度函數(pdf, probability density function)和概率質量函數(pmf, probability mass function),以及累積分布函數(cdf, cumulative distribution)
離散變數
pmf:
在離散變數中,P(a) = P(X=a)只有當a 至多有一個有意義的數 的時候才是正值,否則為0,如果X取值只能是 其中之一,則 ,其他的都是0
連續變數
pdf: 若f(x)為概率密度函數,則區間[a, b]內的概率為,
cdf:
由於 ,說明連續變數中,任何具體的點的P的值是0
離散隨機變數的分布常見的有以下幾種:
pmf
期望
方差
注意 :對於二項分布,根據其定義有三個條件:獨立,等概率,二項
pmf
,其中
期望
注意到k=0的時候項為0,同時因為
(二項式的展開公式的逆用)
其實也可以這么去理解,n個獨立的伯努利實驗,每一個伯努利實驗的期望是p,所以二項分布的期望自然就是np了
方差
(這是因為 )
(這里需要硬湊 )
或者也可以由n次伯努利實驗的獨立性直接得出
pmf
期望
方差
令 ,g(q)在求期望的時候已經求過了一遍, 由復合函數的求導法則可知:
因此,方差
另一種證明方式則是用錯位相減法,證明方式可參考: https://blog.csdn.net/sinat_37321923/article/details/77493672
對於泊松分布的理解
承接二項分布,在現實生活中,實際上二項分布是很難實現的,最關鍵的地方在於這個n,比如接電話,如果用二項分布去考慮,我們需要知道有n個人投硬幣,每個人有p的概率打電話進來,然後可以得到期望打電話過來的人數是np。但是事實上,我們根本不知道有多少個人來投硬幣,也就是不知道這個n的具體數值。
如果我們換一個思路思考,不是打電話的n個客戶來投硬幣,而是電話來投硬幣,這個問題就簡單多了。
思路是,對於每一個 ,我們都可以看做是電話進行的投幣,如果我的 足夠小,則完全可以保證我的 就是一次伯努利實驗。那麼這n個 共同構成了二項分布。
假設現在,我們已知的信息是,在某一段時間內,有 個人來打電話。現在我們根據這個信息反推分布。
我們現在將這一段時間細分成n個 的區間,每個區間的概率都是 ,那麼根據二項分布的期望,這n個區間的期望就是 ,這符合我們觀測到的結果。
也被稱為到達率,也就是在這一段時間之內事件發生的次數。
泊松分布在檢驗產品的缺陷等等問題上面應用十分廣泛。
pmf
根據上面的理解來推導泊松分布的pmf
當 , , 因此,
同時:
由於當
這個是e的極限的定義
由以上極限得到泊松分布的pmf
期望
注意到k=0的時候項為0
注意到 的泰勒展開式
方差
因此
同樣的,從理解上來看,假設有n個 時間,概率 方差為
參考: https://zhuanlan.hu.com/p/68780484
https://towardsdatascience.com/poisson-distribution-intuition-and-derivation-1059aeab90d
pdf
cdf
若是 均勻分布 ,則特指 的情況
pdf
cdf
pdf
Ⅷ 機器學習需要什麼數學基礎
數學基礎
歡迎補充。
文中提供的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,至於外面,好像也是有電子版的。