iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

簡介

Scikit-learn 的 cheatsheet 中列舉了多種常用的機器學習演算法,涵蓋了分類、回歸、聚類和降維等多個領域。理解每種演算法的特性和適用情境,將有助於我們在面對不同的數據和需求時,能夠選擇最合適的工具進行建模。在接下來的四篇文章中,我們將詳細介紹這些演算法,包括:

  1. 分類算法:Linear SVC、Naive Bayes、K Neighbors Classifier、SVC、Ensemble Classifiers、SGD Classifier
  2. 回歸算法:Lasso、ElasticNet、Ridge Regression、SVR、Ensemble Regressors、SGD Regressor
  3. 聚類算法:MeanShift、VBGMM、MiniBatch KMeans、KMeans、Spectral Clustering、Gaussian Mixture Models (GMM)
  4. 降維算法:Randomized PCA、Isomap、Spectral Embedding、Kernel Approximation、LLE

對於每種演算法,我們將從以下幾個方面進行介紹:

  • 基本原理:簡要說明演算法的核心思想
  • 注意事項:提醒使用該演算法時需要注意的問題

其中會將主要特點使用場景整理成表格圖供比較。
通過這篇文章,我們希望能夠幫助大家更好地理解 scikit-learn cheatsheet 中的各種演算法,為後續的實際應用打下堅實的基礎。讓我們開始這段深入淺出的機器學習演算法探索之旅吧!

Cheatsheet 中的演算法介紹- 分類

分類是機器學習中最常見的任務之一,它的目標是將輸入數據分配到預定義的類別中。讓我們來看看這些強大的分類器:

  1. Linear SVC(線性支持向量分類器)
  • 基本原理:Linear SVC 是一種線性分類器,其主要目的是尋找一條最佳的線(在二維空間中)或一個超平面(在更高維空間中)來將不同類別的數據點分開。這條線或超平面不僅要能夠分隔開不同的類別,還要最大化類別之間的間隔,以提高分類器對未知數據的泛化能力。具體來說,Linear SVC 會選擇使得邊界最寬的分隔線或超平面。例如,假設我們有三種類別的數據點,如下圖所示:

https://ithelp.ithome.com.tw/upload/images/20240911/20168116UElr6c50OK.jpg
[source]
在這種情況下,我們希望找到一條最佳的分隔線,並且這條線需要使得各類別之間的距離最大化。這樣可以確保即使在面對新的數據點時,我們也能夠做出準確的預測。

  • 注意事項:
    • 對outliers較為敏感:異常值可能顯著影響決策邊界的位置。
    • 對於非線性可分的數據集,Linear SVC 的性能可能會下降。在這種情況下,可以考慮使用非線性支持向量機或其他更適合的分類器。
    • 當要優化模型而進行參數調整時,可能會需要額外的計算資源和時間來尋找最佳參數
    • 需要對特徵進行標準化:確保所有特徵在相同的尺度上,避免某些特徵主導分類結果。
  1. Naive Bayes(樸素貝葉斯)
  • 基本原理:Naive Bayes 是基於貝葉斯定理的簡單機率分類器。它的基本思想是,對於每個待分類的樣本,我們計算它屬於每個類別的機率,然後選擇機率最高的類別作為最終的預測結果。Naive Bayes 的「樸素」之處在於它假設特徵之間是條件獨立的,即每個特徵對於給定類別的貢獻是獨立的,這大大簡化了計算過程。
  • 注意事項:
    • 特徵獨立假設的限制:在特徵高度相關的情況下,Naive Bayes 的性能可能會受到影響。雖然獨立假設簡化了計算,但實際數據中的特徵往往不是完全獨立的。
    • 缺失數據較為敏感:需要合理處理缺失值,否則可能影響分類結果。
    • 數據平滑:當某些類別的特徵在訓練數據中未出現時,可能會遇到機率為零的問題。這種情況下,可以使用拉普拉斯平滑(Laplace smoothing)來解決。
    • 適合於線性分類:Naive Bayes 特別適合處理線性分類問題,但在某些複雜的非線性問題上可能效果不佳。
  1. K Neighbors Classifier(K 最近鄰分類器)
    K Neighbors Classifier 有時也被稱為 K-Nearest Neighbors (KNN)算法,這兩個名稱指的是同一個核心概念: 通過查找最接近的 K 個鄰居來進行分類或回歸。"K-Nearest Neighbors (KNN)" 是一個更通用的術語,可以指代用於分類或回歸的 KNN 算法。而 "K Neighbors Classifier" 更明確地指出這是一個用於分類任務的 KNN 實現。scikit-learn 庫中使用 "KNeighborsClassifier" 作為分類器的名稱,對於回歸任務,scikit-learn 則使用 "KNeighborsRegressor"。
  • 基本原理:K Neighbors Classifier 是一種基於實例的學習方法,它通過測量數據點之間的距離來進行分類。這個方法的核心思想是:給定一個待分類的數據點,我們查找訓練集中與該數據點距離最近的 K 個鄰居,然後根據這些鄰居的類別來進行預測。它不需要訓練過程,而是在預測時直接計算距離。最常見的距離度量是歐氏距離(Euclidean distance),但也可以使用其他距離度量方法。具體來說,K Neighbors Classifier 的分類步驟如下:

選擇鄰居:選擇與待分類數據點距離最近的 K 個數據點。 

投票決策:根據這 K 個鄰居的類別進行投票,將待分類數據點分配給投票最多的類別。這裡可以選擇不同的投票策略,如多數投票(Majority Voting)或加權投票(Weighted Voting)
  • 注意事項:
    • K 值選擇:選擇合適的 K 值是 K Neighbors Classifier 的一個重要問題。K 值過小會導致模型過擬合過大則會使模型過於平滑,從而可能忽略數據中的局部結構。常用的方法是通過交叉驗證來選擇最佳的 K 值。
    • 對特徵的尺度敏感,通常需要標準化:由於 K Neighbors Classifier 基於距離進行分類,因此需要對特徵進行標準化處理,以避免某些特徵的尺度影響結果。常見的標準化方法有 Z-score 標準化和 Min-Max 正規化。
    • 計算複雜度:對於大規模數據集,K Neighbors Classifier 的計算複雜度高,可能需要使用 KD-Tree 或 Ball-Tree 等資料結構來加速鄰居搜索。
    • 需要大量存儲空間來保存訓練數據:因為預測時需要用到所有訓練數據。
  1. SVC (支持向量分類器)
  • 基本原理:SVC 的基本思想是,通過將數據映射到更高維度的空間,使得在這個空間中數據點能夠被分開,與 Linear SVC 類似,只是 SVC 支持線性和非線性分類。它可以使用不同的核函數(如徑向基函數(RBF)核、多項式核等)將數據映射到更高維度的空間,以處理非線性問題。這使得 SVC 能夠解決複雜的分類問題,特別是當數據在原始空間中不可線性分隔時。具體來說,SVC 的分類過程可以分為以下幾個步驟:
選擇超平面:在原始空間中,選擇一個超平面來分隔數據點。這個超平面需要滿足最大化類別之間的間隔(Margin)的條件。

數據映射:如果數據在原始空間中無法被線性分開,SVC 會使用核函數(Kernel Function)將數據映射到更高維度的空間,使得在這個新空間中數據點可以被線性分開。

支持向量:支持向量是距離分隔超平面最近的數據點。SVC 模型主要依賴這些支持向量進行分類,支持向量確定了分類邊界的位置。
  • 注意事項:
    • 選擇核函數:選擇合適的核函數對於 SVC 的性能至關重要。不同的核函數適合不同的數據特徵和問題類型。通常需要通過交叉驗證來選擇最佳的核函數和其參數。
    • 對大規模數據集不太適用:SVC 在處理大規模數據集時可能需要較高的計算資源,尤其在計算核矩陣可能很耗時。對於非常大的數據集,因為計算複雜度隨樣本數量快速增長,可以考慮使用線性支持向量機(Linear SVM)或其他優化技術來提高計算效率。
  1. Ensemble Classifiers(集成分類器)
  • 基本原理:集成分類器(Ensemble Classifiers)通過結合多個基礎模型來提高預測性能。集成方法的核心思想是利用多個模型的優勢來彌補單一模型的不足,最終得到比任何單一模型更強的分類性能。例如,在一個醫療診斷系統中,我們可能結合多個專家(分類器)的意見。每個專家根據不同的症狀和檢查結果給出診斷,最後系統綜合所有專家的意見得出最終診斷結果。集成分類器通常基於以下幾種方法進行模型融合:

Bagging(Bootstrap Aggregating):

  • 方法:通過從訓練數據集中隨機抽取若干個樣本子集(有放回抽樣),訓練多個基礎模型。每個基礎模型在不同的數據子集上進行訓練,最後將所有模型的預測結果進行平均(對於回歸)或投票(對於分類),以獲得最終預測結果。
  • 優勢:能夠降低模型的方差,減少過擬合的風險。

Boosting:

  • 方法:以序列的方式訓練一系列基礎模型,每個模型的訓練過程中會重點關注前一個模型中預測錯誤的樣本。最終,所有基礎模型的預測結果按照一定的權重進行加權,以獲得最終預測結果。
  • 優勢:能夠提高模型的準確性,尤其在處理不平衡數據集時效果良好。

Stacking(Stacked Generalization):

  • 方法:將多個不同的基礎模型進行訓練,然後用這些模型的預測結果作為新特徵來訓練一個更高層次的模型(稱為元模型)。最終,元模型會基於這些基礎模型的預測結果給出最終預測。
  • 優勢:能夠結合不同模型的優勢,充分利用各模型的特點。

以下是一些常見的集成分類器:

  • 隨機森林(Random Forest):

    • 原理:隨機森林是一種基於 Bagging 的集成方法,它由多棵決策樹組成。每棵決策樹在隨機選擇的特徵子集上進行訓練,並且對於每個樣本進行投票以決定最終預測結果。
    • 優勢:能夠處理高維數據,具有良好的準確性和穩定性。
  • 梯度提升樹(Gradient Boosting Trees):

    • 原理:通過 Boosting 技術來訓練多棵決策樹,每棵樹都會試圖修正前一棵樹的錯誤,最終通過加權的方式結合所有樹的預測結果。
    • 優勢:能夠顯著提高預測準確性,對於處理複雜數據集效果良好。
  • AdaBoost:

    • 原理:通過 Boosting 技術來訓練基礎模型,每次訓練過程中會給錯誤預測的樣本賦予更高的權重,最終通過加權結合所有模型的預測結果。
    • 優勢:對於處理不平衡數據集和少數類別問題效果良好。
  • 注意事項:

    • 訓練和預測時間可能較長:因為需要訓練和預測多個模型。
    • 模型解釋性較差:很難解釋為什麼模型做出某個具體的預測,就像黑盒子一樣。
    • 需要更多的計算資源:特別是在訓練階段,可能需要大量的內存和計算能力。
  1. SGD Classifier (隨機梯度下降分類器)
  • 基本原理:SGD Classifier 是一種利用隨機梯度下降算法(Stochastic Gradient Descent, SGD)來訓練線性分類模型的方法。隨機梯度下降算法的基本原理是通過不斷調整模型參數,使得模型預測結果與實際結果之間的誤差最小化。在這個過程中,每次只使用一個或一小部分樣本來計算和更新參數,相較於批量梯度下降,這樣的方式能夠更快地收斂並適應大規模數據集。

    • 梯度下降:指的是在多維空間中,根據梯度(即偏微分)方向逐步尋找最小值的過程。
    • 隨機梯度下降:與傳統的梯度下降不同,隨機梯度下降每次只使用一個樣本或一小部分樣本進行計算,這樣可以大幅減少計算量,尤其適合大數據集。
  • 注意事項:

    • 對特徵縮放敏感,需要進行標準化:在使用前,對數據進行標準化(如均值歸一化)能夠提高收斂速度和穩定性。
    • 收斂速度:雖然每次更新速度快,但總體收斂可能較慢,需要較多次的迭代才能達到穩定的結果。可以考慮使用學習率調度策略。
    • 超參數調整:性能依賴於學習率、正則化參數等超參數的選擇,通常需要通過交叉驗證來調整。
    • 隨機性:結果可能不穩定,需要多次運行取平均:由於隨機性,單次運行的結果可能不夠穩定。

https://ithelp.ithome.com.tw/upload/images/20240911/20168116bEfTke04sB.jpg

結論

無論是處理簡單的線性分類問題,還是面對複雜的非線性數據,我們都能夠依賴這些強大的工具來實現精確的預測。未來的文章中,我們將繼續探討 scikit-learn cheatsheet 中其他重要的演算法,涵蓋回歸、聚類和降維等領域。希望通過這一系列的介紹,能夠幫助大家在機器學習的旅程中,選擇和應用最合適的演算法,提升模型的性能和應用效果。


上一篇
Day 9 - 打造高效模型:演算法選擇考量
下一篇
Day 11 - 深入解析回歸演算法
系列文
征服機器學習的終極秘技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言