开发一款物联网软件大概多少钱
物联网app开发 你的位置:开发一款物联网软件大概多少钱 > 物联网app开发 >

物联网软件开发公司 R言语xgboost快速上手

发布日期:2024-11-06 04:21    点击次数:180

💡专注R言语在🩺生物医学中的使用

设为“星标”,精彩可以过

xgboost(Extreme Gradient Boosting),极限梯度晋升,是基于梯度晋升树(gradient boosting decision tree,GBDT)达成的集成(ensemble)算法,本色上依然一种晋升(boosting)算法,然则把速率和后果晋升到最强,是以加了Extreme。XGBoost是陈天奇等东谈主开源的一个机器学习式样,CatBoost和XGBoost、LightGBM并称为GBDT的三大主流神器,齐是在GBDT算法框架下的一种检阅达成。

xgboost的一些特色包括:

速率快后果高:默许会借助OpenMP进行并行绸缪中枢代码使用C++达成,速率快,易共享;正则化:可以使用正则化技能幸免过度拟合;交叉考据:里面会进行交叉考据;缺失值处置:可以处置缺失值,不需要提前插补;适用于多种任务类型:相沿纪念分类排序等,还相沿用户自界说的地方函数;

对于更多它的布景常识,提出人人我方学习,咱们望望它在R言语中的达成。

本文目次:

准备数据

拟合模子

揣摸

结果输出日记

变量热切性

稽察树的信息

赛后,阿根廷队核心梅西接受了媒体采访。他表示:“这届美洲杯的比赛条件非常艰难,场地状况不佳,气温也很高。但我现在正在尽情享受自己职业生涯中的最后一届美洲杯,就像当初享受最后一届世界杯一样,这是我最后的战斗!”

[扫码下载app,中过数字彩1千万以上的专家都在这儿!]

保存加载模子

参考尊府

准备数据

先用自带数据演示一下简便的使用方式。

最初是加载数据,这是一个二分类数据,其中label是末端变量,使用0和1暗示,其余是揣摸变量。

library(xgboost)rm(list = ls())# load datadata(agaricus.train, package='xgboost')data(agaricus.test, package='xgboost')train <- agaricus.traintest <- agaricus.teststr(train)## List of 2##  $ data :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots##   .. ..@ i       : int [1:143286] 2 6 8 11 18 20 21 24 28 32 ...##   .. ..@ p       : int [1:127] 0 369 372 3306 5845 6489 6513 8380 8384 10991 ...##   .. ..@ Dim     : int [1:2] 6513 126##   .. ..@ Dimnames:List of 2##   .. .. ..$ : NULL##   .. .. ..$ : chr [1:126] "cap-shape=bell" "cap-shape=conical" "cap-shape=convex" "cap-shape=flat" ...##   .. ..@ x       : num [1:143286] 1 1 1 1 1 1 1 1 1 1 ...##   .. ..@ factors : list()##  $ label: num [1:6513] 1 0 0 1 0 0 0 1 0 0 ...str(test)## List of 2##  $ data :Formal class 'dgCMatrix' [package "Matrix"] with 6 slots##   .. ..@ i       : int [1:35442] 0 2 7 11 13 16 20 22 27 31 ...##   .. ..@ p       : int [1:127] 0 83 84 806 1419 1603 1611 2064 2064 2701 ...##   .. ..@ Dim     : int [1:2] 1611 126##   .. ..@ Dimnames:List of 2##   .. .. ..$ : NULL##   .. .. ..$ : chr [1:126] "cap-shape=bell" "cap-shape=conical" "cap-shape=convex" "cap-shape=flat" ...##   .. ..@ x       : num [1:35442] 1 1 1 1 1 1 1 1 1 1 ...##   .. ..@ factors : list()##  $ label: num [1:1611] 0 1 0 0 0 0 1 0 1 0 ...class(train$data)## [1] "dgCMatrix"## attr(,"package")## [1] "Matrix"

xgboost对数据方式是有条目的,可以看到train和test齐是列表,其中包含了揣摸变量data和末端变量label,其中label是使用0和1暗示的。data部分是稀零矩阵的样子(dgCMatrix)。

# 稽察数据维度,6513行,126列dim(train$data)## [1] 6513  126table(train$label)## ##    0    1 ## 3373 3140
拟合模子

接下来即是使用考验数据拟合模子:

model <- xgboost(data = train$data, label = train$label,                  max.depth = 2, # 树的最大深度                 eta = 1, # 学习率                 nrounds = 2,                 nthread = 2, # 使用的CPU线程数                 objective = "binary:logistic")## [1] train-logloss:0.233376 ## [2] train-logloss:0.136658

其中的参数nround在这里暗示最终模子中树的数目,objective是地方函数。

除了使用列表传入数据,也相沿R言语中的密集矩阵(matrix),比如:

model <- xgboost(data = as.matrix(train$data), label = train$label,                  max.depth = 2,                  eta = 1,                  nrounds = 2,                 nthread = 2,                  objective = "binary:logistic")
## [1] train-logloss:0.233376 ## [2] train-logloss:0.136658

劝诱者最推选的方式依然稀奇为xgboost设想的xgb.DMatrix方式。

# 建造xgb.DMatrixdtrain <- xgb.DMatrix(data = train$data, label = train$label)xx <- xgboost(data = dtrain, # 这么就毋庸单独传入label了              max.depth = 2,               eta = 1,               nrounds = 2,              nthread = 2,               objective = "binary:logistic"              )
## [1] train-logloss:0.233376 ## [2] train-logloss:0.136658

这个方式亦然xgboost稀奇设想的,有助于更好更快的进行绸缪,还可以相沿更多的信息传入。可以通过getinfo取得其中的元素:

head(getinfo(dtrain, "label"))
## [1] 1 0 0 1 0 0
揣摸

拟合模子后,就可以对新数据进行揣摸了:

# predictpred <- predict(model, test$data)head(pred)## [1] 0.28583017 0.92392391 0.28583017 0.28583017 0.05169873 0.92392391range(pred)## [1] 0.01072847 0.92392391

咱们的任务是一个二分类的,然则xgboost的揣摸末端是概率,物联网软件开发公司并不是径直的类别。咱们需要我方诊治一下,比如要领概率大于0.5即是类别1,小于等于0.5即是类别0(这其实也可以手脚念超参数诊治的)。

pred_label <- ifelse(pred > 0.5,1,0)table(pred_label)## pred_label##   0   1 ## 826 785# 混浊矩阵table(test$label, pred_label)##    pred_label##       0   1##   0 813  22##   1  13 763

全对,准确率100%。

除此以外还提供一个xgb.cv()用于达成交叉考据的建模,使用方式与xgboost()一致:

cv.res <- xgb.cv(data = train$data, label = train$label,                  nrounds = 2,                 objective = "binary:logistic",                 nfold = 10 # 交叉考据的折数                 )## [1] train-logloss:0.439723+0.000182 test-logloss:0.439976+0.000908 ## [2] train-logloss:0.299610+0.000125 test-logloss:0.299913+0.001478
min(cv.res$evaluation_log)
## [1] 0.0001254714
结果输出日记

xgboost()和xgb.train()有参数verbose可以结果输出日记的若干,默许是verbose = 1,输出性能规画末端。xgboost()是xgb.train()的简便封装,xgb.train()是考验xgboost模子的高等接口。

要是是0,则是莫得任何输出:

xx <- xgboost(data = train$data, label = train$label, objective = "binary:logistic"        ,nrounds = 2        ,verbose = 0        )

要是是2,会输出性能规画末端和其他信息(这里没深远):

xx <- xgboost(data = train$data, label = train$label, objective = "binary:logistic"        ,nrounds = 2        ,verbose = 2        )
## [1] train-logloss:0.439409 ## [2] train-logloss:0.299260

xgb.cv()的verbose参数只消TRUE和FALSE。

变量热切性

xgboost中变量的热切性是这么绸缪的:

咱们如安在xgboost中界说特色的热切性?在xgboost中,每次分割齐试图找到最好特征和分割点(splitting point)来优化地方。咱们可以绸缪每个节点上的增益,它是所选特征的孝顺。终末,咱们对统统的树进行沟通,总结每个特征的孝顺,并将其视为热切性。要是特征的数目很大,咱们也可以在绘画图之前对特征进行聚类。

稽察变量热切性:

importance_matrix <- xgb.importance(model = model)importance_matrix
##                    Feature       Gain     Cover Frequency## 1:               odor=none 0.67615470 0.4978746       0.4## 2:         stalk-root=club 0.17135376 0.1920543       0.2## 3:       stalk-root=rooted 0.12317236 0.1638750       0.2## 4: spore-print-color=green 0.02931918 0.1461960       0.2

可视化变量热切性:

xgb.plot.importance(importance_matrix)

图片

plot of chunk unnamed-chunk-14

大概ggplot2版块:

xgb.ggplot.importance(importance_matrix)

图片

稽察树的信息

可以把学习好的树打印出来,稽察具体情况:

xgb.dump(model, with_stats = T)
##  [1] "booster[0]"                                                       ##  [2] "0:[f28<0.5] yes=1,no=2,missing=1,gain=4000.53101,cover=1628.25"   ##  [3] "1:[f55<0.5] yes=3,no=4,missing=3,gain=1158.21204,cover=924.5"     ##  [4] "3:leaf=1.71217716,cover=812"                                      ##  [5] "4:leaf=-1.70044053,cover=112.5"                                   ##  [6] "2:[f108<0.5] yes=5,no=6,missing=5,gain=198.173828,cover=703.75"   ##  [7] "5:leaf=-1.94070864,cover=690.5"                                   ##  [8] "6:leaf=1.85964918,cover=13.25"                                    ##  [9] "booster[1]"                                                       ## [10] "0:[f59<0.5] yes=1,no=2,missing=1,gain=832.544983,cover=788.852051"## [11] "1:[f28<0.5] yes=3,no=4,missing=3,gain=569.725098,cover=768.389709"## [12] "3:leaf=0.78471756,cover=458.936859"                               ## [13] "4:leaf=-0.968530357,cover=309.45282"                              ## [14] "2:leaf=-6.23624468,cover=20.462389"

还可以可视化树:

xgb.plot.tree(model = model)

图片

这个图展示了2棵树的分支流程,因为咱们缔造了nround=2,是以末端即是只消2棵树。

要是树的数目特别多的时刻,这么每棵树看过来并不是很直不雅,常常xgboost固然不如立时丛林需要的树多,然则几十棵老是要的,是以xgboost提供了一种能把统统的树连合在悉数展示的方式。

# 多棵树展示在悉数xgb.plot.multi.trees(model = model,fill=TRUE)

图片

app

这幅图即是把上头那张图的信息整合到了悉数,人人仔细对比下图中的数字就会发现信息是雷同的哦。

除了以上方式可以检查树的信息外,还可以通过稽察树的深度来检查树的结构。

bst <- xgboost(data = train$data, label = train$label, max.depth = 15,                 eta = 1, nthread = 2, nround = 30, objective = "binary:logistic",                 min_child_weight = 50,verbose = 0)xgb.plot.deepness(model = bst)

图片

plot of chunk unnamed-chunk-19

这两幅图的横坐标齐是树的深度,上头的图纵坐标是叶子的数目,展示了每层深度中的叶子数目。底下的图纵坐标是每片叶子的归一化之后的加权遮掩。

从图中可以看出树的深度在5之后,叶子的数目就很少了,这辅导咱们为了驻扎过拟合,可以把树的深度结果在5以内。

保存加载模子

保存加载考验好的模子:

# 保存xgb.save(model, "xgboost.model")# 加载xgb.load("xgboost.model")aa <- predict(model, test$data)

在R言语中除了径直使用xgboost这个R包达成以外,还有好多轮廓性的R包齐可以达成xgboost算法,并相沿超参数调优等更多任务,比如caret、tidymodels、mlr3。

参考尊府官方文档:https://xgboost.readthedocs.io/en/latest/R-package/xgboostPresentation.htmlhttps://www.r-bloggers.com/2016/03/an-introduction-to-xgboost-r-package/

关联咱们物联网软件开发公司,温煦咱们

免费QQ换取群1:613637742(已满)免费QQ换取群2:608720452公众号音讯界濒临于作家取得关联方式知乎、CSDN、简书同名账号哔哩哔哩:阿越即是我 本站仅提供存储做事,统统内容均由用户发布,如发现存害或侵权内容,请点击举报。

下一篇:没有了

Powered by 开发一款物联网软件大概多少钱 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2024 云迈科技 版权所有