前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >🤩 xgboost | 经典机器学习大杀器之XGBoost!~

🤩 xgboost | 经典机器学习大杀器之XGBoost!~

作者头像
生信漫卷
发布2024-01-22 15:08:50
1750
发布2024-01-22 15:08:50
举报

1写在前面

好久没更了,实在是太忙了,年底了也没见病人减少嘛。🫠

今天讲讲机器学习的XGBoost,嘿嘿。🤩

XGBoostboosting算法的其中一种。😘

Boosting算法的思想是将许多弱分类器集成在一起形成一个强分类器。🤓

XGBoost是一种提升树模型,所以是将许多树模型集成在一起,形成一个很强的分类器,叫CART回归树模型。🌲

算法思想就是不断地添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数,去拟合上次预测的残差。☹️

当训练完成得到k棵树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。☝️

最后只需要将每棵树对应的分数加起来就是该样本的预测值。😘

2用到的包

代码语言:javascript
复制
rm(list = ls())
library(xgboost)
library(tidyverse)
library(data.table)
library(Matrix)

3示例数据

代码语言:javascript
复制
load("./Arthritis.rda")

df <- data.table(Arthritis, keep.rownames = F)

head(df)

4查看变量属性

代码语言:javascript
复制
str(df)

5添加新变量

5.1 多分组

对于第一个变量,我们通过四舍五入实际年龄来创建年龄组。🧐

每10年为一组。️😘

代码语言:javascript
复制
head(df[, AgeDiscret := as.factor(round(Age / 10, 0))])

5.2 随机分成两组

30岁为界限,进行任意拆分。🥳

代码语言:javascript
复制
head(df[, AgeCat := as.factor(ifelse(Age > 30, "Old", "Young"))])

6数据清洗

代码语言:javascript
复制
df[, ID := NULL]

代码语言:javascript
复制
levels(df[, Treatment])

7编码分类数据

接着我们把分类数据转换为哑变量。😘

目的是将分类变量的每个值转换为二进制特征,也就是0和1,也可以理解为稀疏矩阵。🧐

代码语言:javascript
复制
sparse_matrix <- sparse.model.matrix(Improved ~ ., data = df)[, -1]

head(sparse_matrix)

接着是数字向量,也就是我们后面用到的label。😏

代码语言:javascript
复制
output_vector <- df[, Improved] == "Marked"

8构建模型

每行都显示模型对数据的解释程度,越低越好。👍

代码语言:javascript
复制
bst <- xgboost(data = sparse_matrix, 
               label = output_vector,
               max_depth = 4,
               eta = 1, 
               nthread = 2, 
               nrounds = 10, 
               objective = "binary:logistic")

9变量重要性

9.1 构建变量重要性的data.table

每个变量的重要性可以通过GainCoverfrequency来评估:👇

1️⃣ Frequency。某个特征被用于在所有树中拆分数据的次数。

2️⃣ Cover。首先得到某个特征被用于在所有树中拆分数据的次数,然后要利用经过这些拆分点的训练数据数量赋予权重。

3️⃣ Gain。使用某个特征进行拆分时,获得的平均训练损失减少量。

代码语言:javascript
复制
importance <- xgb.importance(feature_names = colnames(sparse_matrix), model = bst)

head(importance)

9.2 普通可视化

可视化一下吧。😘

有点丑,以后我们再讲怎么美化。😜

代码语言:javascript
复制
xgb.plot.importance(importance_matrix = importance)

9.3 ggplot可视化

ggplot版可视化。😜

代码语言:javascript
复制
xgb.ggplot.importance(importance_matrix = importance,
                      n_clusters = c(1:10)
                      )

最后祝大家早日不卷!~


本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信漫卷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1写在前面
  • 2用到的包
  • 3示例数据
  • 4查看变量属性
  • 5添加新变量
    • 5.1 多分组
      • 5.2 随机分成两组
      • 6数据清洗
      • 7编码分类数据
      • 8构建模型
      • 9变量重要性
        • 9.1 构建变量重要性的data.table
          • 9.2 普通可视化
            • 9.3 ggplot可视化
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档