一文讀懂機器學習算法的基本概念和適用場景
【導讀】大家好,我是泳魚。一個樂於探索和分享 AI 知識的碼農!
首先,引用一句英國統計學家 George E. P. Box 的名言:All models are wrong, but some are useful. 沒有哪一種算法能夠適用所有情況,只有針對某一種問題更有用的算法。
也就是說,機器學習算法不會要求一個問題被 100% 求解,取而代之的是把問題轉化爲最優化的問題,用不同的算法優化問題,從而比較得到儘量好的結果。因此對於數據科學家來說,理解算法顯得格外重要,理解不同算法的思想可以幫助數據科學家更從容地面對不同的應用場景。
本文列出了常用的機器學習算法的基本概念、主要特點和適用場景,希望可以在大家選擇合適的機器學習算法解決實際問題時起到一點參考作用。
本文主要提及的機器學習算法包括:
·K 近鄰(KNN)算法
· 樸素貝葉斯算法
· 決策樹算法
·SVM 算法
·adaboost 算法
·EM 算法 (期望最大化算法)
下面我們將具體展開介紹:
NO.1 KNN 算法
KNN 算法的基本介紹:假若一個特徵空間中大多數的樣本屬於某一個類別, 則在這個特徵空間中,k 個最相似的樣本也屬於這個類別。
該算法由兩個步驟組成:(1) 對於一個給定的搜索訓練集按一定距離度量, 來找到一個 的值。(2) 在這個 KNN 當中, 根據大多數分爲一致的類來進行分類。
用以下這幅圖可以很好的解釋 kNN 算法:
不同形狀的點,爲不同標籤的點。其中綠色點爲未知標籤的數據點。現在要對綠色點進行預測。由圖不難得出:
如果 k=3,那麼離綠色點最近的有 2 個紅色三角形和 1 個藍色的正方形,這 3 個點投票,於是綠色的這個待分類點屬於紅色的三角形。
如果 k=5,那麼離綠色點最近的有 2 個紅色三角形和 3 個藍色的正方形,這 5 個點投票,於是綠色的這個待分類點屬於藍色的正方形。
K 近鄰(KNN)算法優點:
-
算法原理簡單,容易理解,也較容易實現。
-
不需要進行訓練,只需要保存訓練樣本和標籤。
-
不易受小錯誤概率的影響。經理論證明,最近鄰的漸進錯誤率最壞時不超過兩倍的貝葉斯錯誤率,最好時接近或達到貝葉斯錯誤率。
K 近鄰(KNN)算法缺點:
-
K 的選擇不固定。
-
預測結果容易受到噪聲數據的影響。
-
當樣本不平衡時,新樣本的類別偏向訓練樣本中數量佔優的類別,容易導致預測錯誤。
-
當數據量較大時,具有較高的計算複雜度和內存消耗,因爲對每一個待分類的文本,都要計算它到全體已知樣本的距離,才能求得它的 K 個最近鄰。
適用場景及主要應用領域:
由於 KNN 方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN 方法較其他方法更爲適合。在實際應用當中,KNN 算法在人臉識別、文字識別、醫學圖像處理等領域可以取得良好的分類效果。
K 近鄰(KNN)算法需要注意的問題:
-
數據特徵之間量綱不統一時,需要對數據進行歸一化處理,否則會出現大數喫小數的問題;
-
數據之間的距離計算通常採用歐式距離;
-
KNN 算法中 K 值的選取會對結果產生較大的影響,一般 k 值要小於訓練樣本數據的平方根;
-
通常採用交叉驗證法來選擇最優的 K 值。
NO.2 樸素貝葉斯算法
樸素貝葉斯分類是一種十分簡單的分類算法,即對於給出的待分類項,求解在此項出現的條件下各個類別出現的概率,哪個最大,就認爲此待分類項屬於哪個類別。
以判定外國友人爲例做一個形象的比喻。
若我們走在街上看到一個黑皮膚的外國友人,讓你來猜這位外國友人來自哪裏。十有八九你會猜是從非洲來的,因爲黑皮膚人種中非洲人的佔比最多,雖然黑皮膚的外國人也有可能是美洲人或者是亞洲人。但是在沒有其它可用信息幫助我們判斷的情況下,我們會選擇可能出現的概率最高的類別,這就是樸素貝葉斯的基本思想。
下圖爲樸素貝葉斯算法的流程:
樸素貝葉斯算法注意點:
-
當特徵屬性值的值類型不是離散值而是連續值的時候,需要通過高斯分佈做概率的計算;
-
爲了避免統計概率中出現概率爲 0 的情況,可以引入 Laplace 校準,它的思想非常簡單,就是對沒類別下所有劃分的計數加 1。
適用場景及主要應用領域:
-
樸素貝葉斯算法對待預測樣本進行預測,過程簡單速度快;
-
對於多分類問題也同樣很有效,複雜度也不會有大程度上升;
-
在分佈獨立這個假設成立的情況下,貝葉斯分類器效果奇好,會略勝於邏輯迴歸,同時需要的樣本量也更少一點。
-
對於類別類的輸入特徵變量,效果非常好。對於數值型變量特徵,我們是默認它符合正態分佈的。
主要應用領域
-
文本分類 / 垃圾文本過濾 / 情感判別:多分類較爲簡單,同時在文本數據中,分佈獨立這個假設基本是成立的。垃圾文本過濾 (比如垃圾郵件識別) 和情感分析 (微博上的褒貶情緒) 用樸素貝葉斯也通常能取得很好的效果。
-
多分類實時預測:對於文本相關的多分類實時預測,樸素貝葉斯算法被廣泛應用,簡單又高效。
-
推薦系統:樸素貝葉斯和協同過濾 (Collaborative Filtering) 是一對好搭檔,協同過濾是強相關性,但是泛化能力略弱,樸素貝葉斯和協同過濾一起,能增強推薦的覆蓋度和效果。
NO.3 決策樹算法
決策樹是一個樹結構(可以是二叉樹或非二叉樹),其每個非葉節點表示一個特徵屬性上的測試,每個分支代表這個特徵屬性在某個值域上的輸出,而每個葉節點存放一個輸出類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別作爲決策結果。
決策樹學習通常包含這幾個方面:特徵選擇、決策樹生成、決策樹剪枝、缺失值 / 異常值處理、決策樹集成學習。
決策樹算法注意點:
-
決策樹算法非常容易過擬合,導致泛化能力不強。可以通過設置節點最少樣本數量和限制決策樹深度來改進。
-
決策樹會因爲樣本發生一點點的改動,就會導致樹結構的劇烈改變。這個可以通過集成學習之類的方法解決。
-
尋找最優的決策樹是一個 NP 難的問題,一般通過啓發式方法,容易陷入局部最優。可以通過集成學習之類的方法來改善。
-
有些比較複雜的關係,決策樹很難學習,比如異或,一般這種關係可以換神經網絡分類方法來解決。
-
如果某些特徵的樣本比例過大,生成決策樹容易偏向於這些特徵。這個可以通過調節樣本權重來改善(特別注意,在模型訓練過程中,某些特徵的權重排序很大,需要手動調節樣本的權重來影響特徵的權重,主要有樣本的均衡,樣本的過濾,樣本權重的調節)。
適用場景及主要應用領域:
相比其他算法,決策樹有一個非常明顯的優勢,就是可以很直觀地進行可視化,分類規則好理解,讓非專業的人也容易看明白,既可以解決分類問題(對應的目標值是類別型的數據),也能解決迴歸問題(輸出結果也可以是連續的數值),目前廣泛應用於語音識別、人臉識別、醫療診斷、模式識別等領域。
NO.4 SVM 算法
支持向量機,support vector machine,簡稱 SVM,是經典機器學習的一個重要分類算法,用於完成數據分類。svm 算法通過找出一個決策超平面(二維空間指直線,三維空間指平面,超過三維的就是超平面了),將已有訓練數據集劃分開,然後對於新數據,根據數據是位於超平面的哪一側完成判斷,得到新數據的分類。
因此基礎的 svm 算法是一個二分類算法,至於多分類任務,多次使用 svm 即可解決。
下圖是一組支持向量機實現分類的示例。
SVM 算法注意點:
-
SVM 可以執行線性非線性的分類、迴歸、異常值檢測。適用於中小型複雜數據集;
-
SVM 對特徵縮放很敏感,可以在輸入之前採用 StandardScaler 處理;
-
如果 SVM 模型過擬合,可以通過降低 C 來進行正則化;
-
LinearSVC 灰度偏執正則化,需要減去平均值,StandardScaler 會自動處理;
-
處理非線性數據集的方法之一是添加更多的特徵,比如多項式特徵。
適用場景及主要應用領域:
支持向量機 (Support Vector Machine) 是 Cortes 和 Vapnik 於 1995 年首先提出的,它在解決小樣本、非線性及高維模式識別中表現出許多特有的優勢,但它具有以下缺點:
-
無法應對大規模訓練樣本;
-
難以解決多分類問題;
-
對參數及核函數選擇非常敏感。
支持向量機的常見適用範圍如下:
1. 網絡完全
傳統的網絡入侵檢測方法大多采用密碼簽名的方法。在進行入侵檢測方面,機器學習技術可以幫助我們進行網絡流量的分析,在這裏支持向量機具有檢測速度快,分類精度高等特點,可以幫助安全人員識別不同類別的網絡攻擊,例如掃描和欺詐網絡。
2. 人臉識別
SVM 可以將圖像部分分爲人臉和非人臉。它包含 nxn 像素的訓練數據,具有兩類人臉(+1)和非人臉(-1),然後從每個像素中提取特徵作爲人臉和非人臉。根據像素亮度在人臉周圍創建邊界,並使用相同的過程對每個圖像進行分類。
3. 文本和超文本分類
SVM 可以實現對兩種類型的模型進行文本和超文本分類,它主要通過使用訓練數據將文檔分類爲不同的類別,如新聞文章、電子郵件和網頁。
對於每個文檔,計算一個分數並將其與預定義的閾值進行比較。當文檔的分數超過閾值時,則將文檔分類爲確定的類別。如果它不超過閾值,則將其視爲一般文檔。
通過計算每個文檔的分數並將其與學習的閾值進行比較來對新實例進行分類。
4. 蛋白質摺疊和遠程同源檢測
蛋白質遠程同源性檢測是計算生物學中的一個關鍵問題。SVM 算法是遠程同源檢測最有效的方法之一。這些方法的性能取決於蛋白質序列的建模方式。
NO.5 adaboost 算法
在瞭解 adaboost 算法之前,我們先來重溫一下三個臭皮匠頂個諸葛亮的故事:諸葛亮帶兵過江,江水湍急,而且裏面多是突出水面的礁石。普通竹筏和船隻很難過去, 打頭陣的船隻都被水沖走觸礁沉沒,諸葛亮一籌莫展,也想不出好辦法,入夜來了 3 個做牛皮活的皮匠獻策。告訴諸葛亮買牛,然後把牛從肚皮下整張剝下來,封好切口後讓士兵往裏吹氣,做成牛皮筏子,這樣的筏子不怕撞,諸葛亮按此方法嘗試並順利過江。
Adaboost 就是這樣一種 “三個臭皮匠頂個諸葛亮” 的迭代算法,其核心思想是針對同一個訓練集訓練不同的分類器(弱分類器),然後把這些弱分類器集合起來,構成一個更強的最終分類器(強分類器)。
adaboost 算法注意點:
-
AdaBoost 迭代次數也就是弱分類器數目不太好設定,可以使用交叉驗證來進行確定;
-
數據不平衡導致分類精度下降;
-
訓練比較耗時,每次重新選擇當前分類器最好切分點;
-
對異常樣本敏感,異常樣本在迭代中可能會獲得較高的權重,影響最終的強學習器的預測準確性。
適用場景及主要應用領域:
在機器學習的算法中,Adaboost 算法是一種比較重要且通用的用於特徵分類的算法,在圖像檢索和人臉表情識別等問題中都有普遍應用。從現狀看,人們對 Adaboost 算法的研究及應用主要集中用於分類問題上,另外在某些迴歸問題上也有所涉及,比如兩類問題、多類單標籤問題、多類多標籤問題和迴歸問題。
Adaboost 在機器學習領域中十分重要,它是一種提高任意給定學習算法準確度的方法。也就是說,Adaboost 算法爲其他算法提供了一種框架結構,而其他算法只在其中作爲子分類器,因此 Adaboost 算法可以運用在許多方面的實踐上。
通過 Adaboost 算法:
-
可以實現手寫體字符識別,運用到了許多輸入設備上,如流行的觸屏手機上的手寫輸入、筆記本電腦的手寫輸入、掃描儀掃面文字轉化爲電子文檔。
-
圖像識別,如人臉識別、google 上的圖片檢索功能 (很方便地找到想要的清晰度更高的圖片)。我們實現了語音識別,現在的 WIN7 上都有了一個語音識別的功能,我們能夠讓計算機知道我們說了什麼話, 並通過機器自動學習提高語音識別的精度,聲音輸入和聲控很可能在未來普及。
-
Adaboost 算法還能做文本分類和醫療診斷等等。
NO.6 EM 算法
最大期望算法(Expectation-maximization algorithm,又譯爲期望最大化算法),是在概率模型中尋找參數最大似然估計或者最大後驗估計的算法,其中概率模型依賴於無法觀測的隱性變量。
以打獵爲例做一個形象的比喻:
比如你一位同學和一位獵人一起外出打獵,一隻野兔從前方竄過。只聽一聲槍響,野兔應聲到下,如果要你推測,這一發命中的子彈是誰打的?你就會想,只發一槍便打中,由於獵人命中的概率一般大於你那位同學命中的概率,從而推斷出這一槍應該是獵人射中的。
這個例子所作的推斷就體現了最大似然法的基本思想。
多數情況下我們是根據已知條件來推算結果,而最大似然估計是已經知道了結果,然後尋求使該結果出現的可能性最大的條件,以此作爲估計值。
EM 算法注意點:
-
對初始化數據敏感。
-
EM 算法計算複雜,收斂較慢,不適於大規模數據集和高維數據。
-
當所要優化的函數不是凸函數時,EM 算法容易給出局部最優解,而不是全局最優解。
適用場景及主要應用領域:
1. K-Means 聚類
K-Means 是 EM 算法的一個特列。在 K-Means 聚類時,每個聚類簇的質心是隱含數據。我們會假設 K 個初始化質心,即 EM 算法的 E 步;然後計算得到每個樣本最近的質心,並把樣本聚類到最近的這個質心,即 EM 算法的 M 步。重複這個 E 步和 M 步,直到質心不再變化爲止,這樣就完成了 K-Means 聚類。
2. 高斯混合模型
高斯混合模型(Gaussian Misture Model)的參數估計是 EM 算法的一個重要應用。高斯混合模型應用廣泛,在許多情況下, EM 算法是學習高斯混合模型的有效方法。
3. 隱馬爾科夫模型
EM 算法的另一個重要應用是隱馬爾科夫模型。
算法的選擇取決於許多因素,比如問題陳述、預期的輸出類型、數據的類型和大小、可用的計算時間、特徵數量以及數據中的觀測點等,以上內容僅供大家在選擇算法時作爲參考,實踐和運行纔是評估算法的最佳標準。
版權聲明
轉自九章雲極 DataCanvas,版權屬於原作者,僅用於學術分享
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/8XXrOH1NEJFl2gfC-XvoLw