機器學習之必備知識篇

程式設計師小城發表於2019-03-17

下面我就詳細介紹一下機器學習所需的一些基礎知識:

線性代數

資料通常以矩陣的形式進行儲存。既然是以矩陣的形式,那麼自然少不了矩陣的運算。在處理資料時,運用矩陣的運算可以有效地避免編寫多層巢狀迴圈,從而加快了程式的執行速度。如果大家用TensorFlow架設過神經網路,或是從頭自己編寫過演算法的話,一定被矩陣相乘的順序、矩陣的形狀、矩陣元素間的運算等問題困擾,往往對一個小問題的忽略,會讓我們花費幾個小時來除錯程式。

因此,如果我們有非常非常紮實的線性代數功底,在編寫程式的每一步都能完全搞清楚運算矩陣的形狀和運算後的結果,你編寫演算法的效率一定會大大提升。

至於線性代數的掌握程度,個人認為矩陣的運算、轉置、逆矩陣等搞清楚的話,基本已經夠用了。

概率論

機器學習演算法,或者再說細一點——模式識別和分類,核心就是貝葉斯理論(Bayes Theory)。貝葉斯理論為我們提供了計算決策邊界(Decision Boundary)的方式,而決策邊界在分類當中自然是核心所在,正是這個邊界決定了我們的模型會將資料分在A類還是B類(或者還有更多類別,C類,D類....)。

除此之外,和機器學習難以分家的就是統計學習。傳統的統計分析和機器學習所用的演算法幾乎是同一套演算法,不同點在於:統計分析更側重於利用模型幫助決策者做出決策,因此其更注重於模型的可解釋性(如風險分析,信用卡欺詐分析);而機器學習建模往往更側重於結果,對可解釋性並不是很在意(如利用聲音分辨性別)。而在統計分析裡邊,無論是假設驗證還是推論,都要大量使用到概率論的內容,如正態分佈的分析、z-test,t-test,Chi方分佈,F分佈等等。

至於概率論的掌握程度,個人認為學到大學課本里的程度已經完全夠用。

機器學習演算法

機器學習演算法自然是機器學習的核心所在,演算法的學習一般又分為理論和演算法實現兩部分。

理論知識即每種演算法的數學原理,包括基本原理、引數的含義、正則化(Regularization)等,學習這些沒有太好的辦法,只能是看書或者是看一些技術部落格。

演算法實現即用程式碼實現演算法,在實際中我們通常會呼叫函式庫,有時候可能需要自己編寫一些損失函式、篩選規則等。不過一般情況下,掌握Scikit-Learn裡邊的內容基本已經夠用;需要用到深度學習的同學則要針對性的學習一下TensorFlow、Keras、PyTorch這些,個人推薦從Keras學起,之後TensorFlow和PyTorch二選一深入學習。學習方法方面,由於這些函式庫均是開源專案,更新較快,所以不是特別推薦看書,最好的方法就是去看官方網站的介紹。但是對於英文不太好的同學,可能看官網也不是太現實,那麼可以挑一些近一年內出版的書籍,如果是2017年以前出版的則基本可以不予考慮。

常用的機器學習演算法有:

  • 邏輯迴歸(Logistic Regression)
  • SVM(Support Vector Machine)
  • 決策樹(Decision Tree)
  • 隨機森林(Random Forest)
  • XGBoost
  • 樸素貝葉斯(Naive Bayes)
  • 神經網路(Neural Network)
  • KMeans

資料清洗及處理

根據公司業務設定及人員架構的不同,機器學習工程師或是資料探勘工程師往往需要自己清洗及處理資料,這裡常用的工具有SQL和Pandas函式庫。SQL通常運用於從資料庫中直接提取資料,或是整理體量較大資料(往往會搭配Spark使用);而Pandas則可以很方便的利用其DataFrame的結構來整理資料。

在處理資料時,我們通常需要進行缺失值處理、字元資料數字化處理、特徵預篩選處理、歸一化及標準化處理等操作。一份高質量的資料可以說是建立高質量機器學習模型的基礎。

特徵工程

特徵工程是一個比較難定義的部分,它包含的內容實在太多。通常來講,特徵工程包括了特徵提取及特徵選擇,同時也包含了特徵組合。

特徵提取通常我們會通過PCA,LDA等方式,一般用於減少特徵的數量,降低資料的維度,由於經過特徵提取之後,特徵不再具有原本的意義,因此當需要對模型結果進行解釋時,不能使用該方法;

特徵選擇通常指通過相應演算法,一般指隨機森林的特徵重要性排序和特徵聚類篩選等,減少建模需要使用的特徵數量,降低資料的維度。該方法選擇出的特徵仍然具有原特徵的意義,因此模型結果仍然具有可解釋性;

特徵組合指通過相應的變換,在現有特徵的基礎上建立新的特徵。具體的操作往往要通過資料的視覺化來實現,但更重要的應該是對背景知識的瞭解。如在處理保險行業的資料時,如果對保險業務沒有深入的瞭解,則很難建立出有效的特徵。因此在我看來,特徵組合固然有一部分的技巧,但更重要的是對相關領域的瞭解程度。以我個人的經驗來說,這方面往往需要與業務部門的同事配合,或者與客戶進行深層次的溝通,對業務的瞭解多一分,我們建立出有效特徵的可能性也就多一分。

相關文章