久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

臨床預(yù)測模型的天花板來了!看上去高大上,,今天拆開揉碎手把手教你,!

 昵稱44608199 2022-10-22 發(fā)布于浙江

Hi,大家好,,我是晨曦

今天這期推文也是來自于一個小伙伴的約稿,,這位小伙伴最近被老板建模的要求所push,所以來找到晨曦詢問了一些內(nèi)容

A同學(xué):曦曦,,我只會R語言,,有沒有一種看上去很高大上的模型而且可以只基于R,而且還要性能優(yōu)秀,,最最重點(diǎn)的是我可以學(xué)會

晨曦:那么XGboost應(yīng)該可以滿足你的要求

作為機(jī)器學(xué)習(xí)領(lǐng)域的愛好者,,越學(xué)習(xí)越發(fā)現(xiàn),一個工具的局限性在一開始就已經(jīng)注定,,盡管我們現(xiàn)在擁有mlr3包和tidymodels包這兩個劃時代的體系,,但是作為R語言的愛好者也不得不承認(rèn)在某一方面,從深度學(xué)習(xí)來講,,還是Python更加的方便,,因?yàn)椴还苁莐eras包還是新出現(xiàn)的tyorch包,,前者依舊是基于python,只不過換了一個前端,,而后者雖然完全基于R語言,,但是代碼卻沒有那么的簡單,下面是晨曦的粗淺理解,,絕非引戰(zhàn),,歡迎各位小伙伴在評論區(qū)留言

在R語言進(jìn)行統(tǒng)計(jì)以及除了神經(jīng)網(wǎng)絡(luò)以外的機(jī)器學(xué)習(xí)還有生信分析是完全沒有問題的,Python在深度學(xué)習(xí)和單細(xì)胞高階分析中有著一定的優(yōu)勢

那么接下來我們就來看一下可以被稱為R語言中模型構(gòu)建的偽天花板,,集成學(xué)習(xí)的一大代表——XGboost算法

背景知識

其實(shí)如果說要理解XGboost的整個來龍去脈,,晨曦建議各位小伙伴去閱讀陳天奇老師的原始文獻(xiàn),但是我們作為使用者,,往往并不需要太多復(fù)雜的數(shù)學(xué)知識,,所以這里晨曦將用自己的理解為各位小伙伴串講XGboost



問題1:什么是集成學(xué)習(xí)?


所謂的集成學(xué)習(xí)其實(shí)是為了解決一個問題,,就是單獨(dú)學(xué)習(xí)器并不能很好的去完成我們的任務(wù),,舉個例子,決策樹算法基于貪婪原則容易過擬合,,我們通過集成學(xué)習(xí)中的bagging技術(shù)就可以構(gòu)建隨機(jī)森林,,其基學(xué)習(xí)器依舊是一個個決策樹,目前來說集成學(xué)習(xí)包括三大技術(shù):bagging,、boosting以及stacking,,bagging技術(shù)中最具代表的就是隨機(jī)森林,而boosting中具有代表的就是XGboost,,簡單理解就是通過匯集多個同質(zhì)弱學(xué)習(xí)器達(dá)到增強(qiáng)模型性能減少偏差的作用



問題2:XGboost是什么,?


XGBoost的基礎(chǔ)是梯度提升算法。梯度提升(Gradient boosting)是構(gòu)建預(yù)測模型的最強(qiáng)大技術(shù)之一,,它是集成算法中提升(Boosting)的代表算法。集成算法通過在數(shù)據(jù)上構(gòu)建多個弱 評估器,,匯總所有弱評估器的建模結(jié)果,,以獲取比單個模型更好的回歸或分類表現(xiàn)。弱評估器被定義為是表現(xiàn)至少比隨機(jī)猜測更好的模型,,即預(yù)測準(zhǔn)確率不低于50%的任意模型

接下來,,我們再來多說一些XGboost的推導(dǎo),當(dāng)然因?yàn)槌筷乇救说臄?shù)學(xué)基礎(chǔ)并不是十分的扎實(shí),,所以這里僅僅從臨床工作者的角度出發(fā),,理解占大多數(shù),推導(dǎo)很少,,不感興趣的小伙伴可以直接跳到代碼實(shí)戰(zhàn)部分

在訓(xùn)練XGboost模型之前我們需要有一個目標(biāo)函數(shù),,也就是說有一個初始的模型基礎(chǔ),,我們可以簡單把目標(biāo)函數(shù)定義為:

這個數(shù)學(xué)公式有兩部分組成,第一部分為損失函數(shù),,其目的是為了防止模型欠擬合(評估預(yù)測值和實(shí)際值之間的情況),,第二部分為正則化函數(shù),其目的是為了防止模型過擬合(對損失函數(shù)的參數(shù)進(jìn)行懲罰,,防止模型過擬合

目標(biāo)函數(shù)可以解釋為對新一輪模型和上一輪模型的預(yù)測的“殘差”進(jìn)行學(xué)習(xí)的過程,,那么實(shí)際上我們的優(yōu)化目標(biāo)就是找到最優(yōu)的f(x)使得目標(biāo)函數(shù)最小

后續(xù)就可以通過一系列數(shù)學(xué)計(jì)算得到這個最小的目標(biāo)函數(shù),完成整個模型的構(gòu)建,,但是對于我們使用來說,,其實(shí)只需要了解XGboost的使用條件、超參數(shù)配置,、以及一些淺淺的理論即可

代碼實(shí)戰(zhàn)

library(tidyverse)library(mlr3)#https://mlr3book./basics.html#taskslibrary(tidymodels)library(ggplot2)library("mlr3verse")library(kknn)library(paradox)#定義超參數(shù)的搜索空間library(mlr3tuning)#用于對超參數(shù)調(diào)優(yōu)library(ggplot2)

工欲善其事必先利其器

data(Zoo,package = "mlbench")#導(dǎo)入數(shù)據(jù)集zooTib <- as_tibble(Zoo)#轉(zhuǎn)換成tibble格式zooXgb <- mutate_at(zooTib,.vars = vars(-type),.funs = as.numeric)

這里需要我們注意的是Xgboost算法需要預(yù)測變量為數(shù)值型變量,,所以我們需要進(jìn)行轉(zhuǎn)化,但是對于離散型變量,,如果盲目轉(zhuǎn)換可能會出現(xiàn)問題,,因?yàn)閷τ陔x散型變臉之間距離的定性是機(jī)器學(xué)習(xí)中很看重的一點(diǎn),所以如果對于離散型變量可以采用獨(dú)熱編碼的方式,,而且機(jī)器學(xué)習(xí)可以很好的處理多重共線性的問題

zooTask <- as_task_classif(zooTib, target = "type")#創(chuàng)建任務(wù)lrn <- lrn("classif.xgboost")#實(shí)際上XGboost也可以處理回歸任務(wù),,只不過mlr3包另外設(shè)置了處理回歸的XGboost函數(shù)lrn$param_set#獲取超參數(shù)列表

XGboost的超參數(shù)有很多,但是我們并不是需要全部掌握,,而且調(diào)節(jié)超參數(shù)并沒有一個統(tǒng)一的定性,,憑借的更多的是經(jīng)驗(yàn)而不是邏輯

#定義超參數(shù)搜索空間search_space = ps( eta = p_int(lower = 0, upper = 1), gamma = p_int(lower = 0, upper = 5), max_depth = p_int(lower = 1,upper = 5), nrounds = p_int(lower = 800,upper = 800), subsample = p_dbl(lower = 0.5,upper = 1), eval_metric = p_fct(c("merror","mlogloss")))#eta:學(xué)習(xí)率(介于0和1之間)數(shù)值越大模型學(xué)習(xí)的越慢,可以簡單理解為步伐越短,,通常來說較小的值更好,,較大的值可能會錯過數(shù)據(jù)之間的較好的參數(shù)關(guān)系#max_depth:每個決策樹可以生長的最大深度#min_child_weight:劃分節(jié)點(diǎn)之前所需的最小純度(如果節(jié)點(diǎn)足夠純粹,不要再次劃分)#subsample:每個決策樹隨機(jī)抽樣(不替換)的樣本比例,,設(shè)置為1表示使用訓(xùn)練集中的所有樣本(簡單來說就是讓樣本更具代表性)#colsample_bytree:本質(zhì)來說就是對每個弱學(xué)習(xí)器進(jìn)行剪枝,,其實(shí)就是為了防止過擬合。如果設(shè)置了最大深度,,這個超參數(shù)可以不調(diào)節(jié)#nrouds:模型中弱學(xué)習(xí)器的數(shù)量(一般來說不要設(shè)置很大,,因?yàn)槿菀走^擬合,經(jīng)驗(yàn)來說300以下為佳)(但是通常來說弱學(xué)習(xí)器和性能呈現(xiàn)一個線性趨勢,,也就是說我們需要根據(jù)自己的計(jì)算機(jī)性能選擇,。在范圍內(nèi)越大越好)#gamma則是節(jié)點(diǎn)分裂時損失函數(shù)減小的最小值,如果為1.0,,表示損失函數(shù)至少下降1.0該節(jié)點(diǎn)才會進(jìn)行分#eval_metric用來指定模型的評估函數(shù),,二分類主要是error、AUC、logloss,。多分類主要是merror和mlogloss

下面則是基于嵌套驗(yàn)證的思想獲得模型的最真實(shí)評價以及通過得到at變量后擬合任務(wù)一步獲得模型最佳超參數(shù)配置的模型

resampling <- rsmp("cv",folds = 10)#定義內(nèi)部循環(huán)重抽樣measure <- msr("classif.acc")#定義模型評價指標(biāo)evals1000 = trm("evals", n_evals = 1000)#設(shè)定調(diào)優(yōu)停止閾值tuner = tnr("random_search")#設(shè)置調(diào)優(yōu)算法at = AutoTuner$new(lrn, resampling, measure, evals1000 , tuner, search_space)#打包調(diào)優(yōu)需要的參數(shù)outer_resampling = rsmp("cv", folds = 5)ptm <- proc.time()rr = resample(zooTask, at, outer_resampling, store_models = TRUE)proc.time() - ptm

注意:我們這里把調(diào)優(yōu)停止閾值設(shè)置在了1000,,也就是說原則上模型會進(jìn)行最多1000次迭代。

我們這里簡單解釋一下,,迭代的含義其實(shí)就是模型獲得最終評價則是算作1次迭代,,那么假設(shè)我們進(jìn)行10折交叉驗(yàn)證,就會生成10個模型然后匯總得到模型的最終評價算成1次迭代,,如果基于嵌套驗(yàn)證的思想,,內(nèi)部10折交叉驗(yàn)證,則會生成10個模型,,這10個模型匯總得到最終評價代表了這組超參數(shù)搭配對應(yīng)的模型評價,,外部5折則是把最佳超參數(shù)組合帶到5個模型中匯總得到模型性能,那么這里一共就是生成了15個模型,,也就是說15個模型算作一次迭代,,也就是說1000次迭代其背后代表著最多15000個模型,運(yùn)行時間就比較長,,而且基于隨機(jī)尋找超參數(shù)的策略,,迭代次數(shù)越多越好,所以這里的設(shè)置我們可以設(shè)置一個比較大的數(shù)然后掛機(jī)讓電腦跑即可,。
rr$aggregate(msr("classif.acc"))#模型真正的性能評價指標(biāo)#因?yàn)榍短昨?yàn)證并不是獲得超參數(shù)的流程,,而是為了獲得在最佳超參數(shù)配置下模型最真實(shí)的性能,所以這里我們只需要模型的評價指標(biāo)即可#如果我們需要讓最佳超參數(shù)建模獲得詳細(xì)信息則需要擬合任務(wù)來觸發(fā)at$train(zooTask)#擬合任務(wù)at$learner$param_set$values#獲取最佳超參數(shù)配置at$learner#查看XGboost的學(xué)習(xí)器情況at$learner$model#獲得最佳超參數(shù)配置的XGboost模型,,然后就可以進(jìn)行后面的一系列標(biāo)準(zhǔn)操作,,包括預(yù)測等等#事實(shí)上來說作為黑盒模型,我們很難從XGboost中獲得一些對我們有幫助的信息

這里我們需要注意,,XGboost最后相對黑盒模型,,本身并不具有太好的解釋性,所以想要像線性回歸那樣進(jìn)行解釋并不是一個很好的想法,,我們更關(guān)注模型的性能而非可解釋性,,那么這里又會引入一個問題,模型的可解釋性究竟什么時候是必須的,?

1. 在進(jìn)行基于重要決策的時候,,模型的可解釋性可以幫助我們了解這個模型是否具有“偏見”

2. 機(jī)器學(xué)習(xí)模型只有在可以解釋時才能進(jìn)?調(diào)試和審核

3. 當(dāng)然如果我們的模型沒有重大的作用其實(shí)并不需要其具有可解釋性

4.  當(dāng)問題被研究得很深入時,就不需要解釋性了

所以綜上所示我們不光了解了XGboost的常規(guī)實(shí)現(xiàn)邏輯以及相關(guān)的代碼操作,,更重要的是在機(jī)器學(xué)習(xí)的性能和可解釋性上我們應(yīng)該懂得如何進(jìn)行取舍,相對來說,,機(jī)器學(xué)習(xí)算法除了單純的樹模型以外,,其解釋性都不是特別優(yōu)秀,但是在犧牲解釋性的前提下獲得了相對卓越的性能,這也是一種平衡的操作

那么,,本期推文到這里就結(jié)束了,,基于R來說XGboost可以說是構(gòu)建模型中比較高級的操作了,各位小伙伴可以學(xué)習(xí)起來運(yùn)用在自己的課題設(shè)計(jì)中,,相信會給各位小伙伴帶來一定的幫助

我是晨曦,,我們下期再見~

參考教程

1.XGboost超參數(shù)解析:(23條消息) 數(shù)據(jù)挖掘小白系列!XGBOOST參數(shù)超詳解!參數(shù)選擇,順序,值一網(wǎng)打盡!一天天的就知道學(xué)習(xí)的博客-CSDN博客xgboost超參數(shù)
2.XGboost論文翻譯:(23條消息) XGBoost原論文閱讀翻譯了不起的趙隊(duì)的博客-CSDN博客xgboost論文翻譯
3.深入理解XGBOOST高效機(jī)器學(xué)習(xí)算法與進(jìn)階

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多