量化投資學習筆記35——《機器學習入門》第一部分

来源:https://www.cnblogs.com/zwdnet/archive/2020/03/04/12411592.html
-Advertisement-
Play Games

本文根據Jin Liang的《Getting Started with Machine Learning》ver 0.96而寫,基本上就是翻譯,但並不是逐字翻譯。 第一部分 機器學習基礎 01.概述 應用:自動駕駛,面部識別,垃圾郵件識別,信用卡欺詐識別,機器驗傷,銷售預測,語音識別,機器人。 深度 ...


本文根據Jin Liang的《Getting Started with Machine Learning》ver 0.96而寫,基本上就是翻譯,但並不是逐字翻譯。
第一部分 機器學習基礎
01.概述
應用:自動駕駛,面部識別,垃圾郵件識別,信用卡欺詐識別,機器驗傷,銷售預測,語音識別,機器人。
深度學習包含於機器學習包含於人工智慧。
機器學習使使電腦程式從已有的數據中學習已預測新的數據,趨勢。
機器學習的流程:
①選擇數據,分成訓練數據,驗證數據,測試數據。
②數據建模,利用數據的相關特征訓練相關模型。
③驗證模型:使用驗證數據檢驗模型。
④測試模型:使用測試數據測試已驗證的模型。
⑤使用模型:部署整個模型,對新數據進行預測。
⑥改進模型
與傳統方法的區別:傳統方法是人事先制定好所有解決問題的方法,而機器學習是從數據中自己學習解決方法。
與數據挖掘的區別:數據挖掘是從數據中尋找未知的模式和關係的科學,機器學習是應用事先推斷的知識於新的數據以在實際問題中做出決策。
考慮是否需要機器學習?
①你是否需要機器學習?
你是否需要將任務自動化?有複雜的規則和非結構化數據的大量任務是合適的選擇。
②能否將你的問題清晰的用公式表達?
要何種輸入,進行何種預測?
③你是否有合適的例子?
機器學習總是需要數據的。通常來說,數據越多越好。數據需有兩個部分(有監督學習),特征和標簽。
④數據的規則性
機器學習是學習規則和模式
稀少或不規則的數據難以學習。
⑤你能否找到數據的真實意義?
樣本常以特征矩陣的形式出現,成功的機器學習需要好的特征。
⑥你如何定義成功?
評估函數需支持商業目標。
你應當何時使用機器學習?
涉及大量數據,但沒有現成的公式或方程的任務或問題。
如何創建機器學習模型?
將數據劃分為訓練集和測試集。用訓練集數據進行數據清洗,特征工程,模型選擇,參數優化,最後建立模型。用模型對測試數據進行預測,最後將預測值與真實值進行對比。
機器學習的基本任務
分類(預測類別):決定數據點屬於哪個類別。
回歸(預測值):計算與樣本點相關的連續值屬性。
02.理解商業
理解你的問題,包括以下任務:
①.定義你的商業目標
②.評估你的形勢
③.定義你的數據挖掘目標
④.制訂你的項目規劃。
數據科學可以回答的五個問題:
①這是A還是B?
②它是怪異的嗎?
③有多少?
④這是如何組織的?
⑤我接下來該做什麼?
03.理解數據
收集原始數據
描述數據
探索數據
檢驗數據質量
在考慮能做多好之前先考慮能不能做。
04.數據準備
數據清理準備在整個機器學習過程中耗時最多。約一半以上的時間。
真實世界的數據是髒的,影響數據質量的因素:
①無效數據
②數據格式不一致
③屬性間的依賴關係
④重覆數據
⑤數據缺失
⑥書寫錯誤
⑦位置錯誤:一個屬性包含另一個屬性的數據。
數據預處理避免“垃圾進,垃圾出”:數據清洗,數據重構,文本清洗,數據歸一化(normalization),數據離散化。
處理缺失值的方法:刪除,用空值,平均值,高頻數值,回歸值來填充。
異常值的問題,有的演算法對其很敏感。
對奇異值的處理:保留、拋棄或用鄰近值代替。
這樣處理的點如果少於5%,不會影響假設檢驗,否則可能影響樣本代表性,降低分析的有效性等。可以考慮數據轉換,或使用其它數據處理技術。
數據歸一化:將數據縮小到指定範圍內。
①最大值最小值法
歸一化後的樣本值 = (原值 - 最小樣本值)/(最大樣本值-最小樣本值)
②正態化
z=(樣本值 - 平均值)/標準差
③數值小數點位數改變。
數據描述:可以用可視化等方法,可以用分類方法將連續數據離散化。
數據縮減:樣本再取樣,對屬性取樣,對樣本分組,每組用一個數據代表。
文本清洗。
特征工程:這是機器學習中的關鍵任務。從原始數據中提取特征的過程。它是一種藝術。將數據納入模型與避免較多的數據納入之間存在平衡。引入不相關的變數會增加模型噪音。
特征即輸入,自變數;目標即結果,因變數。
特征工程可以增強你的數據。
為何應該執行特征篩選?
①簡化模型便於研究者/應用者解釋。
②縮短訓練時間減少學習過程。
③避免維度災難(curse of dimensionality)
④通過降低過擬合增強模型的通用性。
維度災難:當維度高於某特定限度後,模型表現反而下降的現象。原因,當維度越高時,平滑填充整個空間的數據需要指數級的增長。但實際中數據的規模是固定的。
現代特征選擇的方法:過濾(filter),封裝(wrapper),嵌入(embedded method)。
傳統方法:前向法(逐漸向模型添加特征),後向法(逐漸從模型中排除特征),逐步回歸法。
①過濾法:納入所有特征-選擇最佳子集-學習演算法-檢查模型表現。
通過統計學方法檢驗每個特征與結果的相關性,排序,從而決定納入和排除哪些特征。
該方法傾向於納入多餘的變數,因為它不考慮變數間的關係。
②封裝法:通過一個前瞻性的模型來給特征子集評分。
所有特征的集合-產生一個子集,執行學習演算法-反覆進行上一步,選出最佳子集-執行。
該方法將特征子集的選擇看做一個搜索過程,用一個前瞻模型來評估子集。這種方法考慮了變數之間的關係。它運算強度比較大,比較耗時。但通常它能給出某個模型的最佳特征子集。
③嵌入演算法:特征選擇是模型建構過程的一部分。
所有特征的集合-產生一個特征子集-運用學習演算法建模-評價表現-重覆上面三步,選擇表現最佳的特征子集。最常用的是正則化方法(regularization)。
後兩種演算法更耗時,更易產生過擬合。
特征選擇與降維
特征選擇減少了特征數量,但通常不被稱為降維。特征選擇產生一個特征的子集但並不改變其數據。降維方法可以通過改變數據將原有的特征轉化為新特征。
谷歌的特征工程的定義:將原始數據轉換為特征向量的過程。
05.建模
建模是一個綜合數據結構,演算法,數學等以找到數據集中特征與目標的關係的交互性過程。
模型定義了特征與標簽之間的關係。
機器學習過程:獲取原始數據,數據清洗處理,特征工程,建模,模型檢驗,應用。
建模是一個反覆試驗調整的過程。
通常在真實值與預測值之間有差異。平均誤差平方(Mean square error,MSE)常用來表示誤差的大小,也被稱為損失函數或成本函數。
模型的訓練是一個尋找最佳參數使得預測誤差最小的迭代過程。
梯度下降法是尋找最佳參數的常用演算法。
參數和超參數
超參數是訓練前指定的(根據經驗等),決定模型的不同。"調參"就是調整這個。參數是從數據中學習到的。
超參數的例子:神經網路的層數,學習率。隨機樹森林里樹的數目。
分類演算法,根據結果有兩分類和多分類。
機器學習分四類:監督學習,無監督學習,半監督學習,增強學習。
需要選擇合適的演算法,不合適的演算法準確度很低。
選擇演算法的因素:
①數據的大小,質量和性質
②可用的計算時間
③任務的緊急程度
④你想用數據做什麼?
06.模型評估(Evaluation)
什麼是好的模型?
準確度高,可解釋性強,快速,可擴展性強。
在訓練階段表現良好的模型可能在實際中表現很差。
能在新數據中有很好的普遍性的模型很關鍵。
欠擬合和過擬合
模型不能抓住數據中的重要特征叫欠擬合。它甚至在訓練集中表現都很差。這通常意味著使用了一個過度簡單的模型。(高訓練誤差,高測試誤差)
模型能較準確的擬合訓練數據但在新數據上表現過差叫過擬合。(低訓練誤差,高測試誤差)
這兩種情況都會導致預測表現太差。
模型檢驗其對新數據的有效性。通過倒置或分割數據以檢驗模型的有效性。在監督學習時抽出一部分數據作為測試集,使用訓練集訓練模型,使用測試集測試模型。
模型檢驗策略:
①hold-out檢驗:將數據分為訓練集和測試集兩部分,不要拿測試集訓練模型。不建議採用這種方法,因為這種檢驗不能公平的評估假設的普遍性。
更好的檢驗方法:將數據劃分為訓練集,交叉驗證集和測試集三部分。使用交叉驗證數據選擇模型,測試數據來評估模型。這是吳恩達建議的。
對於小數據集,三者的比例約為6:2:2。對於大數據集,三者比例為98:1:1。
②k折交叉驗證(k-fold cross validation)
將數據集均分為k份大小相等的部分。重覆進行k次hold-out檢驗。每次,其中一份數據用作測試集,其餘k-1份用作訓練集。計算每次檢驗的的誤差。
這一方法的優點是數據劃分方式對結果的影響很小。每份數據有一次作為測試數據,有k-1次作為訓練數據。隨著k的增大,誤差減小。
③留一交叉檢驗(leave-one-out cross validation)
上一個方法的特例,k=n,即有多少樣本點,就分成多少份。每次只留一個樣本點做測試數據,其餘數據都作為訓練數據。這種方法需要很大的運算量。
檢驗方法的選擇:大數據集選擇hold-out檢驗,計算量小,適合於深度學習,因為數據量巨大。但傳統的數據劃分如80:20不適合於深度學習。小數據集選擇交叉驗證。10折比較常見,當更小的值也可以選。
評價模型的表現
模型評價矩陣
分類模型
準確性(Accuracy)
精確性(Precision)
召回(Recall)
F值
ROC
AUC
Log Loss
回歸模型
MAE(平均標準差)
MSE(平均方差)
RMSE(平均方差根,Root Mean Square Err)
MAPE(平均絕對誤差百分比)

評估分類演算法
①準確率 = 預測正確例數/總例數
對於偏態數據準確率並不是一個好的指標。比如癌症檢測,準確率很高的方法可能也是沒用的。
②精確性 = 正確的陽性預測/所有陽性預測,這回答的是預測是陽性的有多大比例是真的陽性。
③召回率 = 正確的陽性預測/(正確的陽性預測+錯誤的陰性預測),它回答的問題是真正的陽性中間有多大比例被預測為陽性。
預測錯誤的代價
有兩種錯誤:納假(第一類錯誤),拒真(第二類錯誤),一個概率高另一個概率就低,要根據犯錯的成本來選擇。
④F值 = 2*PR/(P+R)
值越大越好
⑤ROC曲線
正確陽性率與錯誤陽性率在不同決定水平的關係的曲線。
曲線顯示了當你允許越來越多的錯誤陽性的時候能得到多少正確陽性分類。
曲線越靠左上角越好。

a是隨機猜測,c比b好。
⑥AUC,ROC曲線下的面積,是用單獨一個數衡量模型表現的最好方法。值越高越好。隨機猜的模型,AUC=0.5。
評估回歸演算法
①MAE:誤差絕對值的平均值。
測量預測值與真實值的接近程度。之所以取絕對值,是防止正負誤差相互抵消。最好的回歸有最小的MAE值,因此MAE值越小越好。
②MSE:誤差平方的平均值
用誤差平方值代替絕對值。會放大誤差較大者的影響,跟MAE一樣,越小越好。
③RMSE:誤差平方和的平均數的平方根。
即MSE開平方根。是在回歸分析中最常用的指標。它有一些缺點,比較容易受異常值影響。其對大的誤差值更加敏感。同樣越小越好。
④MAPE:平均絕對誤差比例
當數據沒有極端值(包括0)時最好。當數據為0或接近0時該指標會給出混亂的結果。越小越好。
⑤R²
r稱為皮爾森相關係數,衡量兩個變數的線性相關性。取值範圍為[-1,1]。當值為0時二者沒有線性關係。
R²是測量模型是否擬合真實數據的標準方法。等於r*r。它描述了因變數的變化能由模型來解釋的比例。它取值範圍[0,1],越高越好。在使用時要小心,太高的值要懷疑。
具體計算略了。
R²的問題:①往模型中加入更多的特征,R²的值會增加,儘管特征可能與因變數無關。因此一個特征更多的模型可能比特征較少的模型的R²值高,其預測能力卻未必如此。②當模型有更多特征和更高階的多項式時,會擬合噪音,即過擬合,而R²值會較高,產生誤導。
⑥調整R²
是R²的修正版。如果加入更多的無關特征,模型的調整R²會降低。而加入更多相關特征,模型的調整R²會升高。調整R²總是小於或等於R²。
誤差的來源有兩個:偏倚和變異。
變異是預測值偏離其平均值的程度。
偏倚是預測值與真實值的差異。
預測誤差可以分解為上述兩個部分。
低偏倚及低變異是最好的,高偏倚和高誤差是最差的。但通常無法兩者兼顧。在選擇模型時需要權衡兩者。選擇能平衡二者並使總誤差最小的模型。

左側是欠擬合(偏倚),中間剛好,右邊是過擬合(變異)。
模型在訓練集上很好,在測試集上很差,是變異問題。如果模型在訓練和測試集上都很差,是偏倚問題。
可以使用交叉驗證來診斷偏倚和變異問題。
高偏倚問題的特征:高訓練誤差,驗證誤差與訓練誤差類似。
高變異問題的特征:低的訓練誤差,非常高的驗證誤差。
處理:
①高偏倚(欠擬合):使模型更複雜(嘗試其它模型;如更大的神經網路。);使用更複雜的特征;調整超參數;使用一系列複雜度更低的演算法(bosting)
②低偏倚而高變異(過擬合):獲取更多數據;減少特征數量;使用正則化;換成複雜度較低的演算法;使用一系列高複雜度的演算法(Bagging/隨機樹森林)
學習曲線是描述訓練誤差和測試誤差隨訓練集的大小增加的變化的曲線,用來診斷偏倚和變異。

上面是典型的高變異的學習曲線,下麵是典型的高偏倚的學習曲線。
具體調參的內容略了。
07.模型應用
應用訓練好的模型和真實數據進行預測。模型應用以後還要進行評估、監控、管理。
評估分為離線評估和線上評估。模型的表現會隨時間下降,對於表現不好的模型,撤回。
08.其它話題
幾個建議:
①快速建立初始系統,再迭代。別在一開始就過度思考。
②使用交叉驗證來評估模型的通用性。
③使用偏倚/變異分析和錯誤分析作為進一步改進的先導。
谷歌有數據集搜索引擎。
接下來第二部分是具體各種機器學習演算法的介紹。下次吧。

我發文章的四個地方,歡迎大家在朋友圈等地方分享,歡迎點“在看”。
我的個人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的博客園博客地址: https://www.cnblogs.com/zwdnet/
我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • JIT:Just In Time AOT:Ahead of Time 含義: 目前,程式主要有兩種運行方式:靜態編譯與動態解釋。 靜態編譯的程式在執行前全部被翻譯為機器碼,通常將這種類型稱為AOT (Ahead of time compiler)即 “提前編譯”;如C、C++。 判斷標準是:程式執行 ...
  • 原因: 在controller層請求處理完了返回時,沒有使用@RestController或@ResponseBody而返回了非json格式 解決: 1,類上註解@Controller改為@RestController 註意:如果同一個controller中有其他方法需要返回html頁面路徑,這個時 ...
  • Python批處理腳本只能處理較為簡單的順序執行的語句, 語句太多了,就有點亂...是時候升級一下了。 函數可以將多條語句分組封裝,實現面向過程的,簡單的模塊化管理。 方便將語句實行“網格”管控,不容易亂。 代碼編譯或運行中出bug不要緊,找該函數即可。 簡單的Python函數 簡單點,就是將多條語 ...
  • 一、葵花寶典: 學習新知識的【靈魂三問】 + what XXX是什麼? 遇到新名詞,先從字面意思下手,提取其中的關鍵詞,拆分解釋。 例如:變數,會變的量…… + why 為什麼要有它,有啥用? 一種事物的存在,即有其理由。 為什麼要有它,用它來做什麼? 編程語言是由人類創造,用來控制電腦運行操作的 ...
  • 今天是全中國按下暫停鍵的第 25 天,在全中國按下暫停鍵的日子里,主人翁每天早上睜眼第一件事就是打開手機看著疫情實時數據的變化,看看每一條催淚的新聞。揪著的心卻在默默祈禱疫情趕快過去。 言歸正傳,對於一個熱衷技術且大有前途的青年來說,數據看久了是不是想到要展示一個技術大白的真正技術了呢?今天的文章主 ...
  • 前言 代碼 優化 ,一個很重要的課題。可能有些人覺得沒用,一些細小的地方有什麼好修改的,改與不改對於代碼的運行效率有什麼影響呢?這個問題我是這麼考慮的,就像大海裡面的鯨魚一樣,它吃一條小蝦米有用嗎?沒用,但是,吃的小蝦米一多之後,鯨魚就被喂飽了。 代碼優化也是一樣,如果項目著眼於儘快無BUG上線,那 ...
  • 本文源碼: "GitHub·點這裡" || "GitEE·點這裡" 一、併發編程簡介 1、基礎概念 程式 與電腦系統操作有關的電腦程式、規程、規則,以及可能有的文件、文檔及數據。 進程 進程是電腦中的程式,關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎 ...
  • 1. calendar處理日期 calendar模塊第一了Calendar類,其中封裝了一些值的計算,如給定的一個月或一年中的周日期。另外,TextCalendar和HTMLCalendar類可以生成經過預格式化的輸出。 1.1 格式化示例 prmonth()方法是一個簡單的函數,可以生成月的格式化 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...