如何用R語言在機器學習中創建集成模型?

來源:拓端數據部落php

本文約2400字,建議閱讀5分鐘nginx

本文向您介紹集成建模的基礎知識。另外,爲了向您提供有關集合建模的實踐經驗,咱們將使用R對hackathon問題進行集成。算法

1.什麼是集成?

一般,集成是一種組合兩種或多種相似或不一樣類型算法的技術,稱爲基礎學習者。這樣作是爲了創建一個更加健壯的系統,其中包含了全部基礎學習者的預測。能夠理解爲多個交易者之間的會議室會議,以決定股票的價格是否會上漲。bootstrap

因爲他們都對股票市場有不一樣的理解。所以,他們應該根據本身對市場的理解對股票價格作出各類預測。數組

2.集合的類型

在進一步詳細介紹以前,一些基本概念是:ruby

  • 平均:它被定義爲在迴歸問題的狀況下或在預測分類問題的機率時從模型中獲取預測的平均值。 bash

  • 多數投票:它被定義爲在預測分類問題的結果的同時,從多個模型預測中以最大投票/推薦進行預測。 app

  • 加權平均值:在此,不一樣的權重應用於來自多個模型的預測,而後取平均值 。 機器學習

一些主要使用的技術:性能

  • Bagging:Bagging也稱爲bootstrap聚合。 

加強的一些例子是XGBoost,GBM,ADABOOST等。

  • 堆疊:在堆疊多層機器時,學習模型彼此疊加,每一個模型將其預測傳遞給上面層中的模型,頂層模型根據模型下面的模型輸出作出決策。

3.集合的優勢和缺點

3.1優勢

  • 集成是一種通過驗證的方法,能夠提升模型的準確性,適用於大多數狀況。

  • 集成使模型更加穩健和穩定,從而確保在大多數狀況下測試用例具備良好的性能。

  • 您可使用集成來捕獲數據中的線性和簡單以及非線性複雜關係。這能夠經過使用兩個不一樣的模型並造成兩個集合來完成。


3.2缺點

  • 集成減小了模型的可解釋性,而且很難在最後繪製任何關鍵的業務看法。

  • 這很是耗時,所以可能不是實時應用程序的最佳選擇。

4.在R中實施集合的實用指南

#讓咱們看一下數據集數據的結構
'data.frame':614 obs。13個變量:


$ ApplicantIncome:int 5849 4583 3000 2583 6000 5417 2333 3036 4006 12841 ...
$ CoapplicantIncome:num 0 1508 0 2358 0 ...
$ LoanAmount:int NA 128 66 120 141 267 95 158 168 349 ...
$ Loan_Amount_Term:int 360 360 360 360 360 360 360 360 360 360 ...
$ Credit_History:int 1 1 1 1 1 1 1 0 1 1 ...


#使用中位數填充缺失值
preProcValues < -  preProcess(data,method = c(「medianImpute」,「center」,「scale」))


#Spliting訓練根據結果分爲兩部分:75%和25%
index < -  createDataPartition(data_processed $ Loan_Status,p = 0.75,list = FALSE)
trainSet < -  data_processed [index,]
testSet < -  data_processed [-index,]


我將數據分紅兩部分,我將用它來模擬訓練和測試操做。咱們如今定義訓練以及預測變量和結果變量:

#定義多個模型的訓練參數
fitControl < -  trainControl(
  method =「cv」, savePredictions ='final',
classProbs = T)


咱們開始訓練隨機森林並在咱們建立的測試集上測試其準確性:

#檢查隨機森林模型的準確性
Confusion matrix and statistics
reference
Forecast N Y.
N 28 20
Y 9 96
Accuracy: 0.8105
95% CI: (0.7393,0.8692)
No information rate: 0.7582
P value[Acc> NIR]: 0.07566
Kappa: 0.5306
Mcnemar's test P value: 0.06332
Sensitivity: 0.7568
Specificity: 0.8276
Pos Pred value: 0.5833
Neg Pred value: 0.9143
Prevalence rate: 0.2418
Detection rate: 0.1830
Detection prevalence rate: 0.3137
Balance accuracy: 0.7922


咱們使用隨機森林模型得到了0.81的準確度。讓咱們看看KNN的表現:

#訓練knn模型
#使用knn模型預測
testSet $ pred_knn <-predict(object = model_knn,testSet [,predictors])
#檢查隨機森林模型的準確性
reference
Forecast N Y.
N 29 19
Yes 2 103
Accuracy: 0.8627
95% CI: (0.7979, 0.913)
No information rate: 0.7974
P value[Acc> NIR]: 0.0241694
Kappa: 0.6473
Mcnemar's test P value: 0.0004803
Sensitivity: 0.9355
Specificity: 0.8443
Pos Pred value: 0.6042
Neg Pred value: 0.9810
Prevalence rate: 0.2026
Detection rate: 0.1895
Detection prevalence rate: 0.3137
Balance accuracy: 0.8899

 

咱們可以經過單獨的KNN模型得到0.86的準確度。Logistic迴歸的表現:

#訓練Logistic迴歸模型
#預測使用knn模型
testSet $ pred_lr <-predict(object = model_lr,testSet [,predictors])
#檢查隨機森林模型的準確性
Confusion matrix and statistics
reference
Forecast N Y.
N 29 19
Yes 2 103
Accuracy: 0.8627
95% CI: (0.7979, 0.913)
No information rate: 0.7974
P value[Acc> NIR]: 0.0241694
Kappa: 0.6473
Mcnemar's test P value: 0.0004803
Sensitivity: 0.9355
Specificity: 0.8443
Pos Pred value: 0.6042
Neg Pred value: 0.9810
Prevalence rate: 0.2026
Detection rate: 0.1895
Detection prevalence rate: 0.3137
Balance accuracy: 0.8899


邏輯迴歸也給出了0.86的準確度。

如今,讓咱們嘗試用這些模型造成集合的不一樣方法,如咱們所討論的:

平均

咱們將平均三個模型的預測。因爲預測是「Y」或「N」,所以平均值對於此二進制分類沒有多大意義。可是,咱們能夠對觀察機率的平均值進行平均處理。

#預測機率
testSet $ pred_rf_prob <-predict(object = model_rf,testSet [,predictors],type ='prob')
testSet $ pred_knn_prob <-predict(object = model_knn,testSet [,predictors],type ='prob')
testSet $ pred_lr_prob <-predict(object = model_lr,testSet [,predictors],type ='prob')

多數表決:在多數表決中,咱們將爲大多數模型預測的觀察指定預測。


多數投票加權平均值

咱們能夠採用加權平均值,而不是採用簡單平均值。一般,對於更準確的模型,預測的權重很高。讓咱們將0.5分配給logistic迴歸,將0.25分配給KNN和隨機森林。 

到目前爲止,咱們在頂層使用了簡單的公式。相反,咱們可使用另外一種機器學習模型,這就是堆疊。咱們可使用線性迴歸來製做線性公式,用於在迴歸問題中進行預測,以便在分類問題的狀況下將底層模型預測映射到結果或邏輯迴歸。

在同一個例子中,讓咱們嘗試將邏輯迴歸和GBM應用爲頂層模型。請記住,咱們將採起如下步驟:

  • 在訓練數據上訓練各個基礎層模型。

  • 預測使用每一個基礎層模型來訓練數據和測試數據。

  • 如今,再次對頂層模型進行訓練,對底層模型進行訓練數據的預測。

  • 最後,使用頂層模型預測底層模型的預測。

步驟1:在訓練數據上訓練各個基礎層模型

#定義參數
fitControl < -  trainControl(
method =「cv」, savePredictions ='final',#保存最佳參數組合的預測
classProbs = T#保存預測的類機率
)
#訓練隨機森林模型
#訓練knn模型
#訓練邏輯迴歸模型

步驟2:使用每一個基礎層模型預測訓練數據和測試數據

#預測訓練數據的機率
#預測測試數據的機率

步驟3:如今再次訓練頂層模型對底層模型的預測已經對訓練數據進行了預測

首先,讓咱們從GBM模型開始做爲頂層模型。

 

#頂層模型用於預測的變量
predictors_top <-c( 'OOF_pred_rf', 'OOF_pred_knn', 'OOF_pred_lr')
#GBM做爲頂層模型

一樣,咱們也可使用邏輯迴歸建立一個集合做爲頂層模型。


#Logistic迴歸做爲頂層模型
model_glm < -
( [,predictors_top],  trControl = fitControl,tuneLength = 3)
 

步驟4:最後,使用頂層模型預測

#使用GBM頂層模型預測
測試集$ gbm_stacked <-predict(model_gbm,測試集[,predictors_top])
#使用logictic迴歸頂層模型預測
測試集$ glm_stacked <-predict(model_glm,測試集[,predictors_top])
  •  

注意, 選擇模型很是重要,以便從總體中得到最佳效果。

原文連接:

http://tecdat.cn/?p=6608

編輯:王菁

校對:林亦霖

相關文章
相關標籤/搜索