pg电子麻将胡了入口下载 XGBoost:二分类问题

[id_6[id_31906[id_13[id_881820078[id_176612[id_1566055859]39]8294218]2]0288359]

本文对XGBoost的命令行使用方法予以介绍,Python的使用方法可查看https://github.com/dmlc/xgboost/blob/master/doc/README.md,R的使用方法同样可查看该链接。

以下会阐述怎样凭借XGBoost去处理二分类问题,所采用的数据集可见mushroom dataset 。

简介 产生输入数据

XGBoost所用到的输入数据格式跟LibSVM不差分毫。以下呈现的便是XGBoost予以使用的输入数据格式:

1 101:1.2 102:0.03
0 1:2.1 10001:300 10002:400 
...

每一行都用来呈现一个样本呀,第一列当中的数字呢,是用于表示类别标签的哦,这能体现出样本究竟归属于哪一个类别呢,‘101’以及‘102’所代表的是特征索引呀,而’1.2‘跟‘0.03’才是那些特征所对应的真实的值呢。处于二分类的情形下,‘1’代表着正类呀,‘0’则代表着负类之意。同时呢,类别标签是支持概率标签这种形式的哟,其取值服务i呢,是用来表示样本归属于某个类别的可能性大小的呀。

第一步需要将数据集转化成libSVM形式,执行如下脚本

python mapfeat.py
python mknfold.py agaricus.txt 1

mapfeat.py和mknfold.py分别如下

#!/usr/bin/python
def loadfmap( fname ):
    fmap = {}
    nmap = {}
    for l in open( fname ):
        arr = l.split()
        if arr[0].find('.') != -1:
            idx = int( arr[0].strip('.') )
            assert idx not in fmap
            fmap[ idx ] = {}
            ftype = arr[1].strip(':')
            content = arr[2]
        else:
            content = arr[0]
        for it in content.split(','):
            if it.strip() == '':
                continue
            k , v = it.split('=')
            fmap[ idx ][ v ] = len(nmap)
            nmap[ len(nmap) ] = ftype+'='+k
    return fmap, nmap
def write_nmap( fo, nmap ):
    for i in range( len(nmap) ):
        fo.write('%d\t%s\ti\n' % (i, nmap[i]) )
# start here
fmap, nmap = loadfmap( ‘亚灰树花柄菇.fmap’ ,这是一个表述,它涉及某种特定的、以这种方式呈现的内容 ,。 )
fo = open( 'featmap.txt', 'w' )
write_nmap( fo, nmap )
fo.close()
fo = open( 'agaricus.txt', 'w' )
for l in open( “姬松茸 - 环柄菇.数据” ,这是一个特定的名称组合 ,其中 “姬松茸” 有着它独特。 ):
    arr = l.split(',')
    if arr[0] == 'p':
        fo.write('1')
    else:
        assert arr[0] == 'e'
        fo.write('0')
    for i in range( 1,len(arr) ):
        fo.write( ' %d:1' % fmap[i][arr[i].strip()] )
    fo.write('\n')
fo.close()

#!/usr/bin/python
import sys
import random
if len(sys.argv) < 2:
    print ('Usage:  [nfold = 5]')
    exit(0)
random.seed( 10 )
k = int( sys.argv[2] )
if len(sys.argv) > 3:
    nfold = int( sys.argv[3] )
else:
    nfold = 5
fi = open( sys.argv[1], 'r' )
ftr = open( sys.argv[1]+'.train', 'w' )
fte = open( sys.argv[1]+'.test', 'w' )
for l in fi:
    if random.randint( 1 , nfold ) == k:
        fte.write( l )
    else:
        ftr.write( l )
fi.close()
ftr.close()
fte.close()

完成以上两个Python脚本运行后,将会生成训练数据集,即:’agaricus.txt.train’,以及测试数据集,也就是: ‘agaricus.txt.test’。

训练

执行如下命令行完成模型训练:

xgboost mushroom.conf

用于配置训练模型以及测试模型时所需信息的是mushroom.conf文件,每行的配置信息所呈现的格式为:

attribute

=:

# 通用参数,查看针对每个定义的注释 ,其中针对每个定义的注释为针对每个释义的说明 ,针对每个释义的说明为针对每个界定的阐释 # 通用参数,查看针对每个定义的注释 ,针对。
# can be gbtree or gblinear
booster = gbtree 
选用用于二元分类的逻辑回归损失函数,用于二元分类,是选用逻辑回归损失函数,分类是为二元分类,还得是选用逻辑回归损失函数,而且是用于二元分类这个情况,是选用用于二元分类的逻辑回归损失函数啦。” 说明:改写后的句子通过多次重复关键内容。
objective = binary:logistic
# Tree Booster Parameters
# step size shrinkage
eta = 1.0 
需要进行进一步划分时,所需的最小损失降低量, 为了能够进行进一步划分,所应当具备的最小的、损失方面的降低幅度, 为了实现进一步划分,所必须达成的最小损失减少数值 , 要实现进一步隔开以使局面分隔开,。
gamma = 1.0 
# 子节点中所需示例权重总值中的最小值,此权重总值由海森矩阵表示,此最小值对应所需的情况 ,此所需情况为子节点中的情况 ,此子节点中的情况为关于示例权重总值中的最小值的情况 ,其中,此示例。
min_child_weight = 1 
# maximum depth of a tree
max_depth = 3 
# Task Parameters
用于进行助推的轮数的数量,被用来进行助推的轮数的数量,被用于开展助推的轮数的数量。
num_round = 2

save_period = 0 
# The path of training data
data = "agaricus.txt.train" 

eval[test] = "agaricus.txt.test" 
# The path of test data 
test:data = "agaricus.txt.test"      

此处所采用的booster是gbtree,目标函数运用的是logistic regression,这表明能够借助经典的梯度提升回归树来开展计算,也就是GBRT ,此方法对于处理二分类问题具备良好的能力。

给出了最常用配置参数的是以上的配置文件。若想了解更多参数,详见https://github.com/dmlc/xgboost/blob/master/doc/parameter.md。要是不想在配置文件里进行算法参数配置,可通过命令行配置,如下。

XGBoost,蘑菇配置文件里边maximum depth(深度最大值)。=6

这意味着,为max_depth参数将作这样的设置,使其成为6,而非配置文件里的3。使用命令行参数之际,要保证max_depth=6作为一个参数,就是说,参数彼此间不存在间隔。要是既运用配置,亦使用命令行参数,那么命令行参数会将配置文件参数覆盖掉,也就是优先采用命令行参数。

在上述所举的例子里头,运用tree booster来开展梯度提升的计算。要是打算采用linear booster去做回归计算,那么能够将booster参数修改成gblinear,配置文件里的其他各种参数均无需进行修改,配置文件的信息是这样的 。

# General Parameters
# choose the linear booster
booster = gblinear
...
将树增强器参数转变为线性增强器参数,把树增强器参数转化为线性增强器参数,把树增强器的参数变为线性增强器的参数。
# 权重上的L2正则化项,默认值为0 ,句号换成逗号行不行你说行就行不行也得行 ,行不行你说行就行吧不行也得行反正就这么行了。
lambda = 0.01
L1正则化项作用于权重,默认值为0 ,句号改为逗号,句末加”。“ ,即:L1正则化项作用于权重,默认值为0 。
要是有的话,f ```agaricus.txt.test.buffer``` 存在,。and automatically loads from binary buffer if能做到加快训练为原则,是可行的速度增长,这是可以这般实现为实现这般可行去加快训练这般。process when you doit by setting ```use_buffer=0```.
  - Buffer file can also be used as standalone input, i.e if buffer file
* Deviation from LibSVM input format: xgboost is compatible with LibSVM format, with the following minor differences:
- XGBoost准许特征索引起始, ,该起始点 ,是一种特定的起始点状态 ,此状态下的特征索引起始 ,具备独特的性质。from 0
  - for binary classification, the label is 1 for positive, 0 for negative, instead of +1,-1
  - the feature indices in each line *do not* need to be sorted
alpha = 0.01 

lambda_bias = 0.01 
# Regression Parameters
...

预测

在训练好模型之后,可以对测试数据进行预测,执行如下脚本

Xgboost,蘑菇相关配置,任务为预测,模型相关 。in=0003.model

关于二分类问题预测得出的输出结果范畴内,是处于之间的概率数值,此概率数值所表达的是样本归属正类的概率 。

模型展示

当下,这依旧属于一项基本功能赏金女王pg破解版下载,仅仅是支持树模型的呈现。XGBoost能够运用文本的显现来展现树模型,去执行以下脚本 。

../../xgboost mushroom.conf task=dump model_in=0003.model name_dump=dump.raw.txt 
../../xgboost mushroom.conf task=dump model_in=0003.model fmap=featmap.txt name_dump=dump.nice.txt

0003.model会被输出至dump.raw.txt以及dump.nice.txt里。dump.nice.txt当中的结果更易于被理解,鉴于其中运用了特征映射文件featmap.txt 。

featmap.txt有着这样的格式,它是 \n这样的,是 : 的那种格式,是featmap.txt所呈现出来的格式 。

计算过程监测

当运行程序时,会输出如下运行信息

tree train end, 1 roots, 12 extra nodes, 0 pruned nodes ,max_depth=3
[0]  test-error:0.016139
boosting round 1, 0 sec elapsed
tree train end, 1 roots, 10 extra nodes, 0 pruned nodes ,max_depth=3
[1]  test-error:0.000000

计算进程里,模型评价资料被输送至错误输出流stderr当中,要是期望把计算进程中的模型评价信息纪录下来,便能去运行如下这般的脚本,。

xgboost mushroom.conf 2>log.txt

在log.txt文件中记录如下信息

[0]     test-error:0.016139
[1]     test-error:0.000000

训练过程中的统计信息能够被监测,测试过程中的统计信息同样能够被监测,且是同时进行监测,配置的方式如下 。

eval[test] = "agaricus.txt.test" 
eval[trainname] = "agaricus.txt.train" 

运行以上的脚本后得到的信息如下

[0]     test-error:0.016139     trainname-error:0.014433
[1]     test-error:0.000000     trainname-error:0.001228

运行规则是

name-printed-in-log

文件名被设定为filename,filename这个文件,会被添加到检测进程里,并且在每一个迭代的过程当中,针对模型开展评价操作。

XGBoost对多种统计量的监测予以同时支持,若期望监测训练进程里每次预测的平均log-likelihood,仅仅要在配置文件当中添加配置信息eval_metric=logloss ,再次运行时log文件内将会存有如下信息 。

[0]     test-error:0.016139     test-negllik:0.029795   trainname-error:0.014433        trainname-negllik:0.027023
[1]     test-error:0.000000     test-negllik:0.000000   trainname-error:0.001228        trainname-negllik:0.002457

保存运行过程中的模型

倘若于当下运行进程里每两个步骤付诸保存一个模型之举,那么便能够着手设置参数set save_period=2. 。于当前文件夹之中将会目睹模型0002.model 。要是意欲对模型输出的路径予以修改问鼎赏金女王pg官网入口下载,那么能够借助参数dir=foldername加以修改。在缺省情形之下XGBoost将会维持上次迭代的结果模型。

从已有模型继续计算

要是打算从已存在的模型去持续训练,举例来讲问鼎赏金女王pg官网入口下载手机版安,从0002.model再次开展计算,那么就运用如下这般的命令行,。

xgboost mushroom.conf model_in=0002.model num_round=2 model_out=continue.model

XGBoost会去加载0002.model,接着进行两次迭代计算,然后会把输出明显地保存在continue.model。要注意的是,在mushroom.conf里定义的训练数据信息不能发生变化,评价数据信息同样不能发生变化。

使用多线程

当做大数据集的计算之时,或许会需要并行开展计算。要是编译器对OpenMP予以支持,那么XGBoost在原生状态下是支持多线程的,借由如下参数nthread=10把线程数设定为10 。

其它需要注意的点

关键词:

客户评论

我要评论