<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    【機(jī)器學(xué)習(xí)】機(jī)器學(xué)習(xí)模型迭代方法(Python)

    共 3900字,需瀏覽 8分鐘

     ·

    2022-11-01 12:36

    、模型迭代方法

    機(jī)器學(xué)習(xí)模型在實(shí)際應(yīng)用的場(chǎng)景,通常要根據(jù)新增的數(shù)據(jù)下進(jìn)行模型的迭代,常見的模型迭代方法有以下幾種:

    • 1、全量數(shù)據(jù)重新訓(xùn)練一個(gè)模型,直接合并歷史訓(xùn)練數(shù)據(jù)與新增的數(shù)據(jù),模型直接離線學(xué)習(xí)全量數(shù)據(jù),學(xué)習(xí)得到一個(gè)全新的模型。優(yōu)缺點(diǎn):這也是實(shí)際最為常見的模型迭代方式,通常模型效果也是最好的,但這樣模型迭代比較耗時(shí),資源耗費(fèi)比較多,實(shí)時(shí)性較差,特別是在大數(shù)據(jù)場(chǎng)景更為困難;

    • 2、模型融合的方法,將舊模型的預(yù)測(cè)結(jié)果作為一個(gè)新增特征,在新的數(shù)據(jù)上面訓(xùn)練一個(gè)新的模型;優(yōu)缺點(diǎn):訓(xùn)練耗時(shí)較短了,增加決策的復(fù)雜度,新增數(shù)據(jù)量要足夠多才能保證融合效果;

    • 3、增量(在線)學(xué)習(xí)的方法,如sklearn中算法可調(diào)用partial_fit直接增量學(xué)習(xí),可以直接利用新增的數(shù)據(jù)在原來的模型的基礎(chǔ)上做進(jìn)一步更新。增量學(xué)習(xí)對(duì)于模型迭代是很有效率的(特別適用于神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),如 arxiv.org/abs/1711.03705)。實(shí)際使用中,在線學(xué)習(xí)和離線的全量學(xué)習(xí)經(jīng)常是結(jié)合使用,比如離線以全量數(shù)據(jù)訓(xùn)練一個(gè)復(fù)雜的模型,在線利用新增樣本進(jìn)行微調(diào)。優(yōu)缺點(diǎn):對(duì)內(nèi)存友好,模型迭代快且效率較高;

    二、增量學(xué)習(xí)

    主流的幾種機(jī)器學(xué)習(xí)框架,已經(jīng)實(shí)現(xiàn)了增量學(xué)習(xí)的功能,像sklearn可以直接調(diào)用partial_fit做增量學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)增量學(xué)習(xí)也很方便,如下tensorflow.keras框架實(shí)現(xiàn)增量學(xué)習(xí):

    # tensorflow.keras增量學(xué)習(xí)model_path = 'init.model' #加載線上的原模型loaded_model = tf.keras.models.load_model(model_path)# 新數(shù)據(jù)上接著訓(xùn)練原模型history = loaded_model.fit(    train_data_gen,    epochs=epochs)

    本文主要對(duì)樹模型的增量(在線)學(xué)習(xí)展開介紹,如下以樹模型lightgbm及xgboost增量學(xué)習(xí)金融違約的分類模型為例,驗(yàn)證實(shí)際的效果。示例沿用之前文章的數(shù)據(jù)集:一文梳理金融風(fēng)控建模全流程(Python)

    開始之前,我們先把數(shù)據(jù)劃分為訓(xùn)練集及測(cè)試集,測(cè)試集數(shù)據(jù)僅做評(píng)估。接著訓(xùn)練數(shù)據(jù)再劃分為兩部分:舊訓(xùn)練數(shù)據(jù),新訓(xùn)練數(shù)據(jù)集。以此驗(yàn)證用增量學(xué)習(xí)方法進(jìn)行學(xué)習(xí)新數(shù)據(jù)集的效果

    # 劃分?jǐn)?shù)據(jù)集:訓(xùn)練集和測(cè)試集train_x, test_x, train_y, test_y = train_test_split(train_bank[num_feas + cate_feas], train_bank.isDefault,test_size=0.3, random_state=0)
    # 訓(xùn)練集再劃分新舊的訓(xùn)練集,新的訓(xùn)練集用增量學(xué)習(xí)方法進(jìn)行學(xué)習(xí)trainold_x, trainnew_x, trainold_y, trainnew_y = train_test_split(train_x, train_y,test_size=0.5, random_state=0)
    lgb_train = lgb.Dataset(trainold_x, trainold_y)lgb_newtrain = lgb.Dataset(trainnew_x, trainnew_y)lgb_eval = lgb.Dataset(test_x,test_y, reference=lgb_train)

    訓(xùn)練原始的lightgbm模型,評(píng)估模型效果還算不錯(cuò):train  {'AUC': 0.8696629477540933, 'KS': 0.6470059543871476} test  {'AUC': 0.8458304576799567, 'KS': 0.6284431987999525}

    # 參數(shù)params = {    'task': 'train',    'boosting_type': 'gbdt',  # 設(shè)置提升類型    'objective': 'binary',  # 目標(biāo)函數(shù)    'metric': {'l2', 'auc'},  # 評(píng)估函數(shù)    'num_leaves': 12,  # 葉子節(jié)點(diǎn)數(shù)    'learning_rate': 0.05,  # 學(xué)習(xí)速率    'feature_fraction': 0.9,  # 建樹的特征選擇比例    'bagging_fraction': 0.8,  # 建樹的樣本采樣比例    'verbose': 1  } # 模型訓(xùn)練gbm = lgb.train(params, lgb_train, num_boost_round=1)
    print('train ',model_metrics(gbm,trainold_x, trainold_y))print('test ',model_metrics(gbm,test_x,test_y))# 樹模型決策的可視化

    # 需要先安裝https://graphviz.org/download/import osos.environ["PATH"] += os.pathsep + 'D:/Program Files/Graphviz/bin/'
    for k in range(1): ax = lgb.plot_tree(gbm, tree_index=k, figsize=(30,20), show_info=['split_gain','internal_value','internal_count','internal_weight','leaf_count','leaf_weight','data_percentage'])plt.show()

    打印出原始樹模型的結(jié)構(gòu)如下:

    接下來就是本文的重點(diǎn)了,增量學(xué)習(xí)新的lightgbm樹模型,我們?cè)谠術(shù)bm模型的基礎(chǔ)上繼續(xù)更新模型為gbm2。

    其實(shí),lightgbm增量學(xué)習(xí)的更新方式其實(shí)就是原有模型的樹結(jié)構(gòu)都不變的基礎(chǔ)上,繼續(xù)添加學(xué)習(xí)一些樹,比如如下代碼我們會(huì)繼續(xù)訓(xùn)練出2棵新的樹,

    num_boost_round = 2  # 繼續(xù)訓(xùn)練2顆樹gbm2 = lgb.train(params,                lgb_newtrain,  #新的數(shù)據(jù)                num_boost_round=num_boost_round ,                init_model=gbm,             #在原模型gbm的基礎(chǔ)上接著訓(xùn)練                verbose_eval=False,                keep_training_booster=True) # 支持模型增量訓(xùn)練

    從增量學(xué)習(xí)后的樹模型的結(jié)構(gòu),可以看出原有樹模型gbm結(jié)構(gòu)一點(diǎn)都沒有變,只是再后面更新了2棵新的樹。驗(yàn)證增量學(xué)習(xí)更新后的模型效果,測(cè)試集的auc是有提升1%左右的(注:本例無考慮調(diào)參下的效果差異,僅從效果來看是還不錯(cuò)的~)

    這時(shí)就有個(gè)疑問了,樹模型的增量學(xué)習(xí)只有像類似“打補(bǔ)丁”的更新方式嗎,不能通過更新下舊模型的葉子節(jié)點(diǎn)的權(quán)重?

    其實(shí),這兩種增量學(xué)習(xí)方法,樹模型可以有的,但是對(duì)于lightgbm我沒有找到支持的方法,有興趣的同學(xué)可以再了解下。。如下為XGBOOST實(shí)現(xiàn)兩種增量學(xué)習(xí)的方法

    ###  xgbooost 增量學(xué)習(xí)  https://xgboost.readthedocs.io/en/latest/parameter.htmlimport xgboost as xgbimport pprint
    xgb_params_01 = {}# 增量學(xué)習(xí)的方法一xgb_params_02 = {'process_type': 'default', # default, update 'refresh_leaf': True} # 當(dāng)前迭代樹的結(jié)構(gòu)不變,并在此增加新樹# 增量學(xué)習(xí)的方法二xgb_params_02 = {'process_type': 'update', # default, update 'updater': 'refresh', # 也可以選擇再當(dāng)前模型做剪枝 'refresh_leaf': True} # 僅重新更新模型的葉節(jié)點(diǎn)權(quán)重,
    dtrain_2class = xgb.DMatrix(train_x[num_feas], label=train_y,enable_categorical=True)gbdt = xgb.train(xgb_params_01, dtrain_2class, num_boost_round=1) # 舊模型pprint.pprint(gbdt.get_dump())gbdt = xgb.train(xgb_params_02, dtrain_2class, num_boost_round=2, xgb_model=gbdt) # 更新模型pprint.pprint(gbdt.get_dump())
    閱讀原文訪問文章代碼,歡迎點(diǎn)贊在看轉(zhuǎn)發(fā)三連!
    往期精彩回顧




    瀏覽 61
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)
    評(píng)論
    圖片
    表情
    推薦
    點(diǎn)贊
    評(píng)論
    收藏
    分享

    手機(jī)掃一掃分享

    分享
    舉報(bào)

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    欧美成人精品一区二区三区在线观看 | 中文字幕免费在线观看 | 观看黄色视频网站 | 日本a在线视频 | 青青草青青日青青干视频在 |