機器學習中文資源合集

2021-08-08 02:27:39 字數 3013 閱讀 3872

本文**機器之心

先決條件

機器學習的基礎是數學。數學並非是乙個可選可不選的理論方法,而是不可或缺的支柱。如果你是一名計算機工程師,每天使用 uml、orm、設計模式及其他軟體工程工具/技術,那麼請閉眼一秒鐘,忘掉一切。這並不是說這些概念不重要,絕不是!但是機器學習需要一種不同的方法。如今 python 如此流行的原因之一是其「原型設計速度」。在機器學習中,一種使用幾行**即可建模演算法的語言絕對是必要的。

初學者最好先學習下列內容:

概率論

線性代數

微積分

網上有很多免費資源,比如

維基百科上也有很多好資源,對方程、定理等進行了清晰易懂的解釋。

機器之心也介紹過許多數學基礎與概念:

機器學習主要需要的數學基礎就是微積分、線性代數、概率論,我們感覺只需要掌握大學中常見的高數、線性代數、概率論與數理統計三門課程,基本上概念的理解就沒什麼問題了。如果再學一點數值計算和最優化等,我們基本上就能理解機器學習的學習過程推導。

機器學習方法建議(面向初學者)

特徵工程

開始機器學習的第一步是理解如何評估和改進資料集的質量。管理特徵的類別和缺失、歸一化和降維(pca、ica、nmf)是大幅提高演算法效能的基本技術,而且還有助於研究如何將資料集分割成訓練集和測試集、如何採取交叉驗證來取代傳統的測試方法。

機器之心也曾詳解過特徵工程如 pca 降維演算法的詳細理論與推導,當然我們還介紹了其它有關特徵的概念:

numpy:python 數值計算之王!

使用 python 時,numpy 不僅僅是乙個庫。它是幾乎所有機器學習實現的基礎,因此了解它的工作原理、關注向量化和廣播(broadcasting)是非常必要的。這些技術可以幫助加速大多數演算法的學習過程,利用多執行緒和 simd、mimd 架構的力量。

官方文件已經很完整了,不過,我還建議大家看一下以下資源:

資料視覺化

matplotlib 即使不是純粹的機器學習話題,了解如何視覺化資料集也很重要。matplotlib 可能是最廣泛使用的解決方案:matplotlib 易用,允許繪製不同種類的圖表

。bokeh 和 seaborne 提供了有趣的替代方案。不必要徹底了解所有包,但是了解每乙個包的優點和弱點還是很有用的,可以幫助你選擇合適的包。

了解 matplotlib 細節的資源:《掌握 matplotlib》,mcgreggor d. 著

線性回歸

線性回歸是最簡單的模型之一,可以把它作為乙個優化問題來研究,該問題可通過最小化均方誤差而得到求解。該方法雖然有效,但是限制了可利用的可能性。我建議還可以把它當作貝葉斯問題,使用之前的可能性展示引數(比如,高斯分布),優化變成了最大似然估計(maximum likelihood estimation,mle)。即使這看起來更加複雜,但該方法提供了乙個可供幾十個其他複雜模型共享的新方法。

coursera 上介紹貝葉斯統計的課程:

以及這兩本書:

包括線性回歸在內,機器之心曾介紹了一些解決回歸問題的方法(後文提供了 cart 演算法進行回歸分析):

線性分類

通常情況下,logistic 回歸是最佳起始點,也是研究資訊理論進而了解資訊熵、交叉熵和互資訊的好機會。類別交叉熵(categorical cross-entropy)是深度學習分類中最穩定、使用最廣泛的代價函式,乙個簡單的 logistic 回歸可以展示它是如何加速學習過程的(與均方差相比)。另乙個重要的話題是正則化(ridge、lasso 和 elasticnet)。很多情況下,人們認為它是一種提高模型準確率的深奧方式,但是它的真實意義是更準確,在具體例項的幫助下變得易於理解。我還建議剛開始的時候,把 logistic 回歸當作乙個簡單的神經網路,視覺化(以 2d 例項為例)權重向量在學習過程中的移動軌跡。

我還建議本節應包括超引數網格搜尋。網格搜尋不在沒有完整了解的情況下嘗試不同的值,而是評估不同的超引數集的效能。因此,工程師可以將注意力集中在可達到最高準確率的組合上。當然還有更加強大的貝葉斯優化方法,即利用先驗知識逼近未知目標函式的後驗分布從而調節超引數的方法。

支援向量機(svm)

一些有用的免費資源:

決策樹

決策樹提供了另一種分類和回歸的方法。通常,它們不是解決複雜問題的首選,但它們提供了完全不同的方法,即使是非技術人員也可以很容易理解,該方法還可以在會議或演示中視覺化。

整合學習一覽

在理解了決策樹的動態特性以後,研究整合訓練樹的集(整合)來提高整體準確率的方法很有用。隨機森林、梯度樹提公升和 adaboost 都是強大的演算法,且複雜度較低。對比簡單的樹和提公升方法與 bagging 方法採用的樹的學習過程挺有趣的。scikit-learn 提供了最常見的實現方法,但是如果你想更好地駕馭這些方法,我還是建議你在 xgboost 上多花些時間,xgboost 是乙個既適用於 cpu 又適用於 gpu 的分布式框架,即使在較大的資料集上也能加速學習過程。

聚類 當開始聚類方法的學習時,我的建議是從高斯混合演算法(基於期望最大化/em)學起。雖然 k-均值聚類要更加簡單易懂(也是必須要學習的),但是高斯混合演算法為我們提供了純粹的貝葉斯方法,在其他類似任務中也十分實用。其它必學的演算法還有層次聚類(hierarchical clustering)、譜聚類(spectral clustering)和 dbscan。這對你了解基於例項的學習或研究 k-近鄰演算法(既適用於有監督又適用於無監督任務)也是有幫助的。譜聚類的乙個有用的免費資源是:

聚類演算法是無監督學習中的代表,機器之心也曾詳細地介紹過各種聚類方法與實現:

神經網路入門

神經網路是深度學習的基礎,你可以在單獨的課程中學習神經網路。但是,我認為理解感知機、多層感知機以及反向傳播演算法的概念也很有幫助。scikit-learn 提供了乙個實現神經網路的簡單方法,但是,開始探索 keras 也是乙個好主意,keras 是乙個基於 tensorflow、theano 或 cntk 的高階架構,允許使用最少的努力對神經網路進行建模和訓練。開始神經網路學習的一些好資源:

目前最好的深度學習書籍可能就是:

最後,我們將介紹部分機器之心曾發過的綜述性技術文章或**,並希望這些文章能對大家全面理解各種方法有所幫助:

機器學習 機器學習資源大全中文版

我想很多程式設計師應該記得 github 上有乙個 awesome 系列的資源整理。awesome machine learning 就是 josephmisiti 發起維護的機器學習資源列表,內容包括了機器學習領域的框架 庫以及軟體 按程式語言排序 awesome 系列雖然挺全,但基本只對收錄的資...

機器學習資源大全中文版

我想很多程式設計師應該記得 github 上有乙個 awesome 系列的資源整理。awesome machine learning 就是 josephmisiti 發起維護的機器學習資源列表,內容包括了機器學習領域的框架 庫以及軟體 按程式語言排序 awesome 系列雖然挺全,但基本只對收錄的資...

機器學習資源

最近因為工作原因重溫了目標檢測演算法,參考了focal loss。裡邊涉及了cross entropy損失函式。這裡重溫了一下二分類的logistic回歸以及多類的softmax loss,但是對於softmax的背景知識一直不是太了解。藉著這次機會,好好地挖一下softmax,在本博文中會陸續更新...