本篇主要内容包括XGBoost的入门教学、调参优化,将之前自己遇到的问题细心的整理一遍;XGBoost参数繁多,所以如果要调参,就一定要知道每个参数的作用于意义,因此本人十分建议在实战之前对XGBoost的理论分析有一定的了解,博主在之前写过一篇XGBoost原理与实例,里面详细的介绍了XGBoost的基本原理,有兴趣的小伙伴可以先去那里观摩一番,之后再看本篇有事半功倍的效果哦!!

现简要说明下XGboost的优势:

  1. 正则化

    • 标准的GBM的实现没有像XGBoost这样的正则化步骤。正则化对减少过拟合也是有帮助的
    • 实际上,XBGoost以"正则化提升(regularized boosting)"技术而闻名
  2. 并行处理
    • XGBoost可以实现并行处理,相比GBM有了速度的飞跃
    • 不过,Boosting算法是顺序处理的,它怎么能并行呢?每一棵树的构造都依赖于前一棵树,那具体是什么让我们能用多核处理器去构造一棵树呢?相关解答可以参考这里
    • XGBoost也支持Hadoop实现
  3. 高度的灵活性
    • XGBoost允许用户自定义优化目标和评价标准
    • 它对模型增加了一个全新的维度,所以我们的处理不会受到任何限制
  4. 缺失值处理
    • XGBoost内置处理缺失值的规则
    • 用户需要提供一个和其他样本不同的值,然后把它作为一个参数传进去,以此来作为缺失值的取值。
    • XGboost在不同节点遇到缺失值时采用不同的处理方法,并且会学习未来遇到缺失值的处理方法
  5. 剪枝
    • 当分裂时遇到一个负损失时,GBM会停止分裂。因此GBM实际上是一个贪心算法
    • XGBoost会一直分裂到指定的最大深度(max_depth),然后回过头来剪枝。如果某个节点之后不再有正值,它会去除这个分裂
    • 这种做法的优点是:当一个负损失(如-2)后面有一个正损失(如+10)的时候,GBM会在-2处停下来,因为它遇到了一个负值。但是XGboost会继续分裂,然后发现这两个分裂综合起来会得到+8,因此会保留这两个分裂
  6. 内置交叉验证
    • XGBoost允许在每一轮boosting迭代中使用交叉验证。因此,可以方便地获得最优boosting迭代次数
    • 而GBM使用网格搜索,只能检测有限个值
  7. 在已有的模型基础上继续
    • XGBoost可以在上一轮的结果上继续训练。这个特性在某些特定的应用上市一个巨大的优势
    • sklearn中的GBM的实现也有这个功能,两种算法在这一点上师一致的

一、XGBoost入门教学

1、XGBoosst的参数定义

XG’boost的作者将参数归纳成三种类型,分别是:

  1. 通用参数(Genreal parameters ):与我们所使用的booster相关,通常是树模型或线性模型,宏观上对函数进行调控。
  2. Booster参数(Booster parameters):根据你所选择的的booster,控制每一次迭代的参数。
  3. 学习任务函数(Learning task parameters):根据你的任务情况,选择不同的模型可能会有不同的参数,但它们都是控制训练任务的表现。

1.1通用参数(Genreal parameters ):

  • booster[default=gbtree]:

    • gbtree:基于树的模型
    • gblinear:线性模型
  • Verbosity[default=1]:
    • 当这个参数的值为1时,输出模型的很多信息,这有助于帮助我们更好的理解模型,所以最好为1.
    • 当这个参数为0时等价于Silent=1,不会输出任何信息。
  • nthread[默认为最大可用线程数(如果未设置)] :
    • 用于运行XGBoost的并行线程数

1.2Booster参数(Booster parameters):

在实际使用XGboost中,gbtree模型的性能与表现远远好于linear模型,因此我们主要讨论下Tree Booster模型的参数。

  • eta[default=0.3]:

    • sklearn中称为learning_rate
    • 在每次迭代之后,可以直接得到每个叶子结点的权重,而使权值显小来提升模型的鲁棒性,可以防止过拟合。
    • 最佳值范围:[0.01,0.2]
  • gamma[default=0]:

    • 也称min_split_loss
    • 在树的叶节点进行进一步划分时所需的最小损失的减少值,在划分时最小损失值大于Gamma时,才会划分这个点,Gamma指定了节点分裂所需的最小损失函数下降值
    • Gamma值越大,算法就越保守,因此这个值是需要调节的。
    • 范围:[0,∞\infty∞]
  • max_depth[default=6]:

    • 树的最大深度,增加这个值将使模型更为复杂、并容易过拟合
    • 可以使用cv函数调优
    • 最佳值范围 :[3,10]
  • min_child_weight[default=1]:

    • 子节点的所有样本hessianh的和的最小值,如果在树的划分过程中样本的 h之和的最小值小于min_child_weight,那么不对该结点进行进一步的划分
    • min_child_weight越大,算法越是保守
    • 这个参数需要使用cv函数调优
  • max_delta_step[default=0]:

    • 这参数限制每棵树权重改变的最大步长。如果这个参数的值为0,那就意味着没有约束。如果它被赋予了某个正值,那么它会让这个算法更加保守
    • 通常,这个参数不需要设置。但是当各类别的样本十分不平衡时,它对逻辑回归是很有帮助的
    • 将其设置为1-10可能有助于控制更新
  • subsmaple[default=1]:

    • 假设设置为0.5,意味着xgboost将在树的增长之前随机抽取一半的数据用于训练
    • 可以防止过拟合
    • 在每次提升迭代时都会采样一次
    • 最佳值范围:[0.5,1]
  • colsample_bytree:

    • 建立每一棵树的时候对样本的列(特征)进行采样,用于建立下一颗树
    • 可以防止过拟合
    • 在每次提升迭代时都会采样一次
    • 最佳值范围:[0.5,1]
  • colsample_bylevel:

    • 建立每一棵树的时候,对每一层的样本的列(特征)进行采样
    • 可以防止过拟合
    • 在每次提升迭代时都会采样一次
    • 最佳值范围:[0.5,1]
  • lambda[default=1]:

    • 也称reg_lambda
    • 权重的L2正则化项(与Ridge regression类似)
    • 增加这个值可以使模型更为保守
  • alpha[default=1]:

    • 也称reg_alpha
    • 权重的L1正则化项(与Lasso regression类似)
    • 可以产生稀疏矩阵,加快算法收敛速度
  • scale_pos_weight[default=1]:

    • 控制正负权重的平衡,对于不平衡类很有用

1.3学习任务函数(Learning task parameters):

  • objective[default=reg:linear]:

    • reg:linear:线性回归
    • reg:logistic:逻辑回归
    • binary:logistic:二分类的逻辑回归,返回预测的概率(不是类别)
    • multi:softmax:使用softmax目标函数让XGBoost解决多分类问题,我们需要输入类别的个数
    • multi:softprob:与SoftMax相同,但输出一个ndata×nclass的向量,该向量可以进一步整形为ndata×nclass矩阵。结果包含属于每个类的每个数据点的预测概率。
    • rank:pairwise:使用lambdamart在最小化成对损失的情况下执行成对排名
  • base_score:

    • 所有实例的初始预测得分,全局偏差
    • 对于足够的迭代次数,更改此值不会产生太大的影响
  • eval_metric:

    • 验证数据的评估指标,将根据目标分配默认指标(回归的RMSE,分类的误差,排名的平均精度)
  • seed[default=0]:

    • 随机数的种子

2、XGBoost基本操作演示

本文采用的数据集下载地址为pima-indians-diabetes,并使用Python3语言。使用XGBoost训练模型一般有2种方法,一种是单纯的使用XGBoost内置函数训练,另一种是与sklearn结合使用,当然在调参过程中要两种兼用才能有最好效果。

建议观看本文的同时也许参考XGboost参数地址,因为本文重要的是实战,不是讲解参数含义。

2.1 单纯使用XGBoost的内置函数训练模型

单纯使用XGBoost训练的模型必须要将数据集转换成DMatrix,我们看下DMatrix的说明:

  • xgboost.DMatrix

    • 在XGBoost上使用的数据矩阵
    • DMatrix是XGBoost使用的内部数据结构,它针对内存效率和培训速度进行了优化。可以从numpy.array构造DMatrix
import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.cross_validation train_test_split

导入训练模型所必要的库,第四行是为了将数据集划分为训练集测试集两部分


dataset = pd.read_csv('/Users/dd/VScode_program/Machine_leaarning/pima-indians-diabetes.csv',header=None)
dataset.rename.(columns={8:'label'},inplace=True)
dataset.head(n=5)


上面很简单,导入数据集,将最后的一列的标签更改为label


train, test = train_test_split(dataset,test_size=0.2,random_state=7)
feature_name = [x for x in train.columns if x not in ['label']]
dtrain = xgb.DMatrix(train[feature_name],label=train['label'])
dtest = xgb.DMatrix(test[feature_name],label=test['label'])

划分数据集,提取特征名字,将训练集与测试集转换成DMatrix格式,下面看看DMatrix的常用函数


dtrain.num_col()#获得矩阵的列数
dtrain.num_row()#获得矩阵的行数
dtrain.dtrain.get_label()#获得矩阵的标签

#自定义参数
params = {'booster':'gbtree','objective':'binary:logistic','eval_metric':'auc','gamma':0.1,'min_child_weight':1,'max_depth':5,'lambda':2,'subsample':0.7,'colsample_bytree':0.7,'colsample_bylevel':0.7,'eta':0.01,'tree_method':'exact','seed':7,'nthread':4}
watchlist = [(dtest, 'eval'), (dtrain, 'train')]
model1 = xgb.train(params,dtrain,600,watchlist)

watchlist是一个观察列表,它的作用是在训练的过程中也会打印出各种信息,由于在参数定义中我们定义'eval_metric':'auc',所以会打印出测试集与训练集的AUC


#模型保存
model1.save_model('xgb_model1')
#模型加载
model1 = xgb.Booster()
model1.load_model('xgb_model1')

保存之后有利于我们在下次使用这个模型的时候不用重新训练模型,避免不必要的跑程序,大大缩短时间,当然,在实际应用中,所保存的模型一般是已经调参好的模型


下面开始对测试集进行预测

test['pre'] = model1.predict(dtest)
test.to_csv('test_result_by_xgb_model1.csv',index=None,header=None)

我们看下结果,返回预测值为样本标签为1的概率

当然你也可以使用:

test['pred_out_trans'] = model1.predict(dtest,output_margin=True)

来返回没有经过sigmoid函数转化的值


我们可以通过get_score()函数查看各个特征在这个模型中的重要性

#'weight':在所有树分裂过程中,使用该特征分裂的次数
model1.get_score(importance_type='weight')

#'gain':在所有树分裂过程中,使用该特征分裂的平均增益
model1.get_score(importance_type='gain')

#'cover':在所有树分裂过程中,使用该特征分裂的平均覆盖率
model1.get_score(importance_type='cover')

还有total_gain、total_cover,这里不再重复了


我们也可以用XGBoost自带的绘图函数画出各个特征的重要性,但前提是需要安装matplotlib

import matplotlib.pyplot as plt
xgb.plot_importance(model1)

若安装了graphviz,那么可以画出树图

from graphviz import  Digraph
xgb.plot_tree(model1)

可能是图比较大,不是很清晰,这里不上传效果图了。


现在来看下XGBoost的交叉验证函数CV的使用,该函数返回评估历史记录
我们依旧使用上面的自定义参数params,来看下交叉验证的作用

params = {'booster':'gbtree','objective':'binary:logistic','eval_metric':'auc','gamma':0.1,'min_child_weight':1,'max_depth':5,'lambda':2,'subsample':0.7,'colsample_bytree':0.7,'colsample_bylevel':0.7,'eta':0.01,'tree_method':'exact','seed':7,'nthread':4}cv_result = xgb.cv(params,dtrain,numnum_boost_round=3000,nfold=5,stratified=True,metrics='auc',early_stopping_rounds=60,as_pandas=True,seed =7,callbacks=[xgb.callback.early_stop(60),xgb.callback.print_evaluation(period=1,show_stdv=True)])

我们自定义的迭代次数为3000,如果在60轮内auc都没有提升的话就停止,因此我们看到在第107次时停止了,还打印出了auc信息。因此,cv的一个重要使用是在调参的过程中找到最佳的迭代次数

以上单纯的使用XGBoost的入门就介绍完了,下面介绍xgboost与sklearn结合使用的方法。


2.2 XGboost与sklearn结合使用

Scikit-Learn也有XGBoost接口用于训练模型,只是参数稍有些不同,比如说XGBoost中的eta与sklearn中的learning_rate是对等的,还有就是训练的数据在sklearn中是不需要转化成DMatrix的,sklearn可以直接训练csv格式的数据集。

import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.cross_validation import train_test_split
from xgboost.sklearn import XGBClassifier

第5行就是XGBoost的sklearn接口


dataset = pd.read_csv('/Users/dd/VScode_program/Machine_leaarning/pima-indians-diabetes.csv',header=None)
dataset.rename(columns={8:'label'},inplace=True)
train, test = train_test_split(dataset,test_size=0.2,random_state=7)
feature_name = [x for x in train.columns if x not in ['label']]

与之前的一样,只是少了将数据集转换为矩阵


model2 = XGBClassifier(learning_rate=0.1,n_estimators=500,max_depth=3,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=0,min_child_weight=1.1,subsample=0.8,colsample_bytree=0.8,colsample_bylevel=0.8,reg_lambda=1,random_state=7)

定义XGBoost分类器参数

xgb_model2 = model2.fit(train[feature_name],train['label'],eval_set=[ (train[feature_name], train['label'])],eval_metric='auc',early_stopping_rounds=60)

采用sklearn的fit函数训练模型,评估方式为AUC,eval_set也可以写成eval_set=[ (train[feature_name], train['label']),(test[feature_name], test['label'])],这样就会打印出训练集与测试集的AUC

在fit中若有参数early_stopping_rounds,则会有三个返回参数分别为:best_iterationbest_scorebest_ntree_limit.

使用feature_importances_也会返回每个特征的重要性

当然我们也可以将特征的重要性用图表示出来

使用evals_result()以字典的形式也会返回每次迭代的评估结果


#返回类别预测值
test['preds'] = xgb_model2.predict(test[feature_name])
#返回正类别的概率值
test['pred_pro'] = xgb_model2.predict_proba(test[feature_name])

至此,XGBoost的入门就结束了,下面我们看看XGBoost是怎么调参的?


二、XGBoost调参一般方法

XGBoost的调参步骤一般为:

  1. 选择较高的学习率(learning_rate)。一般情况下,学习率的值为0.1,但是,对于不同的问题,学习率一般会在0.01~0.3之间波动。选择对应于此学习率的理想决策树数量,我们可以用CV 来得到理想的决策树数量。
  2. 对于给定的学习率和决策树数量,进行决策树特定的单数调优(max_depth,min_child_weight,gamma,subsample,colsample_bytree)。在确定一棵树的过程中,我们可以选择不同的参数,下面会有举例说明。
  3. XGBoost的正则化参数调优。(lambda、alpha)。这些参数可以降低模型的复杂度,从而提高模型的表现。
  4. 降低学习率,增大决策树的数量,我们可以用XGBoost中的CV函数来这一步的工作。

导入所需要的库

import numpy as np
import pandas as pd
import xgboost as xgb
from sklearn.cross_validation import train_test_split
from xgboost.sklearn import XGBClassifier
import matplotlib.pyplot as plt
from sklearn.grid_search import GridSearchCV
from sklearn import cross_validation,metrics

数据集的整理

dataset = pd.read_csv('/Users/dd/VScode_program/Machine_leaarning/pima-indians-diabetes.csv',header=None)
dataset.rename(columns={8:'label'},inplace=True)
train, test = train_test_split(dataset,test_size=0.2,random_state=7)
feature_name = [x for x in train.columns if x not in ['label']]
dtrain = xgb.DMatrix(train[feature_name],label=train['label'])
dtest = xgb.DMatrix(test[feature_name],label=test['label'])

第一步、确定学习率和tree_base参数调优

为了确定boosting参数,我们要先给出其他参数一个初始值。一般按照如下方法取值:

  1. max_depth=3:这个参数一般是在1~10之间。
  2. min_child_weight=1:若我们的数据上一个极不平衡的分类问题,我们最好选取一个比较小的值。
  3. gamma=0:起始值可以选比较小的值,在0.1~0.2之间就可以。这个参数以后也是需要调整的。
  4. subsample,colsample_bytree=0.8:这个是最常见的初始值了。典型值的范围一般在0.5~0.9之间。
  5. scale_pos_weight=1:若类别极不平衡时的设置。

要知道,上面的参数值只是一个初始的估计值,后继需要调优。这里把学习率设置成0.1,然后用XBGoost的CV函数确定最佳的决策树数量。

xgb1 = XGBClassifier(max_depth=3,learning_rate=0.1,n_estimators=5000,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=0,min_child_weight=1,subsample=0.8,colsample_bytree=0.8,seed=7)

设置CV参数

cv_result = xgb.cv(xgb1.get_xgb_params(),dtrain,num_boost_round=xgb1.get_xgb_params()['n_estimators'],nfold=5,metrics='auc',early_stopping_rounds=50,callbacks=[xgb.callback.early_stop(50),xgb.callback.print_evaluation(period=1,show_stdv=True)])

我们看到最佳的迭代次数(决策树的数量)为33时最佳.所以更改为

xgb1 = XGBClassifier(max_depth=3,learning_rate=0.1,n_estimators=33,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=0,min_child_weight=1,subsample=0.8,colsample_bytree=0.8,seed=7)

然后训练模型、测试集预测、获得AUC得分

xgb_bst1 = xgb1.fit(train[feature_name],train['label'])
test['pred'] = xgb_bst1.predict(test[feature_name])
metrics.roc_auc_score(test['label'],test['pred'])


第二步、确定max_depth和min_weight参数

我们先对这两个参数调优,因为它们对最终结果有很大的影响。首先,我们先大范围的粗调,然后再小范围的细调,接下来使用高负荷的栅格搜索了(gird search)

param_grid = {'max_depth':[1,2,3,4,5],'min_child_weight':[1,2,3,4,5]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

比较发现深度应该是最好的,但min_child_weight的最优可能值还会大一些,所以我们有必要单独对min_child_weight做一次栅格搜索

先将max_depth=2

param_grid = {'min_child_weight':[5,6,7,8,9,10]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)


第三步、gamma参数调优

此时的分类器参数为:

xgb1 = XGBClassifier(max_depth=2,learning_rate=0.1,n_estimators=33,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=0,min_child_weight=9,subsample=0.8,colsample_bytree=0.8,seed=7)
param_grid = {'gamma':[1,2,3,4,5,6,7,8,9]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)


发现又有了提升,我们可以在精细的调调它的值,比如说

param_grid = {'gamma':[i/10.0 for i in range(10,30)]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

发现得分有了提升,至此找到了最佳的gamma=2.1


第四步、调整subsample与colsample_bytree参数

我们现在的模型为:

xgb1 = XGBClassifier(max_depth=2,learning_rate=0.1,n_estimators=33,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=2.1,min_child_weight=9,subsample=0.8,colsample_bytree=0.8,seed=7)
param_grid = {'subsample':[i/10.0 for i in range(5,11)],'colsample_bytree':[i/10.0 for i in range(5,11)]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

发现初始值就是最佳的


第五步、调整正则化参数

param_grid = {'reg_lambda':[i/10.0 for i in range(1,11)]}
grid_search = GridSearchCV(xgb1,param_grid,scoring='roc_auc',iid=False,cv=5)grid_search.fit(train[feature_name],train['label'])
print('best_params:',grid_search.best_params_)
print('best_score:',grid_search.best_score_)

我们发现而低了,所以应该在细分一点,那么就留给以后的自己做吧!嘻嘻!


最后我们使用较低的学习率以及使用更多的决策树,可以用CV来实现这一步骤

xgb1 = XGBClassifier(max_depth=2,learning_rate=0.01,n_estimators=5000,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=2.1,min_child_weight=9,subsample=0.8,colsample_bytree=0.8,seed=7,)

所以最佳的决策树数量为504,最终模型如下:

xgb1 = XGBClassifier(max_depth=2,learning_rate=0.01,n_estimators=504,silent=False,objective='binary:logistic',booster='gbtree',n_jobs=4,gamma=2.1,min_child_weight=9,subsample=0.8,colsample_bytree=0.8,seed=7)

至此,你可以看到模型的表现有了大幅提升,调整每个参数带来的影响更加清楚了。
在文章的末尾,我想分享两个重要的思想

  1. 仅仅靠参数的调整和模型的小幅优化,想要让模型的表现有个大幅度提升是不可能的。
  2. 要想让模型的表现有一个质的飞跃,需要依靠其他的手段,诸如,特征工程(feature egineering) ,模型组合(ensemble of model),以及堆叠(stacking)等。


XGBoost实战与调参优化相关推荐

  1. 人工智能框架实战精讲:Keras项目-英文语料的DNN、Word2Vec、CNN、LSTM文本分类实战与调参优化

    Keras项目-英文语料的文本分类实战 一.机器学习模型 1.1 数据简介 1.2 数据读取与预处理 1.3 数据切分与逻辑回归模型构建 二.全连接神经网络模型 2.1 模型训练 2.2 模型结果展示 ...

  2. XGBoost 重要参数(调参使用)

    XGBoost 重要参数(调参使用) 数据比赛Kaggle,天池中最常见的就是XGBoost和LightGBM. 模型是在数据比赛中尤为重要的,但是实际上,在比赛的过程中,大部分朋友在模型上花的时间却 ...

  3. 如何使用hyperopt对xgboost进行自动调参

    本教程重点在于传授如何使用Hyperopt对xgboost进行自动调参.但是这份代码也是我一直使用的代码模板之一,所以在其他数据集上套用该模板也是十分容易的. 同时因为xgboost,lightgbm ...

  4. 机器学习算法总结之XGBoost(下) 实战与调参

    写在前面 XGBoost原理已在前一篇有过说明:机器学习算法总结之XGBoost(上) 本文思路与之前一篇GBDT调参( 基于scikit-learn的梯度提升树GBDT调参学习)思路相同,先遍历xg ...

  5. 使用贝叶斯优化工具实践XGBoost回归模型调参

    0. 关于调参 0.1. 超参数 在机器学习的上下文中,超参数(hyper parameters)是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据.通常情况下,需要对超参数进行优化,给学 ...

  6. XgBoost使用及调参教程

    Kaggle比赛利器XGBboost 数据,决定了机器学习的上限,而算法,只是逼近这个上限. 简介 如果你的机器学习集成模型表现得不是那么尽如人意,那就使用XGBoost吧.XGBoost算法现在已经 ...

  7. 视觉模型精度如何更上一层楼?百度技术专家实战演示调参技巧

    作者 | 王金许       责编 | 欧阳姝黎 出品 | CSDN(ID:CSDNnews) 随着计算机视觉的应用场景拓展得愈加广泛,与此同时,AI开发者对企业级视觉模型开发的精度与推理速度也更加关 ...

  8. 【Yolact训练自己的数据从实战到调参】

    100%完美运行,期间踩过许多坑,数据集的坑.代码的坑都有.现在做一下总结,也希望后来者能快速上手,避免浪费不必要的时间. 文章目录 一.训练自己的数据与预测 1.训练自己的数据train.py 1. ...

  9. Darknet官方文档(含Yolo-V2和V3在win和Linux训练测试步骤、计算mAP、调参优化等)

    GitHub原文:https://github.com/AlexeyAB/darknet#how-to-compile-on-linux Yolo-v3 and Yolo-v2 for Windows ...

最新文章

  1. python写出表白_用Python写一个简单的表白-Go语言中文社区
  2. 年后跳槽BAT必看:10种数据结构、算法和编程课助你面试通关
  3. windows codeblocks clang 3.7.0
  4. 【风控模型】神经网络DNN算法构建信用评分卡模型
  5. 用顺序栈实现十进制向二进制转化
  6. python指定变量类型_Python#160;变量类型_python教程
  7. Qt工作笔记-ListWidget拖动(拖拽)到QGraphicsScene
  8. 使用RN开发App,引入图标失效问题的解决
  9. Java面试题--shiro
  10. 北京环球度假区宣布首批21家旅游渠道官方授权合作伙伴
  11. 浅析计算机用户身份识别技术,浅谈网络安全之身份认证技术
  12. gromacs 安装_GROMACS简介与安装
  13. 逆向app - 简单apk工具的安装
  14. 2018年专业技术人员权益保护-测试题答案
  15. Echarts 漏斗图
  16. MySQL中的auto_increment
  17. 均值,期望,方差,标准差,协方差
  18. 今天nba预测分析_NBA情报预测分析_NBA足球俱乐部 - 全球体育网
  19. 适合零基础学习者的Java学习路线图到底长啥样?一篇文章带你学会Java
  20. 微信公众号可以改名称了,只限个人订阅号!

热门文章

  1. Deno + Oak 构建酷炫的 Todo API
  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 17 ElasticSearch解决大数据量检索难题
  3. ​​​​​​​ Centos7.6上用Cockpit安装oVirt
  4. Spring Security MVC登录注销示例教程
  5. 从厕所排队引发的产品设计方案思考
  6. Windows环境下多个tomcat启动方法
  7. CCF 201503-2 数字排序
  8. 现在以及未来 互联网名词记录
  9. 【Java】兔子问题
  10. 【Python】基本统计值计算