1. 程式人生 > >機器學習和資料探勘(主流演算法介紹)

機器學習和資料探勘(主流演算法介紹)

對機器學習和資料探勘的科學定義是這樣的:

機器學習(Machine Learning, ML)是一門多領域交叉學科,涉及概率論、統計學、逼近論凸分析演算法複雜度理論等多門學科。專門研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的效能。它是人工智慧的核心,是使計算機具有智慧的根本途徑,其應用遍及人工智慧的各個領域,它主要使用歸納、綜合而不是演繹。

資料探勘(英語:Data mining),又譯為資料探勘、資料採礦。它是資料庫知識發現(英語:Knowledge-Discovery in Databases,簡稱:KDD)中的一個步驟。資料探勘一般是指從大量的資料中通過演算法搜尋隱藏於其中資訊的過程。資料探勘通常與電腦科學有關,並通過統計、線上分析處理、情報檢索、機器學習、專家系統(依靠過去的經驗法則)和模式識別等諸多方法來實現上述目標。 

簡單地說就是,機器學習和資料庫是資料探勘的基石。

機器學習致力於研究如何通過計算的手段,利用經驗來改善自身的效能,而這裡的經驗指的就是資料。我們研究出了一系列在理論層面上可行的演算法,即(learning algorithm),然後將資料集應用到這些演算法上,產生學習模型,這個學習模型可以應用到新的資料集上,對新資料集的一些情況進行預測和判斷。(典型例子:信用卡償還的違約與否。)

在這個過程中會遇到很多問題:

1.怎麼獲取資料集?

2.怎麼對獲得的資料進行清洗和轉換?

3.怎麼進行特徵選擇,刪除哪些冗餘特徵(用到相應的領域知識),怎麼進行特徵提取(用到多元統計分析的知識(PCA主成分分析,因子分析)),也就是資料的降維處理?

4.怎麼對資料型別進行處理(連續資料離散化,連續資料與分類資料二元化),以適用於相應的演算法?

5.選擇哪些演算法合適(目的是進行預測還是聚類;預測的是離散變數(分類)還是連續變數(迴歸);用於預測的變數是連續的還是離散的,又或者是二元變數)?

6.用演算法訓練出來的模型好用嗎,怎麼評估(模型的泛華能力如何)?

7.既然演算法需要評估,就需要資料集,可以用用來訓練模型的的資料集評估模型嗎?訓練集和檢驗集大小怎麼分配?用作訓練集的資料還可以用來檢驗嗎?(我們獲得的資料集只是整個樣本空間的取樣,通常我們會假設這些資料點獨立同分布,資料集越大,得到的結果趨近於真實世界的結果,所以我們希望訓練樣本可以儘可能大,但是留出的檢驗集又不能太小,不然估計的泛化會誤差不準確。)

上面遇到的每一個問題都在學習過程中得到了一定程度的解決,我接下來也會將我學習到的東西跟大家一起分享。

根據訓練資料是否同有標記資訊,學習任務可大致分為兩類:監督學習和無監督學習。根據監督學習可用於一個特定的資料集(訓練集)具有某一屬性(標籤),但是其他資料沒有標籤或者需要預測標籤的情況。無監督學習可用於給定的沒有標籤的資料集(資料不是預分配好的),目的就是要找出資料間的潛在關係。

下面分享一些比較主流的演算法:

監督學習

1.決策樹(Decision Trees)

決策樹是一個決策支援工具,它使用樹形圖或者決策模型以及可能性序列,包括偶然事件的結果、資源成本和效用。下圖是其基本原理:

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/0.jpg

從業務決策的角度來看,決策樹是人們必須瞭解的最少的是/否問題,這樣才能評估大多數時候做出正確決策的概率。作為一種方法,它允許你以結構化和系統化的方式來解決問題,從而得出合乎邏輯的結論。

2.樸素貝葉斯分類(Naive Bayesian classification)

樸素貝葉斯分類器是一類簡單的概率分類器,它基於貝葉斯定理和特徵間的強大的(樸素的)獨立假設。圖中是貝葉斯公式,其中P(A|B)是後驗概率,P(B|A)是似然,P(A)是類先驗概率,P(B)是預測先驗概率。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/1.jpg

一些應用例子:

  • 判斷垃圾郵件
  • 對新聞的類別進行分類,比如科技、政治、運動
  • 判斷文字表達的感情是積極的還是消極的
  • 人臉識別

3.最小二乘法(Ordinary Least Squares Regression)

如果你懂統計學的話,你可能以前聽說過線性迴歸。最小二乘法是一種計算線性迴歸的方法。你可以將線性迴歸看做通過一組點來擬合一條直線。實現這個有很多種方法,“最小二乘法”就像這樣:你可以畫一條直線,然後對於每一個數據點,計算每個點到直線的垂直距離,然後把它們加起來,那麼最後得到的擬合直線就是距離和儘可能小的直線。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/2.jpg

線性指的是你用來擬合數據的模型,而最小二乘法指的是你最小化的誤差度量。

4.邏輯迴歸(Logistic Regression)

邏輯迴歸是一個強大的統計學方法,它可以用一個或多個解釋變數來表示一個二項式結果。它通過使用邏輯函式來估計概率,從而衡量類別依賴變數和一個或多個獨立變數之間的關係,後者服從累計邏輯分佈。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/3.jpg

總的來說,邏輯迴歸可以用於以下幾個真實應用場景:

  • 信用評分
  • 計算營銷活動的成功率
  • 預測某個產品的收入
  • 特定的某一天是否會發生地震

5.支援向量機(Support Vector Machine,SVM)

SVM是二進位制分類演算法。給定N維座標下兩種型別的點,SVM生成(N-1)維的超平面來將這些點分成兩組。假設你在平面上有兩種型別的可以線性分離的點,SVM將找到一條直線,將這些點分成兩種型別,並且這條直線儘可能遠離所有這些點。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/4.jpg

從規模上看,使用SVM(經過適當的修改)解決的一些最大的問題包括顯示廣告、人類剪下位點識別(human splice site recognition)、基於影象的性別檢測,大規模影象分類……

6.整合方法(Ensemble methods)

整合方法是學習演算法,它通過構建一組分類器,然後通過它們的預測結果進行加權投票來對新的資料點進行分類。原始的整合方法是貝葉斯平均,但是最近的演算法包括糾錯輸出編碼、Bagging和Boosting。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/5.jpg

那麼整合方法如何工作?並且為什麼它們要優於單個模型?

  • 它們平均了單個模型的偏差:如果你將民主黨的民意調查和共和黨的民意調查在一起平均化,那麼你將得到一個均衡的結果,不偏向任何一方。
  • 它們減少了方差:一組模型的總體意見比其中任何一個模型的單一意見更加統一。在金融領域,這就是所謂的多元化,有許多股票的組合比一個單獨的股票的不確定性更少,這也為什麼你的模型在資料多的情況下會更好的原因。
  • 它們不太可能過擬合:如果你有單個的模型沒有過擬合,那麼把這些模型的預測簡單結合起來(平均、加權平均、邏輯迴歸),那麼最後得到的模型也不會過擬合。

無監督學習

7.聚類演算法(Clustering Algorithms)

聚類是將一系列物件分組的任務,目標是使相同組(叢集)中的物件之間比其他組的物件更相似。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/6.jpg

每一種聚類演算法都不相同,下面是一些例子:

  • 基於質心的演算法
  • 基於連線的演算法
  • 基於密度的演算法
  • 概率
  • 降維
  • 神經網路/深度學習

8.主成分分析(Principal Component Analysis,PCA)

PCA是一個統計學過程,它通過使用正交變換將一組可能存在相關性的變數的觀測值轉換為一組線性不相關的變數的值,轉換後的變數就是所謂的主分量。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/7.jpg

PCA的一些應用包括壓縮、簡化資料便於學習、視覺化等。請注意,領域知識在選擇是否繼續使用PCA時非常重要。 資料嘈雜的情況(PCA的所有成分具有很高的方差)並不適用。

9.奇異值分解(Singular Value Decomposition,SVD)

線上性代數中,SVD是複雜矩陣的因式分解。對於給定的m * n矩陣M,存在分解使得M=UΣV,其中U和V是酉矩陣,Σ是對角矩陣。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/8.jpg

實際上,PCA是SVD的一個簡單應用。在計算機視覺中,第一個人臉識別演算法使用PCA和SVD來將面部表示為“特徵面”的線性組合,進行降維,然後通過簡單的方法將面部匹配到身份,雖然現代方法更復雜,但很多方面仍然依賴於類似的技術。

10.獨立成分分析(Independent Component Analysis,ICA)

ICA是一種統計技術,主要用於揭示隨機變數、測量值或訊號集中的隱藏因素。ICA對觀測到的多變數資料定義了一個生成模型,這通常是作為樣本的一個大的資料庫。在模型中,假設資料變數由一些未知的潛在變數線性混合,混合方式也是未知的。潛在變數被假定為非高斯分佈並且相互獨立,它們被稱為觀測資料的獨立分量。

http://cdn1.infoqstatic.com/statics_s1_20170718-0237/resource/articles/10-algorithms-machine-learning-engineers-need-to-know/zh/resources/9.jpg

ICA與PCA有關,但是當這些經典方法完全失效時,它是一種更強大的技術,能夠找出源的潛在因素。 其應用包括數字影象、文件資料庫、經濟指標和心理測量。