如何從 8 個維度全面比較機器學習演算法?
人類發明的機器學習(ML)演算法簡直數不勝數。當然,大多數時候只有一小部分被用於研究和工業。然而,對於個人來說,理解並記住所有這些 ML 模型的細節仍然有點困難。有些人可能會有一個錯誤的印象,認為所有這些演算法都是完全不相關的。更重要的是,當兩種演算法似乎都有效時,如何選擇使用演算法 A,還是 B?
本文最初釋出於 Towards Data Scienc 部落格,經原作者授權由 InfoQ 中文站翻譯並分享。
人類發明的機器學習(ML)演算法簡直數不勝數。當然,大多數時候只有一小部分被用於研究和工業。然而,對於個人來說,理解並記住所有這些 ML 模型的細節仍然有點困難。有些人可能會有一個錯誤的印象,認為所有這些演算法都是完全不相關的。更重要的是,當兩種演算法似乎都有效時,如何選擇使用演算法 A,還是 B?
這篇文章的目的是為讀者提供一個不同的角度來看待 ML 演算法。有了這些角度,演算法可以在同樣的維度上進行比較,並且可以很容易地進行分析。本文在撰寫時考慮了兩個主要的 ML 任務——迴歸和分類。
時間複雜度
在 下,演算法所花費的“時間”是由演算法的基本運算來度量的。雖然使用者和開發人員可能更關心演算法用於訓練模型的掛鐘時間,但在比較模型用於訓練的時間時,使用最壞情況下的計算時間複雜度更公平。使用計算複雜度的好處是,可以忽略執行時使用的計算機能力、架構以及底層程式語言等的差異,允許使用者關注演算法基本操作的基本差異。
注意,在訓練和測試期間,時間複雜度可能差別很大。例如,像線性迴歸這樣的引數模型可能訓練時間很長,但它們在測試期間很高效。
空間複雜度
空間複雜度根據輸入大小度量演算法執行需要多少記憶體。如果 ML 演算法將太多資料載入到機器的工作記憶體中,則 ML 程式將無法成功執行。
樣本複雜度
樣本複雜度度量為了保證訓練的網路可以有效的泛化所需的訓練樣本量。例如,深度神經網路需要大量的訓練資料來訓練,因此,具有較高的樣本複雜度。
偏差 - 方差權衡
不同的 ML 演算法會有不同的偏差 - 方差權衡。偏差誤差來自於模型偏向於特定解或假設的事實。例如,在非線性資料上擬合線性決策邊界時,偏差較大。另一方面,方差測量模型方差帶來的誤差。 。
不同的模型做出了不同的偏差 - 方差權衡。例如,樸素貝葉斯被認為是一個高偏差、低方差的模型,因為它所做的假設過於簡單。
線上和離線
線上和離線學習是指機器學習軟體學習更新模型的方式。線上學習意味著可以一次提供一條訓練資料,以便在獲得新資料時立即更新引數。而離線學習為了更新引數,需要在新資料出現時重新訓練(重新訓練整個模型)。如果一個演算法是線上的,那麼它應該是高效的,因為在生產中使用的引數可以實時更新,以反映新資料的影響。
ID3 決策樹演算法是離線學習的一個例子。ID3 的工作方式是檢視全域性資料並進行貪婪搜尋以最大化資訊增益。當新的資料點出現時,整個模型需要重新訓練。而隨機梯度下降法(SGD)是一種線上演算法,可以在新資料到達時更新訓練模型的引數。
並行性
並行演算法是指一個演算法可以在給定的時間內完成多個操作。這可以透過將工作負載分配到不同的工作者(如單機或多機中的處理器)來實現。像梯度增強決策樹(GBDT)這樣的序列演算法很難並行化,因為下一個決策樹是根據前一個決策樹的誤差構建的。
K 近鄰(k-NN)模型的特性讓它可以輕鬆地在多臺機器上同時執行。這是在機器學習中使用 MapReduce 的一個經典例子。
引數化
雖然引數模型的定義並不嚴格,但是這種模型分類在統計學習領域中得到了廣泛的應用。簡單地說,引數化模型是指模型的引數數量是固定的,而 。另一種定義引數化模型的方法是基於其對資料機率分佈形狀的基本假設。如果沒有給出假設,則為非引數化模型。
引數化模型在機器學習中很常見。例如線性迴歸、神經網路以及許多其他 ML 模型。另一方面,k-NN 和 SVM(支援向量機)是非引數化模型。
方法、假設和目標
本質上,所有的機器學習問題都是最最佳化問題。在機器學習模型或需要最佳化的潛在目標函式背後,總是有一種方法。對演算法背後的主要思想進行比較,可以增強演算法的合理性。
例如,線性迴歸模型的目標是最小化預測的平方誤差和實際值(均方誤差,MSE),而 Lasso 迴歸的目標是最小化 MSE,同時透過新增額外的正則化項來限制學習的引數,防止過擬合。
總之,ML 演算法可以根據不同的標準進行分析。這些標準實際上有助於度量不同 ML 模型的有效性和效率。
你能想到其他比較 ML 演算法的視角嗎?
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946223/viewspace-2685384/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 8 比較器:如何對 List 排序Java排序
- 機器學習常見演算法效能比較與調參建議機器學習演算法
- 八個層面比較 Java 8, RxJava, ReactorRxJavaReact
- 如何實現“比較兩張圖片的相似度”,或者說“比較兩張圖片是否基本一致”的演算法?演算法
- C#比較兩個字串的相似度【轉】C#字串
- 從百度運維實踐談“基於機器學習的智慧運維”運維機器學習
- 機器學習常用的分類器比較機器學習
- 對於“前端狀態”相關問題,如何思考比較全面前端
- 比較全面的MySQL優化參考MySql優化
- 中興小鮮5和Blade V8全面比較 有什麼區別?買哪個好?
- 機器學習中的維度災難機器學習
- 從技術、市場、環境三個維度對比中美雲端計算產業產業
- Oracle將字元編碼從GBK轉到UTF8,如何操作比較穩妥?Oracle字元
- 排序演算法效能比較排序演算法
- python如何比較兩個字串是否相等Python字串
- 比較全面的MySQL最佳化參考MySql
- 集中運維與分散運維的比較 - thenewstack運維
- java中利用hanlp比較兩個文字相似度的步驟JavaHanLP
- 規則引擎與機器學習比較與結合機器學習
- 如何研究學習一個機器學習演算法機器學習演算法
- Go和Python比較的話,哪個比較好?GoPython
- 相容oracle的edit_distance_similarity 比較兩個字串相似度OracleMILA字串
- 新的顏色對比度演算法-感知對比度演算法APCA演算法PCA
- Java 兩個日期比較Java
- JavaScript字串如何比較大小JavaScript字串
- MATLAB一維插值和二維插值 比較Matlab
- 如何選擇CRM系統?哪個品牌比較好?
- 幾種儲存介面協議全面比較(轉載)協議
- 機器學習中比較重要的幾個概念機器學習
- 演算法:比較含退格的字串演算法字串
- 初練演算法,比較演算法之美演算法
- 從 0 開始機器學習 - 機器學習演算法診斷機器學習演算法
- 從科研角度談“如何實現基於機器學習的智慧運維”機器學習運維
- Linux運維比較實用的工具Linux運維
- JavaScript比較兩個時間JavaScript
- 一個字串比較的題字串
- 比較兩個table是否相同
- 如何比較兩個資料庫表結構的不同資料庫