Xgboost 学习

https://pypi.org/project/xgboost/#files

https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/

https://my.oschina.net/u/2293326/blog/1838923

https://dask-ml.readthedocs.io/en/stable/modules/generated/dask_ml.xgboost.XGBClassifier.html

https://github.com/dmlc/xgboost/issues/2073

https://blog.csdn.net/zc02051126/article/details/46711047

有空还需要学怎么利用之前训练好到模型,继续添加新数据学习

######
'''
 https://www.analyticsvidhya.com/blog/2016/03/complete-guide-parameter-tuning-xgboost-with-codes-python/
'''
######

#coding=utf-8
#Import libraries:
import pandas as pd
import numpy as np
import xgboost as xgb
from xgboost.sklearn import XGBClassifier
from sklearn import cross_validation, metrics   #Additional scklearn functions
from sklearn.grid_search import GridSearchCV
import matplotlib.pylab as plt
from matplotlib.pylab import rcParams
import pickle
import os
import time

rcParams['figure.figsize'] = 12, 4
#train = pd.read_csv('part-format-all.csv', sep='\t', header=0)
train = pd.read_csv('part-format-all.csv', sep='\t', header=0)
#test = pd.read_csv('test-format.csv', sep='\t', header=0)
test = pd.read_csv('part-format-test.csv', sep='\t', header=0)
#print train
target = 'label'
#IDcol = 'ID'
#Choose all predictors except target & IDcols
predictors = [x for x in train.columns if x not in [target]]
print "predictors: ", predictors


def create_feature_list(features):
    outfile = open('feature.list', 'w')
    i = 0
    for feat in features:
        outfile.write('{0}\n'.format(feat))
    outfile.close()

def create_feature_map(features):
    outfile = open('feature.map', 'w')
    i = 0
    for feat in features:
        outfile.write('{0}\t{1}\tq\n'.format(i, feat))
        i = i + 1
    outfile.close()

def create_feature_info(features):
    create_feature_list(features)
    create_feature_map(features)

def report_model_accuracy(alg):
    #Predict training set:
    # fix incompatiable between xgboost and sklean
    alg.get_booster().feature_names = predictors
    dtest_predictions = alg.predict(test[predictors],validate_features=predictors)
    dtest_predprob = alg.predict_proba(test[predictors])[:,1]
    print "Model Report"
    print "Accuracy : %.4g" % metrics.accuracy_score(test[target].values, dtest_predictions)
    print "AUC Score (Train): %f" % metrics.roc_auc_score(test[target], dtest_predprob)

    #print alg
    #feat_imp = pd.Series(alg.get_booster().get_fscore()).sort_values(ascending=False)
    feat_imp = alg.get_booster().get_fscore()
    feat_imp = sorted(feat_imp.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)
    print feat_imp
    #feat_imp = pd.Series(feat_imp)
    #feat_imp.plot(kind='bar', title='Feature Importances')


def modelfit(alg, dtrain, predictors,useTrainCV=True, cv_folds=5, early_stopping_rounds=50):
    if useTrainCV:
        xgb_param = alg.get_xgb_params()
        xgtrain = xgb.DMatrix(dtrain[predictors].values, label=dtrain[target].values)
        cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], nfold=cv_folds,
            metrics='auc', early_stopping_rounds=early_stopping_rounds)#, show_progress=False)
        alg.set_params(n_estimators=cvresult.shape[0])

    #Fit the xgborithm on the data
    alg.fit(dtrain[predictors], dtrain[target],eval_metric='auc',verbose=True)

    #print model report        
    report_model_accuracy(alg)

def train_rough_param():
    tic_start = time.time()
    alg = XGBClassifier(   base_score=0.5,
                            booster='gbtree',
                            colsample_bylevel=1,
                            colsample_bytree=0.8, # 生成树时进行的列采样 
                            gamma=0, # 树的叶子节点上作进一步分区所需的最小损失减少,越大越保守,一般0.1、0.2这样子
                            learning_rate=0.1, # 学习率
                            max_delta_step=0, # 最大增量步长,我们允许每个树的权重估计, 通常1-10
                            max_depth=5, # 构建树的深度,越大越容易过拟合
                            min_child_weight=1,
                            # 这个参数默认是 1,是每个叶子里面 h 的和至少是多少,对正负样本不均衡时的 0-1 分类而言
                            # ,假设 h 在 0.01 附近,min_child_weight 为 1 意味着叶子节点中最少需要包含 100 个样本
                            # 这个参数非常影响结果,控制叶子节点中二阶导的和的最小值,该参数值越小,越容易 overfitting
                            missing=None,
                            n_estimators=1000, # 树的个数
                            nthread=None, # cpu 线程数 默认最大 decrepted, using n_jobs instead 
                            n_jobs=4,
                            objective='binary:logistic', # multi:softmax, multi:softprob
                            # num_class=2, # 类别数,多分类与 multisoftmax 并用
                            seed=None, # 随机种子
                            random_state=27, # 随机种子将被弃用,使用random_state
                            reg_alpha=0, # L1 正则项参数
                            reg_lambda=1, # 控制模型复杂度的权重值的L2正则化项参数,参数越大,模型越不容易过拟合 
                            scale_pos_weight=1, # 如果取值大于0的话,在样本不平衡的情况下有助快速收敛平衡正负权重
                            silent=True, # 设置成1则没有运行信息输出,最好是设置为0.是否在运行升级时打印消息
                            subsample=0.8) # 随机采样训练样本 训练实例的子采样比
    modelfit(alg, train, predictors)
    create_feature_info(predictors)
    tic_end = time.time()
    print "train rough model time cost: %.2fs" % (tic_end - tic_start)
    return alg

def update_model(alg, param):
    for item, val in param.iteritems():
        eval("alg.set_params(" + item + "=" + str(val) + ")")
    return alg

def tune_model(alg, param):
    #print xgb
    # silent error of constructor does not seem to set parameter missing 
    tic_start = time.time()
    alg.set_params(missing=None)
    gsearch = GridSearchCV(estimator = alg, param_grid = param, scoring='roc_auc', iid=False, cv=5)
    gsearch.fit(train[predictors], train[target])
    print "gsearch.grid_scores_:", gsearch.grid_scores_
    print "gsearch.best_params_:", gsearch.best_params_
    print "gsearch.best_score_:", gsearch.best_score_
    alg = gsearch.best_estimator_
    report_model_accuracy(alg)
    tic_end = time.time()
    print "tune model time cost: %.2fs" % (tic_end - tic_start)
    return alg

def main():
    model_path = "alg1.pickle.dat"
    xgb1 = []
    FORCE_TRAIN_ROUGH = True
    # rough model
    print "\n=== rough model: ==="
    if not FORCE_TRAIN_ROUGH and os.path.exists(model_path):
        with open(model_path, 'rb') as f:
            alg1 = pickle.load(f)
            print "found model, loaded"
    else:
        alg1 = train_rough_param()
        pickle.dump(alg1, open("xbg1.pickle.dat", "wb"))
    print alg1

    # Tune max_depth and min_child_weight
    print "\n=== after tune max_depth and min_child_weight: ==="
    param2 = {'max_depth' : range(3,10,2), 'min_child_weight' : range(1,6,2)}
    alg2 = tune_model(alg1, param2)
    print alg2

    # Tune gamma
    print "\n=== after tune gamma: ==="
    param3 = {'gamma':[i/10.0 for i in range(0,5)]}
    alg3 = tune_model(alg2, param3)
    print alg3

    # Tune subsample and colsample_bytree
    print "\n=== after tune subsample and colsample_bytree: ==="
    param4 = {'subsample':[i/10.0 for i in range(6,10)], 'colsample_bytree':[i/10.0 for i in range(6,10)]}
    alg4 = tune_model(alg3, param4)
    print alg4

    # Tuning regularization
    print "\n=== after tune regularization: ==="
    param5 = {'reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]}
    alg5 = tune_model(alg4, param5)
    print alg5

    # Tuning learning rate
    print "\n=== after tune learning rate: ==="
    param6 = {'learning_rate':[0.01,0.05,0.1,0.2]}
    alg6 = tune_model(alg5, param6)
    print alg6

    alg_final = alg6
    # dump for c++ use
    # dump model with feature map
    #alg_final.dump_model('dump.raw.txt','featmap.txt')
    #pickle.dump(alg_final, open("alg_final.pickle.dat", "wb"))
    alg_final._Booster.save_model("alg_final.bin")
    #alg_final._Booster.dump_model('alg_final.raw.txt','featmap.txt')
    print "\n=== all process done OK ==="

if __name__ == "__main__":
    main()                                                                                     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。下面详细介绍C语言的基本概念和语法。 1. 变量和数据类型 在C语言中,变量用于存储数据,数据类型用于定义变量的类型和范围。C语言支持多种数据类型,包括基本数据类型(如int、float、char等)和复合数据类型(如结构体、联合等)。 2. 运算符 C语言中常用的运算符包括算术运算符(如+、、、/等)、关系运算符(如==、!=、、=、<、<=等)、逻辑运算符(如&&、||、!等)。此外,还有位运算符(如&、|、^等)和指针运算符(如、等)。 3. 控制结构 C语言中常用的控制结构包括if语句、循环语句(如for、while等)和switch语句。通过这些控制结构,可以实现程序的分支、循环和多路选择等功能。 4. 函数 函数是C语言中用于封装代码的单元,可以实现代码的复用和模块化。C语言中定义函数使用关键字“void”或返回值类型(如int、float等),并通过“{”和“}”括起来的代码块来实现函数的功能。 5. 指针 指针是C语言中用于存储变量地址的变量。通过指针,可以实现对内存的间接访问和修改。C语言中定义指针使用星号()符号,指向数组、字符串和结构体等数据结构时,还需要注意数组名和字符串常量的特殊性质。 6. 数组和字符串 数组是C语言中用于存储同类型数据的结构,可以通过索引访问和修改数组中的元素。字符串是C语言中用于存储文本数据的特殊类型,通常以字符串常量的形式出现,用双引号("...")括起来,末尾自动添加'\0'字符。 7. 结构体和联合 结构体和联合是C语言中用于存储不同类型数据的复合数据类型。结构体由多个成员组成,每个成员可以是不同的数据类型;联合由多个变量组成,它们共用同一块内存空间。通过结构体和联合,可以实现数据的封装和抽象。 8. 文件操作 C语言中通过文件操作函数(如fopen、fclose、fread、fwrite等)实现对文件的读写操作。文件操作函数通常返回文件指针,用于表示打开的文件。通过文件指针,可以进行文件的定位、读写等操作。 总之,C语言是一种功能强大、灵活高效的编程语言,广泛应用于各种领域。掌握C语言的基本语法和数据结构,可以为编程学习和实践打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值