<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LightGBM 可視化調(diào)參

          共 4548字,需瀏覽 10分鐘

           ·

          2022-04-13 00:53

          大家好,在100天搞定機(jī)器學(xué)習(xí)|Day63 徹底掌握 LightGBM一文中,我介紹了LightGBM 的模型原理和一個(gè)極簡(jiǎn)實(shí)例。最近我發(fā)現(xiàn)Huggingface與Streamlit好像更配,所以就開(kāi)發(fā)了一個(gè)簡(jiǎn)易的 LightGBM 可視化調(diào)參的小工具,旨在讓大家可以更深入地理解 LightGBM

          網(wǎng)址:
          https://huggingface.co/spaces/beihai/LightGBM-parameter-tuning

          只隨便放了幾個(gè)參數(shù),調(diào)整這些參數(shù)可以實(shí)時(shí)看到模型評(píng)估指標(biāo)的變化。代碼我也放到文章中了,大家有好的優(yōu)化思路可以留言。

          下面就詳細(xì)介紹一下實(shí)現(xiàn)過(guò)程:

          LightGBM 的參數(shù)

          在完成模型構(gòu)建之后,必須對(duì)模型的效果進(jìn)行評(píng)估,根據(jù)評(píng)估結(jié)果來(lái)繼續(xù)調(diào)整模型的參數(shù)、特征或者算法,以達(dá)到滿(mǎn)意的結(jié)果。

          LightGBM,有核心參數(shù),學(xué)習(xí)控制參數(shù),IO參數(shù),目標(biāo)參數(shù),度量參數(shù),網(wǎng)絡(luò)參數(shù),GPU參數(shù),模型參數(shù),這里我常修改的便是核心參數(shù),學(xué)習(xí)控制參數(shù),度量參數(shù)等。

          Control Parameters含義用法
          max_depth樹(shù)的最大深度當(dāng)模型過(guò)擬合時(shí),可以考慮首先降低 max_depth
          min_data_in_leaf葉子可能具有的最小記錄數(shù)默認(rèn)20,過(guò)擬合時(shí)用
          feature_fraction例如 為0.8時(shí),意味著在每次迭代中隨機(jī)選擇80%的參數(shù)來(lái)建樹(shù)boosting 為 random forest 時(shí)用
          bagging_fraction每次迭代時(shí)用的數(shù)據(jù)比例用于加快訓(xùn)練速度和減小過(guò)擬合
          early_stopping_round如果一次驗(yàn)證數(shù)據(jù)的一個(gè)度量在最近的early_stopping_round 回合中沒(méi)有提高,模型將停止訓(xùn)練加速分析,減少過(guò)多迭代
          lambda指定正則化0~1
          min_gain_to_split描述分裂的最小 gain控制樹(shù)的有用的分裂
          max_cat_group在 group 邊界上找到分割點(diǎn)當(dāng)類(lèi)別數(shù)量很多時(shí),找分割點(diǎn)很容易過(guò)擬合時(shí)

          CoreParameters含義用法
          Task數(shù)據(jù)的用途選擇 train 或者 predict
          application模型的用途選擇 regression: 回歸時(shí),binary: 二分類(lèi)時(shí),multiclass: 多分類(lèi)時(shí)
          boosting要用的算法gbdt, rf: random forest, dart: Dropouts meet Multiple Additive Regression Trees, goss: Gradient-based One-Side Sampling
          num_boost_round迭代次數(shù)通常 100+
          learning_rate如果一次驗(yàn)證數(shù)據(jù)的一個(gè)度量在最近的 early_stopping_round 回合中沒(méi)有提高,模型將停止訓(xùn)練常用 0.1, 0.001, 0.003…
          num_leaves
          默認(rèn) 31
          device
          cpu 或者 gpu
          metric
          mae: mean absolute error , mse: mean squared error , binary_logloss: loss for binary classification , multi_logloss: loss for multi classification

          Faster Speedbetter accuracyover-fitting
          將 max_bin 設(shè)置小一些用較大的 max_binmax_bin 小一些
          num_leaves 大一些num_leaves 小一些
          用 feature_fraction 來(lái)做 sub-sampling
          用 feature_fraction
          用 bagging_fraction 和 bagging_freq
          設(shè)定 bagging_fraction 和 bagging_freq
          training data 多一些training data 多一些
          用 save_binary 來(lái)加速數(shù)據(jù)加載直接用 categorical feature用 gmin_data_in_leaf 和 min_sum_hessian_in_leaf
          用 parallel learning用 dart用 lambda_l1, lambda_l2 ,min_gain_to_split 做正則化
          num_iterations 大一些,learning_rate 小一些用 max_depth 控制樹(shù)的深度

          模型評(píng)估指標(biāo)

          以分類(lèi)模型為例,常見(jiàn)的模型評(píng)估指標(biāo)有一下幾種:

          混淆矩陣
          混淆矩陣是能夠比較全面的反映模型的性能,從混淆矩陣能夠衍生出很多的指標(biāo)來(lái)。

          ROC曲線
          ROC曲線,全稱(chēng)The Receiver Operating Characteristic Curve,譯為受試者操作特性曲線。這是一條以不同閾值 下的假正率FPR為橫坐標(biāo),不同閾值下的召回率Recall為縱坐標(biāo)的曲線。讓我們衡量模型在盡量捕捉少數(shù)類(lèi)的時(shí)候,誤傷多數(shù)類(lèi)的情況如何變化的。

          AUC
          AUC(Area Under the ROC Curve)指標(biāo)是在二分類(lèi)問(wèn)題中,模型評(píng)估階段常被用作最重要的評(píng)估指標(biāo)來(lái)衡量模型的穩(wěn)定性。ROC曲線下的面積稱(chēng)為AUC面積,AUC面積越大說(shuō)明ROC曲線越靠近左上角,模型越優(yōu);

          Streamlit 實(shí)現(xiàn)

          Streamlit我就不再多做介紹了,老讀者應(yīng)該都特別熟悉了。就再列一下之前開(kāi)發(fā)的幾個(gè)小東西:

          核心代碼如下,完整代碼我放到Github,歡迎大家給個(gè)Star

          https://github.com/tjxj/visual-parameter-tuning-with-streamlit

          from?definitions?import?*

          st.set_option('deprecation.showPyplotGlobalUse',?False)
          st.sidebar.subheader("請(qǐng)選擇模型參數(shù):sunglasses:")

          #?加載數(shù)據(jù)
          breast_cancer?=?load_breast_cancer()
          data?=?breast_cancer.data
          target?=?breast_cancer.target

          #?劃分訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)
          X_train,?X_test,?y_train,?y_test?=?train_test_split(data,?target,?test_size=0.2)

          #?轉(zhuǎn)換為Dataset數(shù)據(jù)格式
          lgb_train?=?lgb.Dataset(X_train,?y_train)
          lgb_eval?=?lgb.Dataset(X_test,?y_test,?reference=lgb_train)

          #?模型訓(xùn)練
          params?=?{'num_leaves':?num_leaves,?'max_depth':?max_depth,
          ????????????'min_data_in_leaf':?min_data_in_leaf,?
          ????????????'feature_fraction':?feature_fraction,
          ????????????'min_data_per_group':?min_data_per_group,?
          ????????????'max_cat_threshold':?max_cat_threshold,
          ????????????'learning_rate':learning_rate,'num_leaves':num_leaves,
          ????????????'max_bin':max_bin,'num_iterations':num_iterations
          ????????????}

          gbm?=?lgb.train(params,?lgb_train,?num_boost_round=2000,?valid_sets=lgb_eval,?early_stopping_rounds=500)
          lgb_eval?=?lgb.Dataset(X_test,?y_test,?reference=lgb_train)??
          probs?=?gbm.predict(X_test,?num_iteration=gbm.best_iteration)??#?輸出的是概率結(jié)果??

          fpr,?tpr,?thresholds?=?roc_curve(y_test,?probs)
          st.write('------------------------------------')
          st.write('Confusion?Matrix:')
          st.write(confusion_matrix(y_test,?np.where(probs?>?0.5,?1,?0)))

          st.write('------------------------------------')
          st.write('Classification?Report:')
          report?=?classification_report(y_test,?np.where(probs?>?0.5,?1,?0),?output_dict=True)
          report_matrix?=?pd.DataFrame(report).transpose()
          st.dataframe(report_matrix)

          st.write('------------------------------------')
          st.write('ROC:')

          plot_roc(fpr,?tpr)

          上傳Huggingface

          Huggingface 前一篇文章(騰訊的這個(gè)算法,我搬到了網(wǎng)上,隨便玩!)我已經(jīng)介紹過(guò)了,這里就順便再講一下步驟吧。

          step1:注冊(cè)Huggingface賬號(hào)

          step2:創(chuàng)建Space,SDK記得選擇Streamlit

          step3:克隆新建的space代碼,然后將改好的代碼push上去

          git?lfs?install?
          git?add?.
          git?commit?-m?"commit?from?$beihai"
          git?push

          push的時(shí)候會(huì)讓輸入用戶(hù)名(就是你的注冊(cè)郵箱)和密碼,解決git總輸入用戶(hù)名和密碼的問(wèn)題:git config --global credential.helper store

          push完成就大功告成了,回到你的space頁(yè)對(duì)應(yīng)項(xiàng)目,就可以看到效果了。

          https://huggingface.co/spaces/beihai/LightGBM-parameter-tuning



          相關(guān)閱讀:

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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久午夜无码鲁丝片午夜精 | 成人网站在线看 | 国产三级片电影成人久久久 | 青娱乐日韩精品 | 这里只有精品视频国产 |