1. 程式人生 > >r語言 整合學習

r語言 整合學習

整合學習通過構造並結合多個學習器來完成學習任務

原理: 先產生一組“個體學習器”,在用某種策略將它們結合起來

boosting:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本進行調整,使得先前基學習器做錯的樣本在後續受到更多關注,然後基於調整後的樣本分佈訓練下一個基學習器;如此重複下去,直至基學習器數目達到事先指定的值T,最終將這T個學習期進行加權結合。

bagging:是投票式演算法,首先使用Bootstrap產生不同的訓練集資料集,然後分別基於這些訓練資料及得到多個基礎分類器,最後組合基礎分類器的分類結果得到一個相對更優的預測模型。bagging演算法的優點在於它是一個容易理解、易於實現且功能強大的學習演算法,但得到的結果很難解釋則是該演算法的主要缺點。(運算速度慢)

隨機森林:是bagging的一個擴充套件變體,隨機森林在以決策樹為基學習器構造Bagging整合的基礎上,進一步在決策樹的訓練過程中引入了隨機屬性選擇。因此,不但樣本是隨機的,就連每個節點變數的產生都有相當大的隨機性。若是分類問題,則輸出為所有書中預測概率總和最大的那個類,若是迴歸問題,則輸出為所有樹的輸出平均值。

引數說明:

bagging(formula, data, mfinal = 100, control, par=FALSE,...)

mfinal: 為演算法的迭代次數,即基的分類器的個數

 -----------------------------隨機森林---------------------------------------------

在隨機森林中有importance和varImpPlot兩個函式用來評估,每個屬性的重要性,其中importance函式以列表展示模型中每個屬性的重要性,varImpPlot函式可以通過繪製平均精確率下降及平均基尼下降曲線實現屬性重要性的視覺化

程式碼:

  # 整合學習
  library(adabag)
  bagging.model <- bagging(Species ~ ., data = iris, mfinal = 50)
  boosting.model <- boosting(Species ~ ., data = iris, mfinal = 50)
  
  # 隨機森林
  library(randomForest)
  randomForest.model <- randomForest(Species ~ ., data = iris)
  
  # 構建result,存放預測結果
  result <- data.frame(arithmetic = c('bagging', 'boosting', '隨機森林'), erriris = rep(0, 3))
  
  for (i in 1:3) {
    # 預測結果
    iris_predict <- predict(switch(i, bagging.model, boosting.model, randomForest.model), 
                             newdata = iris)
    tableTR <- table(actual = iris$Species, 
                     predict = switch(i, iris_predict$class, 
                                      iris_predict$class, iris_predict))  # 混淆矩陣
    
    # 計算誤差矩陣
    result[i, 2] <- paste(round((sum(tableTR) - sum(diag(tableTR)))*100/sum(tableTR), 2), '%')
  }