歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 機器學習入門

機器學習入門

日期:2017/3/1 9:10:56   编辑:Linux編程

概述

一般提到機器學習,總會讓人想到高深的算法,復雜運算,仿佛是只有科學家才能玩的東西,對普通人來說可望不可及。 其實,隨著PC性能的飛速發展,以及大數據技術的發展,機器學習也可以像其他IT技術一樣,走進普通程序員的生活。

本文是機器學習的入門介紹,它的目的不是介紹機器學習的原理,也不會介紹機器學習的各個算法是如何推導的。 本文主要是介紹有哪些流行的機器學習算法,各個算法適用於哪些場景,各有什麼優缺點等等。

本文目的是為了讓讀者對機器學習有個整體的印象。當你想在自己的項目中融入些機器學習的時候,可以知道如何去選擇已有的各種機器學習技術。

機器學習的方式

根據具體的項目情況來決定采用哪種學習方式,一般有以下3種學習方式:

監督學習

是指有求知欲的學生從老師那裡獲取知識、信息,老師提供對錯指示、告知最終答案的學習過程。 這一類機器學習的典型任務包括:預測數值型數據的回歸、預測分類標簽的分類、預測順序的排序等。

無監督學習

是指在沒有老師的情況下,學生自學的過程。 無監督學習在人造衛星故障診斷、視頻分析、社交網站解析和聲音信號解析等方面大顯身手。

強化學習

與監督學習類似,也以使計算機獲得對沒有學習過的問題做出正確解答的泛化能力為目標,但是在學習過程中,不設置老師提示對錯、告知最終答案的環節。 在機器人的自動控制、計算機游戲中的人工智能、市場戰略的最優化等方面均有廣泛應用。

機器學習的算法分類

所謂算法,其實就是根據 輸入 計算出 輸出 的過程。 算法的細節很多,但是大致有如下的分類:

回歸

有輸入和輸出樣本,驗證算法通過輸入樣本後得到的 輸出輸出樣本 中的值有多少偏差

分類

只有輸入樣本,但是不知道輸出樣本。根據輸入樣本將 輸出結果 進行分類。

異常檢測

只有輸入樣本,一般采用密度估計算法,將偏離密度中心的一定程度的 輸出結果 定為異常。

聚類

只有輸入樣本,根據輸入樣本將 輸出結果 按照相似度進行分類。

降維

只有輸入樣本,從輸入樣本中提取關鍵信息,簡化輸入樣本後在進行計算得到 輸出結果 降維時注意,輸入樣本的數據分布性質,數據間的近鄰關系不發生變化。

具體的學習算法介紹

各個算法之間不是完全孤立的,在實際情況中,往往是根據具體的數據,交叉采用一種過幾種算法來達到較好的學習效果。

所有的機器學習算法都是為了求解以下算式中的函數 f

y = f(x)

其中 x 是輸入樣本,不一定是一個簡單的值,有可能是個向量之類的數據, y 是輸出樣本,和 x 一樣,也不一定就是簡單的值, f 是學習出來的 處理函數,學會了f之後,遇到新的x,機器就會自己計算出y,也就是機器可以自動處理未知情況了。

最小二乘學習法

這是最基礎的機器學習方法,其他很多算法都是基於最小二乘學習法的,首先了解它可以作為了解其他算法的基礎。

在大規模數據中,直接用最小二乘法不僅耗時長,而且會消耗過多資源,導致計算資源不足。

帶約束的最小二乘學習法

帶約束的原因是直接使用最小二乘學習法會導致求解的函數過度復雜,特別是樣本數據中含有錯誤數據的時候,學習出的函數f會更復雜。

加上約束條件,就是函數 f 在一定偏差范圍內滿足 y=f(x) 即可。 相比於不帶約束條件的 f,精度上有所下降,但是復雜度也下降了,計算速度更快。

稀疏學習

稀疏學習也屬於帶約束的學習方法,帶約束的最小二乘學習法解決了最小二乘學習法的過度擬合問題。 稀疏學習則是為了解決帶約束的最小二乘學習法的學習速度問題,

帶約束的最小二乘學習法在參數比較多的情況下,計算速度會很慢。 如果將一部分或者大部分參數設置為0,那麼計算速度則會大大提高,所以稀疏學習的關鍵在於: 通過迭代的方式找出那些可以設置0的參數,使得這些參數設置為0之後,得到的函數 f 和不設置為0時的函數 f 差別不大。

魯棒學習

魯棒性是指 在統計學領域和機器學習領域,對異常值也能保持穩定,可靠的性質。

機器學習的魯棒性可以保證在大量數據中的異常值出現時,函數 f 的曲線不會偏離的太離譜。

增加魯棒性的方法如下:

最小絕對值偏差學習

最小絕對值偏差學習比最小二乘學習受異常值的影響要小,魯棒性比較高。 但是高的魯棒性也會導致訓練樣本和學習模型不十分吻合。

Huber損失最小化學習

Huber損失最小化學習在 魯棒性 和 學習模型的有效性之間取得了很好的平衡。

圖基損失最小化學習

在嚴峻狀況下的機器學習,采用圖基損失最小化學習是比較好的選擇。

l1約束的Huber損失最小化學習

這是稀疏學習中的魯棒學習法。

基於最小二乘法的分類

分類算法主要用在模式識別。 所謂 模式識別 就是指將樣本分類到不同的類別中的算法。

最簡單的分類算法是 0/1 損失算法。

支持向量機分類

0/1 損失算法在真實情況下使用時還是有些不自然。 所以才有了 支持向量機分類 這種更接近真實情況的模式識別算法。

支持向量機分類 算法支持線性,非線性的方式對樣本進行分類,同時,也可以像魯棒學習進行擴展。

集成分類

集成學習是指把性能較低的多種弱學習器,通過適當的組合而形成高性能的強學習器的方法。

集成學習方法主要有2種:

  1. Bagging 學習方法 (BootstrapAggregation) 對多個弱學習器獨立進行學習,對各個學習結果求取平均值,得到高性能的學習器。
  2. Boosting 學習方法 對多個弱學習器依次學習,根據學習結果, 對分類正確率高的學習器,加大其權重,分類錯誤率高的學習器,則減少其權重。 最後將多個弱學習器按照權重相加,得到高性能的學習器。

概率分類法

概率分類法也是模式識別的一種。 和之前介紹的模式算法的主要不同點在於:它是基於 概率 來識別模式。 之前的模式識別算法是根據樣本計算出一個模式識別的函數,然後根據此函數來識別新的內容。

概率分類法有2個優勢:

  1. 不用對所有樣本強行分類 概率分類法顧名思義,是按照概率來分類的,不像之前的模式識別算法那麼嚴格(不管結果正確性如何,一個樣本肯定能計算出一個類別) 概率分類法可以算出一個樣本對應一個模式的概率,如果概率很低,可以判斷出可能樣本本身有錯誤,甚至可以拋棄樣本。
  2. 對多類別的分類問題通常會有較好的結果

概率分類算法主要有2種: Logistic回歸最小二乘概率分類器 對於這2種算法,一般處理方式是:當訓練樣本數較多的時候,采用 最小二乘概率分類器 ;當訓練樣本數較少的時候,采用 Logistic回歸

序列數據的分類

序列數據最典型的就是字符串,對於字符串的分析,雖然也可以逐個逐個字符的分析,但是這樣分析不僅正確性不高,性能也不好。 比如對於一句話來說,如果不從整體上來看,只是一個字一個字的進行模式識別,很難識別出正確的含義。

序列數據的分類算法即通過靈活應用字符串的前後關系,以在合理的計算時間范圍內實現對字符串的學習的算法。 一般稱為 條件隨機場 (Conditional Random Field, CRF)

它在概率分類法中加入了 關聯預測 所謂 關聯預測 ,就是利用序列數據的規律,比如出現某個字符之後,還會出現的什麼字符;某個字符出現後,就不會立刻再出現等等。 利用這些特性,這樣可以加快識別的速度。

異常檢測

異常檢測是指在輸入樣本中檢測出異常值的方法。 之前介紹的魯棒性的學習法,也能夠分辨異常值,但是在異常值比較多的樣本中,如果能在學習前將異常值去除,學習效果會更好。

下面介紹幾種異常學習算法:

局部異常因子法

局部異常因子是遵循預先制定的規則(偏離大部分正常值的數據被認為是異常數據),尋找異常值的無監督異常檢測算法。 這裡的關鍵是如何制定合適的規則,如果制定的規則和用戶的預期不一致,那麼檢測的異常值也不對, 由於是無監督學習,沒有任何關於異常值的信息,所以難點在於制定規則。

支持向量機異常檢測器

支持向量機異常檢測器會算出包含幾乎所有樣本的 超球 ,將沒有包含在 超球 內的樣本視為異常值。

同樣,由於是無監督學習,尋找 超球 的參數(中心,半徑)就變的非常困難。

基於密度比的異常檢測

這是一種利用概率來檢測異常的方式。 異常值各式各樣,對其模型化一般比較困難,而正常值則相對比較穩定, 因此,通過將非正常數據看成異常數據的方法,有望實現高精度的異常檢測。

基於密度比的異常檢測法就是這種異常檢測算法。

無監督降維

為什麼需要降維呢?原因很簡單,高維數據處理困難,也就是計算量大,學習時間長,學習過程復雜。 降維的目的不僅僅是簡化學習過程,還要在降維後盡可能保持其原本包含的所有信息。

線性降維

線性降維是比較簡單的降維方法,主要有2種:

  1. 主成分分析法:是盡可能地忠實再現原始數據的所有信息的降維方法
  2. 局部保持投影法:能夠保護數據中的簇構造

非線性降維

非線性降維是依賴線性降維方法的,也有2種:

  1. 核函數主成分分析法:將輸入樣本用非線性函數進行變換,在變換後的特征空間中進行主成分分析
  2. 拉普拉斯特征映射:將核函數方法應用在局部保持投影的非線性降維方法

聚類

所謂聚類,就是將輸入樣本基於其相似度進行分類的方法。 聚類也分為 線性聚類 和 非線性聚類

線性聚類

K均值聚類是最基礎的一種聚類算法,就是將看起來最集中,最不分散的簇標簽分配到輸入樣本種。

非線性聚類

非線性聚類有2種:

  1. 核K均值聚類:最終的結果強烈的依賴初始值的選取,實際應用中要想得到理想的結果並非易事
  2. 譜聚類:使用降維方法來解決 核K均值聚類的上述問題

通過選用平方損失互信息的估計值達到最大值時所對應的譜聚類的相似度參數,即可得到最優的聚類結果。

在線學習

當輸入樣本經常更新,追加的時候,就非常適合使用對樣本進行逐次學習的在線學習算法。

在線學習算法對於有限內存的利用,管理來說非常有效,是大數據時代的一種優秀的機器學習算法。

在線學習算法有:

  1. 被動攻擊學習
  2. 適應正則化學習:與被動攻擊學習相比,能更好地處理異常值,所以魯棒性更好。

半監督學習

所謂半監督學習是指:除了輸入輸出成對出現的訓練樣本之外,在學習過程中,還會追加輸入樣本,進而提高學習精度的學習方法。

使用較多的是基於流形的半監督學習方法。 流形是數學用語,一般指局部具有歐幾裡得空間性質的圖形,在半監督學習裡指的是輸入空間的局部范圍。

基於流形的半監督學習設定了這樣一種情況,即輸入數據只出現在某個流形上,輸出則在該流形平滑地變化。

監督降維

這裡介紹的 監督降維 其實也就是有輸出樣本的降維。

監督降維方法有:

  1. Fisher判別法: 尋找能夠使相同類別的樣本盡量靠近,不同類別的樣本盡量遠離的矩陣T的方法
  2. 充分降維:主要著眼於輸入和輸出的依賴關系

遷移學習

遷移學習是指,利用過去學習得到的經驗,知識,來提高當前以及將來進行的學習任務的求解進度的學習方法。

遷移學習算法有:

  1. 協變量移位下的遷移學習 統計學裡,協變量就是輸入變量。協變量移位是指輸入輸出關系不變,協變量的概率分布發生變化的情況。

  2. 類別平衡變化下的遷移學習 類別平衡變化是指各個類別的輸入樣本的概率分布不變,但是各個類別之間的樣本數的平衡發生變化的情況。

多任務學習

多任務學習是指 靈活應用多個學習任務之間的相似性的同時,對所有任務同時進行學習的方法。

多任務學習看似和遷移學習有些類似,實則有很大區別,遷移學習是指將一個學習任務的信息單方面的提供給你一個學習任務使用, 而多任務學習則是在多個學習任務之間實現信息的共享,轉移的一種學習方法。

多任務學習算法有:

  1. 最小二乘回歸的多任務學習
  2. 最小二乘概率分類器的多任務學習
  3. 多次維輸出函數的學習

總結

簡單來說,機器學習的核心就是尋找 y=f(x) 中的f,找到了這個f,我們就可讓機器來正確的,自動的,處理以後遇到的新 x。 這個看似簡單的任務為什麼會產生的如此之多各式各樣的復雜算法呢? 原因就是現實情況中 x 和 y 的情況太復雜。 比如 x 數據不全,x 中有錯誤數據,x 數據量極其龐大,x 數據極其復雜等等,y 的情況和 x 類似,在無監督學習下,甚至沒有 y 的數據。

所以如果你想在自己的項目中引入機器學習,讓項目更加的智能,首先需要關注的就是自己的項目中的x 和 y。 x 表示輸入樣本,y 表示輸出樣本。

Copyright © Linux教程網 All Rights Reserved