拓端tecdat:R語言梯度提升機 GBM、支援向量機SVM、正則判別分析RDA模型訓練、引數調優化和效能比較視覺化分析聲納資料
原文連結:http://tecdat.cn/?p=24354
原文出處:拓端資料部落公眾號
本文介紹簡化模型構建和評估過程。
caret包的train
函式可用於
- 使用重取樣評估模型調整引數對效能的影響
- 在這些引數中選擇“最佳”模型
- 從訓練集估計模型效能
首先,必須選擇特定的模型。
調整模型的第一步是選擇一組要評估的引數。例如,如果擬合偏最小二乘 (PLS) 模型,則必須指定要評估的 PLS 元件的數量。
一旦定義了模型和調整引數值,還應指定重取樣的型別。目前,k折交叉驗證(一次或重複)、留一法交叉驗證和引導(簡單估計或 632 規則)重取樣方法可以被train
。重取樣後,該過程會生成效能測量的配置檔案,可用於指導使用者選擇應選擇哪些調整引數值。預設情況下,該函式會自動選擇與最佳值相關的調整引數,儘管可以使用不同的演算法。
聲納資料例子
在這裡,我們載入資料:
- str(Snr[, 1:10])
將資料的分層隨機樣本建立為訓練集和測試集:
- iTraing <- creaDaaPatiion(Cls, p = .75, list = FALSE)
我們將使用這些資料說明此(和其他)頁面上的功能。
基本引數調優
預設情況下,簡單重取樣用於上述演算法中的第 3 行。還有其他的,如重複K折交叉驗證,留一法等。 指定重取樣的型別:
- fit <- trainCnol(## 10-fold CV
- meod = "rpaedcv",
- ## 重複10次
- rpets = 10)
前兩個引數train
分別是預測變數和結果資料物件。第三個引數 ,method
指定模型的型別。為了說明,我們將通過gbm包。使用重複交叉驗證擬合此模型的基本語法如下所示:
- train(
- mehd = "gbm",
對於梯度提升機 (GBM) 模型,有三個主要調整引數:
- 迭代次數,即樹,(
n.trees
在gbm
函式中呼叫) - 樹的複雜度,稱為
interaction.depth
- 學習率:演算法適應的速度,稱為
shrinkage
- 節點中開始分裂的最小訓練集樣本數 (
n.minobsinnode
)
為該模型測試的預設值顯示在前兩列中(shrinkage
並且n.minobsinnode
Accuracy
”的列是交叉驗證迭代的平均總體一致率。一致性標準偏差也是從交叉驗證結果中計算出來的。“Kappa
”列是 Cohen 的(未加權的)Kappa 統計量在重取樣結果中的平均值。train
適用於特定模型。對於這些模型,train
可以自動建立一個調整引數的網格。預設情況下,如果p是調整引數的數量,則網格大小為3^p。再舉一個例子,正則化判別分析 (RDA) 模型有兩個引數 (gamma
和lambda
),這兩個引數都介於 0 和 1 之間。預設訓練網格將在這個二維空間中產生九種組合。
train
下一節將介紹其中的其他功能。
再現性注意事項
許多模型在估計引數的階段使用隨機數。此外,重取樣索引是使用隨機數選擇的。有兩種主要的方法來控制隨機性以確保可重複的結果。
- 有兩種方法可以確保在呼叫訓練時使用相同的重樣本。第一種是在呼叫訓練前使用set.seed。第一次使用隨機數是為了建立重取樣資訊。另外,如果你想使用資料的特定分割,可以使用trainControl函式的索引引數。
- 當模型在重取樣中被建立時,種子也可以被設定。雖然在呼叫train之前設定種子可以保證使用相同的隨機數,但在使用並行處理時不太可能是這種情況(取決於利用的是哪種技術)。為了設定模型擬合的種子,trainControl有一個額外的引數叫種子,可以使用。這個引數的值是一個作為種子的整數向量的列表。trainControl的幫助頁面描述了這個選項的適當格式。
自定義調優過程
有幾種方法可以自定義選擇調整/複雜性引數和構建最終模型的過程。
預處理選項
如前所述,train
可以在模型擬合之前以各種方式對資料進行預處理。該功能preProcess
是自動使用的。此函式可用於標準、插補(參見下文詳細資訊)、通過主成分分析或獨立成分分析應用空間符號變換和特徵提取。
為了指定應該進行什麼預處理,該train
函式有一個名為 的引數preProcess
。preProcess
函式的附加選項可以通過trainControl
函式傳遞。
這些處理步驟將在使用predict.train
,extractPrediction
或生成的任何預測期間應用extractProbs
(請參閱本文件後面的詳細資訊)。預處理不會應用於直接使用object$finalModel
物件的預測。
對於插補,目前實現了三種方法:
- k -最近鄰採用具有缺失值的樣本,並在訓練集中找到k 個最接近的樣本。該預測器的k 個訓練集值的平均值用作原始資料的替代。在計算到訓練集樣本的距離時,計算中使用的預測變數是該樣本沒有缺失值且訓練集中沒有缺失值的預測變數。
- 另一種方法是使用訓練集樣本為每個預測因子擬合一個袋狀樹模型。這通常是一個相當準確的模型,可以處理缺失值。當一個樣本的預測器需要估算時,其他預測器的值會通過袋裝樹進行反饋,並將預測值作為新值。這個模型會有很大的計算成本。
- 預測器訓練集值的中位數可用於估計缺失資料。
如果訓練集中存在缺失值,PCA 和 ICA 模型僅使用完整樣本。
交替調諧網格
調諧引數網格可由使用者指定。該引數tuneGrid
可以採用包含每個調整引數列的資料框。列名應該與擬合函式的引數相同。對於前面提到的 RDA 示例,名稱將是gamma
和lambda
。train
將在行中的每個值組合上調整模型。
對於提升樹模型,我們可以固定學習率並評估三個以上的n.trees值。
- expnd.grd(
- n.trees = (1:30)*50,
- )
- Fit2
另一種選擇是使用可能的調整引數組合的隨機樣本,即“隨機搜尋”。
要使用隨機搜尋,請使用search = "random"
呼叫中的選項trainControl
。在這種情況下,tuneLength
引數定義了將被評估的引數組合的總數。
繪製重取樣影象
該plot
函式可用於檢查效能估計與調整引數之間的關係。例如,函式的簡單呼叫顯示了第一個效能度量的結果:
tels.pr.st(cretTe())
可以使用該metric
選項顯示其他效能指標:
- trels.r.st(carthme())
- plt(Fit2, meric = "Kap")
也可以使用其他型別的繪圖。有關?plot.train
更多詳細資訊,請參閱。下面的程式碼顯示了結果的熱圖:
- trlipt(crTme())
- plt(Fit2))
ggplot
還可以使用ggplot
方法:
ggplot( Fit2)
還有一些繪圖函式可以更詳細地表示重新取樣的估計值。有關?xyplot.train
更多詳細資訊,請參閱。
從這些圖中,可能需要一組不同的調諧引數。要更改最終值而無需再次啟動整個過程,update.train
可用於重新擬合最終模型。看?update.train
trainControl
功能
該函式trainControl
生成引數,進一步控制模型的建立方式,可能的值:
方法。重新取樣的方法。"boot"、"cv"、"LOOCV"、"LGOCV"、"recomplatedcv"、"timeslice"、"none "和 "oob"。最後一個值,袋外估計值,只能由隨機森林、袋裝樹、袋裝地球、袋裝靈活判別分析或條件樹森林模型使用。GBM模型不包括在內。另外,對於留一法交叉驗證,沒有給出重取樣效能指標的不確定性估計。
number
和repeats
:number
控制K折交叉驗證中的摺疊次數或用於引導和離開組交叉驗證的重取樣迭代次數。repeats
僅適用於重複的K折交叉驗證。假設method = "repeatedcv"
,number = 10
和repeats = 3
, 那麼三個單獨的 10 折交叉驗證被用作重取樣方案。verboseIter
:輸出訓練日誌。returnData
: 將資料儲存到名為trainingData。
替代效能指標
使用者可以更改用於確定最佳設定的指標。預設情況下,為迴歸計算RMSE、R2 和平均絕對誤差 (MAE),而為分類計算準確度和 Kappa。同樣預設情況下,引數值是分別使用 RMSE 和精度選擇的,分別用於迴歸和分類。該函式的metric
引數train
允許使用者控制使用哪個最優標準。例如,在一類中樣本百分比較低的問題中,使用metric = "Kappa"
可以提高最終模型的質量。
如果這些引數都不令人滿意,使用者還可以計算自定義效能指標。該trainControl
函式有一個引數summaryFunction
,用於指定計算效能的函式。該函式應具有以下引數:
- data是一個數據框或矩陣的參考,其列名為obs和pred,用於觀察和預測結果值(用於迴歸的數字資料或用於分類的字元值)。目前,類的概率沒有被傳遞給函式。data中的值是對單一調諧引數組合的保留預測值(及其相關參考值)。如果trainControl物件的classProbs引數被設定為 "true",資料中就會出現包含類概率的額外列。這些列的名稱與類的級別相同。另外,如果在呼叫訓練時指定了權重,那麼資料集中也會有一列叫做權重的資料。
lev
是一個字串,它具有從訓練資料中提取的結果因子級別。對於迴歸,將 的值NULL
傳遞到函式中。model
是正在使用的模型的字串(即傳遞給 的method
引數的值train
)。
該函式的輸出應該是具有非空名稱的數字彙總指標的向量。預設情況下,train
根據預測類別評估分類模型。可選地,類概率也可用於衡量效能。要在重取樣過程中獲得預測的類概率,引數classProbs
intrainControl
必須設定為TRUE
。這將概率列合併到每個重取樣生成的預測中(每個類有一列,列名是類名)。
如上一節所示,自定義函式可用於計算重取樣的平均效能分數。計算 ROC 曲線下的靈敏度、特異性和麵積:
head(toClamary)
要使用此標準重建提升樹模型,我們可以使用以下程式碼檢視調整引數與 ROC 曲線下面積之間的關係:
- Fit3<- tran(C
- mtric = "ROC")
在這種情況下,與最佳調整引數相關的 ROC 曲線下的平均面積在 100 次重取樣中為 0.922。
選擇最終模型
自定義調整過程的另一種方法是修改用於選擇“最佳”引數值的演算法,給定效能數字。預設情況下,該train
函式選擇具有最大效能值(或最小,對於迴歸模型中的均方誤差)的模型。可以使用其他選擇模型的方案。Breiman et al (1984)為簡單的基於樹的模型建議了“一個標準錯誤規則”。在這種情況下,識別出具有最佳效能值的模型,並使用重取樣來估計效能的標準誤差。使用的最終模型是(經驗上的)最佳模型的一個標準誤差範圍內的最簡單模型。對於簡單的樹,這是有道理的,因為隨著這些模型越來越針對訓練資料,它們將開始過度擬合。
train
允許使用者指定用於選擇最終模型的替代規則。該引數selectionFunction
可用於提供一個函式來通過演算法確定最終模型。包中現有三個函式:best
是選擇最大/最小值,oneSE
嘗試捕捉精神Breiman et al (1984)並tolerance
在最佳值的某個百分比容差範圍內選擇最不復雜的模型。
可以使用使用者定義的函式,只要它們具有以下引數:
x
是一個包含調整引數及其相關效能指標的資料框。每行對應一個不同的調整引數組合。metric
指示哪些效能度量應該被優化的字串(這在直接從傳遞metric
的自變數train
。maximize
是一個單一的邏輯值,指示效能指標的較大值是否更好(這也直接從呼叫傳遞到train
)。
該函式應輸出一個整數,指示x
選擇了哪一行。
舉個例子,如果我們根據整體精度選擇之前的 boosted 樹模型,我們會選擇:n.trees = 1450,interaction.depth = 5,shrinkage = 0.1,n.minobsinnode = 20。該圖相當緊湊,準確度值從 0.863 到 0.922 不等。一個不太複雜的模型(例如更少、更淺的樹)也可能產生可接受的準確性。
容差函式可用於基於 (x-xbest)/xbestx 100(百分比差異)找到不太複雜的模型。例如,要根據 2% 的效能損失選擇引數值:
- tolrae(rslts, merc = "ROC",
- tol = 2, mxiie = TRUE)
resul[whTwc,1:6]
這表明我們可以得到一個不太複雜的模型,其 ROC 曲線下的面積為 0.914(與“選擇最佳”值 0.922 相比)。
這些函式的主要問題與從最簡單到複雜的模型排序有關。在某些情況下,這很容易(例如簡單的樹、偏最小二乘法),但在這種模型的情況下,模型的排序是主觀的。例如,使用 100 次迭代且樹深度為 2 的提升樹模型是否比使用 50 次迭代且深度為 8 的模型更復雜?該包做出了一些選擇。在提升樹的情況下,該包假設增加迭代次數比增加樹深度更快地增加複雜性,因此模型按迭代次數排序,然後按深度排序。
提取預測和類別概率
如前所述,由訓練函式產生的物件在finalModel子物件中包含 "優化 "的模型。可以像往常一樣從這些物件中進行預測。在某些情況下,比如pls或gbm物件,可能需要指定來自優化後擬合的額外引數。在這些情況下,訓練物件使用引數優化的結果來預測新的樣本。例如,如果使用predict.gbm建立預測,使用者必須直接指定樹的數量(沒有預設)。另外,對於二元分類,該函式的預測採取的是其中一個類的概率形式,所以需要額外的步驟將其轉換為因子向量。predict.train自動處理這些細節(以及其他模型)。
此外,R 中模型預測的標準語法很少。例如,為了獲得類概率,許多predict
方法都有一個稱為引數的引數type
,用於指定是否應該生成類或概率。不同的包使用不同的值type
,例如"prob"
,"posterior"
,"response"
,"probability"
或"raw"
。在其他情況下,使用完全不同的語法。
對於predict.train,型別選項被標準化為 "class "和 "prob"。比如說。
prdit(it3, nwta = hadetn))
prdit(Ft3, ewata = hed(ttig), tye = "pob")
探索和比較重取樣分佈
模型內
例如,以下語句建立一個密度圖:
- tlisaret(crtTe())
- deiplt(Ft3, pch = "|")
請注意,如果您有興趣繪製多個調整引數的重取樣結果,resamples = "all"
則應在控制物件中使用該選項。
模型間
表徵模型之間的差異(使用產生的train
,sbf
或rfe
通過它們的重新取樣分佈)。
首先,支援向量機模型擬合聲納資料。使用preProc
引數對資料進行標準化 。請注意,相同的隨機數種子設定在與用於提升樹模型的種子相同的模型之前。
- set.sed(25)
- Ft <- tran(
- preProc = c("center", "scale"),
- metric = "ROC")
此外,還擬合了正則化判別分析模型。
- Fit <- tn(
- method = "rda")
鑑於這些模型,我們能否對它們的效能差異做出統計陳述?為此,我們首先使用 收集重取樣結果。
rsa <- resamples()
summary
有幾種點陣圖方法可用於視覺化重取樣分佈:密度圖、盒須圖、散點圖矩陣和彙總統計的散點圖。例如:
- the <- elia.get(
- ptsyol$col = rb(.2, ., .2, .4)
- plot(resamp, layot = c(3, 1))
由於模型是在相同版本的訓練資料上擬合的,對模型之間的差異進行推斷是有意義的。通過這種方式,我們減少了可能存在的樣本內相關性。我們可以計算差異,然後使用一個簡單的t檢驗來評估模型之間沒有差異的無效假設。
diValu
summary
plot(diVls, lyu = c(3, 1))
plot(fVue)
沒有引數調整的擬合模型
在模型調整值已知的情況下,train
可用於將模型擬合到整個訓練集,無需任何重取樣或引數調整。可以使用 usingmethod = "none"
選項trainControl
。例如:
- tronol(mtd = "none", csPrs = TRUE)
- Fit4
請注意plot.train
,resamples
,confusionMatrix.train
和其他幾個函式不適用於此物件,但其他函式predict.train
將:
prdct(Fit4, newdata )
prdit(Fit4, newdata , tpe = "prb")
最受歡迎的見解
3.python中使用scikit-learn和pandas決策樹
7.用機器學習識別不斷變化的股市狀況——隱馬爾可夫模型的應用
8.python機器學習:推薦系統實現(以矩陣分解來協同過濾)
9.
python中用pytorch機器學習分類預測銀行客戶流失