使用 SVM 和決策樹進行整合學習

banq發表於2024-03-11

整合學習是一種機器學習技術,它結合了多個單獨的模型來提高預測效能。整合學習中使用的兩種流行演算法是支援向量機 (SVM) 和決策樹。

什麼是整合學習?
透過合併許多模型(也稱為“基礎學習器”或“弱學習器”),整合學習是一種機器學習方法,可建立更強大的模型(稱為“整合模型”)。整合學習的概念基於這樣一個前提:透過聚合眾多模型的預測,整合模型可能經常優於整合中的任何單個模型。

什麼是決策樹?
決策樹是一種樹狀結構,其中

  1. 每個內部節點代表對屬性的“測試”(例如,某個特徵是否大於某個閾值)。
  2. 每個分支代表測試的結果。
  3. 每個葉節點代表一個類標籤(在分類中)或一個連續值(在迴歸中)。

什麼是支援向量機?
支援向量機 (SVM) 是用於分類和迴歸任務的監督學習模型。在分類中,支援向量機找到最能區分特徵空間中不同類的超平面。選擇該超平面是為了最大化邊距,即超平面與每個類最近的資料點之間的距離,也稱為支援向量。

如何結合支援向量機(SVM)和決策樹?
以下是如何結合支援向量機 (SVM) 和決策樹的一些常見方法:

  1. Bagging(引導聚合):這涉及在訓練資料的不同子集上訓練多個 SVM 或決策樹,然後組合它們的預測。這可以減少過度擬合併提高泛化能力。
  2. Boosting:像 AdaBoost 這樣的演算法可用於順序組合多個 SVM 或決策樹,每個後續模型都會關注前一個模型的錯誤。這可以提高組合模型的整體效能。
  3. 隨機森林:這種整合方法結合了多個在特徵的隨機子集和樣本上訓練的決策樹。它對於分類和迴歸任務都有效。
  4. 級聯 SVM:這種方法涉及使用決策樹來預先選擇樣本,然後將這些樣本輸入到單獨的 SVM 分類器中。當資料集很大並且 SVM 訓練的計算成本很高時,這會很有用。
  5. SVM 作為決策樹的特徵選擇器:使用 SVM 從資料集中選擇最相關的特徵,然後根據所選特徵訓練決策樹。這可以幫助提高決策樹的可解釋性並減少不相關特徵的影響。
  6. 堆疊:在資料集上分別訓練多個 SVM 和決策樹,然後使用另一個模型(例如線性迴歸或另一個決策樹)來組合它們的預測。這通常可以帶來比任何單個模型更好的效能。

使用決策樹實現支援向量機 (SVM)
在此實現中,我們設定使用帶有支援向量機 (SVM) 和決策樹 (DT) 的投票分類器作為乳腺癌資料集的基本估計器。

1、匯入必要的庫
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.ensemble import VotingClassifier
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeClassifier


2、載入和分割資料集

載入乳腺癌資料集
breast_cancer = load_breast_cancer()
X_bc, y_bc = breast_cancer.data, breast_cancer.target

# 將資料集分成訓練集和測試集
X_train_bc, X_test_bc, y_train_bc, y_test_bc = train_test_split(X_bc, y_bc, test_size=0.2, random_state=42)


3、建立基本估計器

  • SVC(支援向量分類器):該probability=True引數允許模型預測每個類別的機率,這對於VotingClassifier.
  • DecisionTreeClassifier:該分類器建立一個模型,透過學習從資料特徵推斷出的簡單決策規則來預測目標變數的值。每個內部節點代表對屬性的“測試”,每個分支代表測試的結果,每個葉節點代表一個類標籤。在 的背景下VotingClassifier,決策樹充當投票的另一個基本估計器。

建立基本估算器
svm_bc = SVC(probability=True)
dt_bc = DecisionTreeClassifier()

4、整合學習

  • VotingClassifier 建立:VotingClassifier使用 來建立estimators=[('svm', svm_bc), ('dt', dt_bc)],指定用於投票的基本估計器列表。該voting='soft'參數列示分類器將使用軟投票,這意味著它根據預測機率之和的 argmax 來預測類標籤。
  • 訓練投票分類器:使用訓練資料對物件fit呼叫該方法,並在乳腺癌資料集上訓練分類器。voting_clf_bcX_train_bcy_train_bc

# 建立投票分類器
voting_clf_bc = VotingClassifier(estimators=[('svm', svm_bc), ('dt', dt_bc)], voting='soft')

訓練投票分類器
voting_clf_bc.fit(X_train_bc, y_train_bc)


模型評估

  • 進行預測:使用測試資料對物件predict呼叫該方法,以對乳腺癌資料集進行預測。voting_clf_bcX_test_bc
  • 評估準確性:該accuracy_score函式用於將預測標籤與測試集中的y_pred_bc實際標籤進行比較。y_test_bc然後使用 f 字串格式將準確性列印到控制檯。

# 進行預測
y_pred_bc = voting_clf_bc.predict(X_test_bc)

評估準確性
accuracy_bc = accuracy_score(y_test_bc, y_pred_bc)
print(f'Accuracy on breast cancer dataset: {accuracy_bc}')


輸出:Accuracy on breast cancer dataset: 0.9385964912280702
 

相關文章