Xgboost算法——Kaggle案例

2023-11-12


作者简介Introduction

苏高生,西南财经大学统计学硕士毕业,现就职于中国电信,主要负责企业存量客户大数据分析、数据建模。研究方向:机器学习,最喜欢的编程语言:R语言,没有之一。

E-mail:sugs01@outlook.com

零、案例背景介绍与建模思路说明

1.背景介绍

本案例使用的数据为kaggle中“Santander Customer Satisfaction”比赛的数据。此案例为不平衡二分类问题,目标为最大化auc值(ROC曲线下方面积)。竞赛题目链接为:https://www.kaggle.com/c/santander-customer-satisfaction 。目前此比赛已经结束。

2.建模思路

此文档采用R中的mlr包(综合型机器学习包)调用xgboost算法进行分类。
1) 读取数据;

2) 数据探索:设置并行运算,弥补缺失值,观察数据类别是否平衡,删除常数列,取训练数据集与测试数据集都包含的字段

3) 特征选择:

I、 对数据类别不平衡进行处理(处理方法可以采用过抽样/欠抽样/集成等),本案例采用过抽样方法,mlr包对应的函数为oversample,初步确定适宜的过抽样比例;

II、 使用mlr包的generateFilterValuesData函数取95%的信息增益值;

4) 调参:逐步调试过抽样比例rate、eta、max_depth、min_child_weight、gamma、colsample_bytree等参数,并多次调试,直到满意为止;

5) 集成预测结果:在每个参数的适宜范围内随机抽取参数值构建xgboost模型,并将多个模型进行集成,输出预测结果;本案例所用程序输出结果的ROC值为.816584

一、读取数据

options(java.parameters = "-Xmx8g") ## 特征选择时使用,但是需要在加载包之前设置

library(readr)

xgb_tr1 <- read_csv("C:/Users/Administrator/kaggle/scs/train.csv")

xgb_te1 <- read_csv("C:/Users/Administrator/kaggle/scs/test.csv")

二、数据探索

1.设置并行运算

library(dplyr)

library(mlr)

library(parallelMap)

parallelStartSocket(4)

2.数据各列初步探索

summarizeColumns(xgb_tr1)

3.处理缺失值:impute missing values by mean and mode

imp_tr1 <- impute(

  as.data.frame(xgb_tr1),

  classes = list(    integer = imputeMean(),

    numeric = imputeMean()

  )

)

imp_te1 <- impute(  as.data.frame(xgb_te1),

  classes = list(

    integer = imputeMean(),

    numeric = imputeMean()

  )

)

4.观察训练数据类别的比例–数据类别不平衡

table(xgb_tr1$TARGET)

5.剔除数据集中的常数列

xgb_tr2 <- removeConstantFeatures(imp_tr1$data)

xgb_te2 <- removeConstantFeatures(imp_te1$data)

6.保留训练数据集与测试数据及相同的列

tr2_name <- data.frame(tr2_name = colnames(xgb_tr2))
te2_name <- data.frame(te2_name = colnames(xgb_te2))

tr2_name_inner <- tr2_name %>%

  inner_join(te2_name, by = c('tr2_name' = 'te2_name'))

TARGET = data.frame(TARGET = xgb_tr2$TARGET)
xgb_tr2 <- xgb_tr2[, c(tr2_name_inner$tr2_name[2:dim(tr2_name_inner)[1]])]
xgb_te2 <- xgb_te2[, c(tr2_name_inner$tr2_name[2:dim(tr2_name_inner)[1]])]

xgb_tr2 <- cbind(xgb_tr2, TARGET)

三、特征筛选–信息增益

1.构建基础任务

xgb_tr2$TARGET <- factor(xgb_tr2$TARGET)

xgb.task <- makeClassifTask(data = xgb_tr2, target = 'TARGET')

set.seed(0)

2.过抽样栅格搜索—搜索过抽样比率

##### 1)搜索栅格

grid_search <- expand.grid(

    over_rate = seq(1, 30, 2))

##### 2)auc值集合

perf_overrate_1 <- numeric(length = dim(grid_search)[1])

##### 3)训练

for(i in 1:dim(grid_search)[1]){

    ## 过抽样任务

    xgb.task.over <- oversample(xgb.task, rate = i)

    ## 学习参数

    xgb.ps <- makeParamSet(

        makeDiscreteParam('eta', values = .1)

    )

    ## 学习次数

    xgb.ctrl <-  makeTuneMultiCritControlGrid()

    ## 模型描述--重复抽样设置

    xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

    xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

    ## 构建学习器

    xgb.learner = makeLearner(

        'classif.xgboost',

        predict.type = 'prob'

    )

    ## 学习

    res <- tuneParamsMultiCrit(

        learner = xgb.learner,

        task = xgb.task.over,

        resampling = xgb.rdesc,

        par.set = xgb.ps,

        measures = list(kappa, tpr, tnr, auc),

 ### 可以根据评估标准自行选择

        control = xgb.ctrl,

        show.info = TRUE

    )

    ## auc值

    perf_overrate_1[i] <-as.data.frame(trafoOptPath(res$opt.path))$auc.test.mean

}

##### 4)结果表,第XX个模型的auc最大

cat("Model ", which.max(perf_overrate_1), " is largest auc: ", max(perf_overrate_1), sep = "")

##### 5)auc最大的模型参数如下:

print(grid_search[which.max(perf_overrate_1), ])

结论:取过抽样比率为rate=15

3.特征选择

##### 1)特征选择

xgb.task.over <- oversample(xgb.task, rate = 15)

fv_time <- system.time(

    fv <- generateFilterValuesData(

        xgb.task.over,

        method = c('information.gain')

    )

)

 ##### 2)制图查看

# plotFilterValues(fv)

# plotFilterValuesGGVIS(fv)

##### 3)提取95%的信息增益

fv_data2 <- fv$data %>%

    arrange(desc(information.gain)) %>%

    mutate(info_gain_cul = cumsum(information.gain) / sum(information.gain))


fv_data2_filter <- fv_data2 %>% filter(info_gain_cul <= 0.9508198)

dim(fv_data2_filter)

fv_feature <- fv_data2_filter$name

xgb_tr3 <- xgb_tr2[, c(fv_feature, 'TARGET')]

xgb_te3 <- xgb_te2[, fv_feature]

##### 4)写出数据

write_csv(xgb_tr3, 'C:/Users/Documents/kaggle/scs/xgb_tr3.csv')

write_csv(xgb_te3, 'C:/Users/Documents/kaggle/scs/xgb_te3.csv')

四、调参-过抽样&欠抽样

1.构建基础任务

library(mlr)

xgb.task <- makeClassifTask(data = xgb_tr3, target = 'TARGET')

2.过抽样栅格搜索—搜索过抽样比率

##### 1)搜索栅格

grid_search <- expand.grid(

    over_rate = seq(1, 30, 2)

)

##### 2)auc值集合

perf_overrate_1 <- numeric(length = dim(grid_search)[1])

##### 3)训练

for(i in 1:dim(grid_search)[1]){

    ## 过抽样任务

    xgb.task.over <- oversample(xgb.task, rate = i)

    ## 学习参数

    xgb.ps <- makeParamSet(

        makeDiscreteParam('eta', values = .1)

    )

    ## 学习次数

    xgb.ctrl <-  makeTuneMultiCritControlGrid()

    ## 模型描述--重复抽样设置

    xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

    ## 构建学习器

    xgb.learner = makeLearner(

        'classif.xgboost',

        predict.type = 'prob'

    )

    ## 学习

    res <- tuneParamsMultiCrit(

        learner = xgb.learner,

        task = xgb.task.over,

        resampling = xgb.rdesc,

        par.set = xgb.ps,

        measures = list(kappa, tpr, tnr, auc),

 ### 可以根据评估标准自行选择

        control = xgb.ctrl,

        show.info = TRUE

    )

    ## auc值

    perf_overrate_1[i] <- as.data.frame(trafoOptPath(res$opt.path))$auc.test.mean

}

##### 4)结果表,第XX个模型的auc最大

cat("Model ", which.max(perf_overrate_1), " is largest auc: ", max(perf_overrate_1), sep = "")

##### 5)auc最大的模型参数如下:

print(grid_search[which.max(perf_overrate_1), ])

结论:取rate = 19

3.过抽样栅格搜索—搜索学习速率

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 19)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = 2 ^ (-(8:1)))

)

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid()

 ##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob'

)

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), 

### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE)

##### 7)auc值集合

perf_eta_1 <- as.data.frame(trafoOptPath(res$opt.path))

auc值对eta完全不敏感

4.过抽样栅格搜索—搜索树的最大深度

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 19)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = seq(4, 25, 1)),

    makeDiscreteParam('gamma', values = 10))

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid()

 ##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob')

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc),

 ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE)

##### 7)auc值集合

perf_maxdepth_1 <- as.data.frame(trafoOptPath(res$opt.path))

plot(perf_maxdepth_1$auc.test.mean)

结论:auc仍随max_depth单调递增,但auc增长速度减缓;因此暂去max_depth = 15

5.过抽样栅格搜索—gamma

##### 1)学习任务:

xgb.task.over <- oversample(xgb.task, rate = 15)

##### 2)学习参数xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = 15),

    makeDiscreteParam('min_child_weight', values = 2),

    makeDiscreteParam('gamma', values = 2^(-3:3))

)

perf_gamma_1 <- numeric(length = length(xgb.ps$pars$gamma$values))

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid() 

##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob'

)

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE

)

##### 7)auc值集合

perf_gamma_1 <- as.data.frame(trafoOptPath(res$opt.path))

结论:auc随gamma单调递减,递减幅度较小

6.过抽样栅格再次搜索—gamma

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 19)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = 15), 

   makeDiscreteParam('min_child_weight', values = 1),

    makeDiscreteParam('gamma', values = seq(10, 45, by = 2))

)

perf_gamma_2 <- numeric(length = length(xgb.ps$pars$gamma$values))

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid()

 ##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob'

)

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE

)

##### 7)auc值集合

perf_gamma_2 <- as.data.frame(trafoOptPath(res$opt.path))

结论:auc随gamma单调递减,暂取gamma = 23

7.过抽样栅格搜索—搜索min_child_weight

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 19)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = 15),

    makeDiscreteParam('gamma', values = 23),

    makeDiscreteParam('min_child_weight', values = 2 ^ (0:5))

)

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid() 

##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob')

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE)

##### 7)auc值集合

perf_minchildweight_1 <- as.data.frame(trafoOptPath(res$opt.path))

结论:aauc随min_child_weight增加而先上升后下降,当min_child_weight = 2时达到最大值0.9191293,

故设定min_child_weight = 2

8.过抽样栅格搜索—colsample_bytree

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 19)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = 15),

    makeDiscreteParam('min_child_weight',values = 2),

    makeDiscreteParam('gamma', values = 23),

    makeDiscreteParam('colsample_bytree', values = seq(.1, 1, .1))

)

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid()

 ##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob'

)

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE

)

##### 7)auc值集合

perf_colsamplebytree_1 <- as.data.frame(trafoOptPath(res$opt.path))

结论:auc随着colsample_bytree单调递增,故设定colsample_bytree = 1

9.过抽样栅格搜索—再次搜索过抽样比率

##### 1)搜索栅格

grid_search <- expand.grid(

    over_rate = seq(1, 30)

)

##### 2)auc值集合

perf_overrate <- numeric(length = dim(grid_search)[1])

##### 3)训练

for(i in 1:dim(grid_search)[1]){

    ## 过抽样任务

    xgb.task.over <- oversample(xgb.task, rate = i)

    ## 学习参数

    xgb.ps <- makeParamSet(

        makeDiscreteParam('eta', values = .1),

        makeDiscreteParam('max_depth', values = 15),

        makeDiscreteParam('min_child_weight', values = 2),

        makeDiscreteParam('gamma', values = 23),

        makeDiscreteParam('colsample_bytree', values = 1)

    )

    ## 学习次数

    xgb.ctrl <-  makeTuneMultiCritControlGrid()

    ## 模型描述--重复抽样设置

    xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

    xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

    ## 构建学习器

    xgb.learner = makeLearner(

        'classif.xgboost',

        predict.type = 'prob'

    )

    ## 学习

    res <- tuneParamsMultiCrit(

        learner = xgb.learner,

        task = xgb.task.over,

        resampling = xgb.rdesc,

        par.set = xgb.ps,

        measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

        control = xgb.ctrl,

        show.info = TRUE

    )

    ## auc值

    perf_overrate[i] <- as.data.frame(trafoOptPath(res$opt.path))$auc.test.mean

}

##### 4)结果表,第XX个模型的auc最大

cat("Model ", which.max(perf_overrate), " is largest auc: ", max(perf_overrate), sep = "")

##### 5)auc最大的模型参数如下:

print(grid_search[which.max(perf_overrate), ])

结论:auc随over_rate的增大而先上升后下降,峰值为0.9232057,此时over_rate = 25,

但是从plot(perf_overrate)图示可以看到设定over_rate = 18最为合适

10.过抽样栅格搜索—max_depth

##### 1)学习任务

xgb.task.over <- oversample(xgb.task, rate = 18)

##### 2)学习参数

xgb.ps <- makeParamSet(

    makeDiscreteParam('eta', values = .1),

    makeDiscreteParam('max_depth', values = seq(5, 29, 2)),

    makeDiscreteParam('min_child_weight', values = 2),

    makeDiscreteParam('gamma', values = 23),

    makeDiscreteParam('colsample_bytree', values = 1)

)

##### 3)学习次数

xgb.ctrl <-  makeTuneMultiCritControlGrid()

 ##### 4)模型描述--重复抽样设置

xgb.rdesc <- makeResampleDesc('CV', stratify = TRUE)

##### 5)构建学习器

xgb.learner = makeLearner(

    'classif.xgboost',

    predict.type = 'prob'

)

##### 6)学习

res <- tuneParamsMultiCrit(

    learner = xgb.learner,

    task = xgb.task.over,

    resampling = xgb.rdesc,

    par.set = xgb.ps,

    measures = list(kappa, tpr, tnr, auc), ### 可以根据评估标准自行选择

    control = xgb.ctrl,

    show.info = TRUE)

##### 7)auc值集合

perf_maxdepth_2 <- as.data.frame(trafoOptPath(res$opt.path))

结论:auc随max_depth调递增,树深增加,计算量加大,因此设定max_depth = 17(拐点),不再增加

11.用以上参数训练多个模型集成结果

##### 0)参数

set.seed(1)grid_search <- expand.grid(

    over_rate = sample(13:29, 5, replace = FALSE),

    max_depth = sample(10:25, 5, replace = FALSE),

    min_child_weight = sample(2:4, 2, replace = FALSE),

    gamma = sample(25:40, 10, replace = FALSE),

    colsample_bytree = sample(seq(.7, .95, .02), 10, replace = FALSE)

)

sample_ind <- sample(5000, 100, replace = FALSE)

xgb.pred <- list()

grid_search2 <- grid_search[sample_ind, ]

for (i in 1:nrow(grid_search2)){

    ##### 1)构建学习任务

    xgb.task.over <- oversample(xgb.task, rate = grid_search2[i, 'over_rate'])

    ##### 2)设定模型参数

    xgb.ps <- list(

        eta = .1,

        max_depth = grid_search2[i, 'max_depth'],

        min_child_weight = grid_search2[i, 'min_child_weight'],

        gamma = grid_search2[i, 'gamma'],

        colsample_bytree = grid_search2[i, 'colsample_bytree']

    )

    ##### 3)构建学习器

    xgb.lrn.over = makeLearner(

        cl = 'classif.xgboost',

        predict.type = 'prob',

        fix.factors.prediction = FALSE,

        par.vals = xgb.ps

    )

    ##### 4)训练模型

    xgb.train.over <- train(

        learner = xgb.lrn.over,

        task = xgb.task.over

    )

    ##### 5)预测

    xgb.pred[[i]] <- predict(xgb.train.over, newdata = xgb_te3)

}

##### 集成预测结果

xgb.pred1 <- list()

for (i in 1:nrow(grid_search2)){

    xgb.pred1[[i]] <- xgb.pred[[i]]$data$prob.1

}

xgb.pred2 <- matrix(unlist(xgb.pred1), ncol = 100)

xgb.pred3 <- data.frame(prob1 = apply(xgb.pred2, 1, mean))

##### 输出结果

write_csv(xgb.pred3, "C:/Users/Administrator/kaggle/scs/xgb.pred.over1.csv")




 往期精彩内容整理合集 

2017年R语言发展报告(国内)

R语言中文社区历史文章整理(作者篇)

R语言中文社区历史文章整理(类型篇)


公众号后台回复关键字即可学习

回复 R                  R语言快速入门及数据挖掘 
回复 Kaggle案例  Kaggle十大案例精讲(连载中)
回复 文本挖掘      手把手教你做文本挖掘
回复 可视化          R语言可视化在商务场景中的应用 
回复 大数据         大数据系列免费视频教程 
回复 量化投资      张丹教你如何用R语言量化投资 
回复 用户画像      京东大数据,揭秘用户画像
回复 数据挖掘     常用数据挖掘算法原理解释与应用
回复 机器学习     人工智能系列之机器学习与实践
回复 爬虫            R语言爬虫实战案例分享

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xgboost算法——Kaggle案例 的相关文章

  • 微信开发------微信公众号新老账户粉丝迁移问题

    一 迁移注意事项 I 账号迁移申请提交后原账号用户信息无法再通过接口获取 II 申请提交后 opneid装换接口最多保留15天 超过15天接口失效 无法继续装换openid III 装换的openid不应都能装换完成 只有关注旧公众号的用户
  • 蓝桥杯常见算法

    枚举 i 排列型枚举 next permutation ii 组合型枚举 iii 选择型枚举 搜索 i Dfs ii Bfs 判断闰年 二分 高精度运算 排序算法 i 快速排序 ii 归并排序 前缀和 差分 线段树和树状数组 字符串处理 K
  • ACTF新生赛2020 frequency

    ACTF新生赛2020 frequency 1 题目概述 2 解题过程 根据题目名称frequency与文件内容猜测应该是字频方向 如果打开文档是空白的 就搜索 显示隐藏内容 a2draGxmY290bnRpdWZwZ2hodGN3dWpr
  • IDEA gradle项目出现java.lang.OutOfMemoryError: GC overhead limit exceeded 之类的错误

    试了很多很多方法都不管用 最后在gradle目录下添加gradle properties文件得以解决内容如下 项目所在目录的磁盘空间一定要比下面的配置大才行 org gradle daemon true org gradle configu
  • 高手手把手教你组件封装步骤

    我将在这个博客中更新各种组件的封装 轮播图 骨架屏 复选框 对话框 面包屑组件 看到就是学到 偷着乐吧 轮播图封装详解 注册一个vue文件 在src的components中注册一个Carousel vue 在vue use中注册全局组件 i
  • obs上传文件到服务器,文件上传到obs

    文件上传到obs 内容精选 换一换 设备上报文件上传结果 Topic oc devices device id sys events upServiceEvent定义表paras参数列表 从OBS导入数据到集群之前 需要提前准备数据源文件
  • Vue3——Axios(网络请求库)

    文章目录 求一键三连 前言 认识axios 使用Axios 常见请求演示 配置选项 baseURL all 创建axios实例 请求拦截 掌握 对axios的类的封装 掌握 老师封装好的一个更完全的axios库 求一键三连 希望大家看完觉得
  • Web3j签名与验签

    闲时 给大家讲讲本人在做项目过程中涉及到的区块链签名相关业务 希望对做区块链行业的同行有所帮助 主要是针对Java程序员围绕web3j库进行区块链以太坊开发 本地签名与验签 代码实例 Description Web3j签名验签 public
  • 什么叫基本表?什么是视图?二者的区别和联系是什么?

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 视图 在SQL中 视图是外模式一级数据结构的基本单位 它是从一个或几个基本表中导出的 表 是从现有基本表中抽取若干子集组成用户的 专用表 基本表 基本表的定义指建立基本关系
  • minio怎么连接文件服务器,【FastAPI基础】17.2、接入docker minio文件服务器操作文件,附源码...

    引言 最近工作中有机会接触FastAPI这个框架 所以就把官方文档看了一遍 对框架的各个特性及使用方法做了总结 会逐步的发出来 希望对您有用 如果您之前接触过python的其他框架 看起来会非常简单和顺畅 其实就是很简单 废话不多说 直接上
  • [Error] invalid operands to binary ^ (have ‘double‘ and ‘float‘)

    C C 中不能直接使用 在C C 中不能使用 来表示指数 只能用 如果想使用指数 只能建立循环多次相乘或者直接用乘法写出多个 下面是我的代码 注释部分为原来使用的指数形式 会报以上错误 或者引用数学函数 在前面加上 include
  • Python3 基本数据类型(List(列表))

    Python3 基本数据类型 List 列表 List 列表 是 Python 中使用最频繁的数据类型 列表可以完成大多数集合类的数据结构实现 列表中元素的类型可以不相同 它支持数字 字符串甚至可以包含列表 所谓嵌套 列表是写在方括号 之间
  • 2023国赛数学建模思路 - 案例:最短时间生产计划安排

    文章目录 0 赛题思路 1 模型描述 2 实例 2 1 问题描述 2 2 数学模型 2 2 1 模型流程 2 2 2 符号约定 2 2 3 求解模型 2 3 相关代码 2 4 模型求解结果 建模资料 0 赛题思路 赛题出来以后第一时间在CS
  • 传奇服务端GOM引擎和GEE引擎区别在哪里?

    关于GameOfMir跟GEE引擎之间的区别简单说Gom引擎支持了BDE数据库 Access数据库 而GEE目前还没有支持BDE数据库 mysql数据库可惜mysql数据库支持还不完善 引擎没有绝对的好坏主要是在使用上操作上功能都差不多今天
  • 【安利】mac免费开源文字识别-使用脚本和快捷指令-可识别中文(利用macOCR)

    前言 在mac上 常用的截图文本识别软件有TextScanner iText等等 但是它们都是付费的 这次我无意发现了利用脚本和苹果快捷指令就可以使用的开源截图文本识别软件 推荐给大家 github地址为 schappim macOCR G
  • word2vec中文相似词计算和聚类的使用说明及c语言源码

    word2vec相关基础知识 下载安装参考前文 word2vec词向量中文文本相似度计算 目录 word2vec使用说明及源码介绍 1 下载地址 2 中文语料 3 参数介绍 4 计算相似词语 5 三个词预测语义语法关系 6 关键词聚类 1
  • Django 运行报错 Manager isnt accessible via Category instances

    错误 Manager isn t accessible via Category instances 原因 views handler里面写错 category s Category objects all 正确的写法是 category
  • 如何运用krpano生成第一全景项目

    使用droplet制作 生成一个全景 下载好krpano包后 解压文件夹 可以看到文件夹下有诸多文件 这时打开全景图片 拖入 droplet bat 文件 马上立刻就生成一个全景项目文件了 打开新生成的文件夹 打开tour html文件 用
  • Linux磁盘分区UUID查看和修改

    查看磁盘的UUID 方法1 root ac810 blkid dev sda2 UUID 4e87d18b 3223 4f9d aa48 2bd450ad33d0 TYPE ext4 PARTUUID 337a99de 78d8 4d7d
  • R语言-画散点图

    plot 函数 plot cars dist cars speed y x main XXX 画标题 xlab XXX X坐标轴标题 ylab XXX Y坐标轴标题 xlim c 0 30 设置X轴范围为从0到30 ylim c 0 140

随机推荐

  • sklearn中的fit_transform、获取特征、标签转换

    skearn中有数据预处理的功能 如fit transform 和fit transform fit 求得训练集X的均值 方差 最大值 最小值 这些训练集X固有的属性 transform 在fit的基础上 进行标准化 降维 归一化等操作 f
  • Linux如何检查目录大小

    1 查看当前文件目录各个文件夹大小 du h max depth 1 查看指定目录 du h max depth 1 path 2 查看当前目录下所有目录及子目录大小 du h 代表当前目录下 也可以换成一个明确的路径 h表示用K M G的
  • 基于opencv-python的人脸识别和鸟图识别

    目录 图像识别 人脸识别 鸟图识别 一 人脸识别 即使是地铁挤压的人脸 也是有尊严的 值得被检测 经过 OpenCV 的努力 成功检测 左图是正常被识别的人脸 中图由于挤地铁人脸已不可识别 右图OpenCV单应性变换后 拯救了被miss的人
  • Docker部署Jupyter

    Docker部署Jupyter Docker安装 拉取镜像 docker pull jupyter base notebook 创建挂载目录 mkdir p opt jupyter jovyan chmod 777 opt jupyter
  • 利用 Python PyPDF2库轻松提取PDF文本(及其他高级操作)

    当需要从PDF文件中提取文本时 Python中的PyPDF2库是一个非常有用的工具 无论您是需要分析PDF文档中的内容还是需要在文档中搜索特定的信息 PyPDF2都可以帮助您轻松实现这些任务 在本文中 我们将探讨如何使用PyPDF2库提取P
  • Python编写时钟程序(运行结果在“视频“选项里)(适合学过编程2年00个月~2年11个月的人(中级篇))

    1 初始设置 from datetime import 导入相关库 from turtle import from time import sleep setup 675 675 设置窗口大小 hideturtle 隐藏海龟 mode lo
  • ElasticSearch 7.7.0 高级篇-搜索技术

    前言 有了前面的理论知识和上机实操的经验 那么下面我们将使用程序开发es 当然本篇说白了就是前面知识的总结和回顾 一 ES不分词 exact value 搜索 1 1 实战体验term filter各种不分词搜索 term filter q
  • LdapTemplate对AD域进行查询1000条记录限制,实测有效!

    公司的一个项目要从AD上取数据 但是用SpringLdap获取所有用户的时候会默认显示1000条数据 ldapTemplate search query base OU xxxx DC xxxx where objectclass is p
  • 数据压缩实验之 JPEG原理分析及JPEG解码器的调试

    文章目录 1 实验名称 2 实验目的 3 主要设备 4 实验内容 4 1 JPEG文件格式 4 2 JPEG编解码原理 4 2 1 编码流程 4 2 2 解码流程 5 实验步骤 5 1 逐步调试JPEG解码器程序 5 1 1 理解程序设计的
  • 传统机器学习和深度学习

    传统机器学习 传统机器学习从一些观测 训练 样本出发 试图发现不能通过原理分析获得的规律 实现对未来数据行为或趋势的准确预测 相关算法包括 逻辑回归 隐马尔科夫方法 支持向量机方法 K 近邻方法 三层人工神经网络方法 Adaboost算法
  • 计算机网络 二、网络协议

    一 定义 网络协议是计算机网络中互相通信的对等实体间交换信息时必须要遵守的规则的集合 二 划分层次 三 计算机的体系结构 3 1 具有五层协议的体系结构 具有五层协议的体系结构具 有五层协议的体系结构 1 应用层 application l
  • JNDI和数据库连接池

    1 JNDI 含义 JNDI Java Naming and Directory Interface java命名与目录的接口 是一个有关应用程序设计API 为开发人员提供了查找和访问各种命名和目录服务的通用 统一的接口 使用JNDI的步骤
  • React hooks认知及使用

    Hook介绍 Hook 是 React 16 8 的新增特性 它是完全可选的 并且100 向后兼容 它可以让你使用函数组件的方式 运用类组件以及 react 其他的一些特性 比如管理状态 生命周期钩子等 从概念上讲 React 组件一直更像
  • Jenkins插件开发之突破防火墙

    背景 因为防火墙限制 Jenkins服务端配置完成后 从远程url访问往往受阻 然鹅 并不是任何环境都允许你直接粗暴的将防火墙关闭 解决思路之一 可以单独设置一条规则 开放端口 步骤演示 环境 windows server 2022 1 打
  • Nginx的静态代理

    Nginx的静态代理 Nginx的web请求的处理机制 Nginx结合多进程和异步机制对外提供服务 异步机制使用的是异步非阻塞机制 即AIO Nginx的master进程会生成多个worker进程 master进程负责管理这些worker进
  • 操作系统实验4 使用命名管道实现进程通信

    文章目录 实验4 使用命名管道实现进程通信 一 实验目的 二 实验准备 三 实验内容 一 实验内容 二 主要代码 部分代码 PipeServer cpp PipeClienr cpp 四 实验结果与总结 遇到的问题及解决办法 必看 实验4
  • Open3D 进阶(4)高斯混合点云聚类

    目录 一 算法原理 1 原理概述 2 实现流程 3 参考文献 二 代码实现 三 结果展示 四 测试数据 本文由CSDN点云侠原创 原文链接 爬虫网站自重 一 算法原理 1 原理概述 高斯混合聚类 GMM 算法假设数据点是由一个或多个高斯分布
  • python用户名和密码登录_python编写登录接口

    python编写登录接口 一 需求 编写登录接口 1 输入用户名和密码登录 2 输错三次锁定账户 3 下次登录还是上次的账户 提示锁定 直接退出 用到文件读写 4 成功 后显示登录成功 二 需求流程图 三 代码示例 例1 bin bash
  • 解决Windows jmeter Non HTTP response message: Address already in use: connect 错误

    jMeter报错 Response code Non HTTP response code java net BindException Response message Non HTTP response message Address
  • Xgboost算法——Kaggle案例

    作者简介Introduction 苏高生 西南财经大学统计学硕士毕业 现就职于中国电信 主要负责企业存量客户大数据分析 数据建模 研究方向 机器学习 最喜欢的编程语言 R语言 没有之一 E mail sugs01 outlook com 零