<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>

          Catboost算法原理解析及代碼實現(xiàn)

          共 2998字,需瀏覽 6分鐘

           ·

          2021-12-25 21:26

          前言

          今天博主來介紹一個超級簡單并且又極其實用的boosting算法包Catboost,據(jù)開發(fā)者所說這一boosting算法是超越Lightgbm和XGBoost的又一個神器。

          catboost 簡介

          在博主看來catboost有一下三個的優(yōu)點:

          • 它自動采用特殊的方式處理類別型特征(categorical features)。首先對categorical features做一些統(tǒng)計,計算某個類別特征(category)出現(xiàn)的頻率,之后加上超參數(shù),生成新的數(shù)值型特征(numerical features)。這也是我在這里介紹這個算法最大的motivtion,有了catboost,再也不用手動處理類別型特征了。

          • catboost還使用了組合類別特征,可以利用到特征之間的聯(lián)系,這極大的豐富了特征維度

          • catboost的基模型采用的是對稱樹,同時計算leaf-value方式和傳統(tǒng)的boosting算法也不一樣,傳統(tǒng)的boosting算法計算的是平均數(shù),而catboost在這方面做了優(yōu)化采用了其他的算法,這些改進都能防止模型過擬合

           

          catboost 實戰(zhàn)

          這里博主采用的是之前參加一個CTR點擊率預(yù)估的數(shù)據(jù)集,首先通過pandas讀入數(shù)據(jù)。

           

          
               
          1. from catboost import CatBoostClassifier

          2. import pandas as pd

          3. from sklearn.model_selection import train_test_split

          4. import numpy as np

          5. data = pd.read_csv("ctr_train.txt", delimiter="\t")

          6. del data["user_tags"]

          7. data = data.fillna(0)

          8. X_train, X_validation, y_train, y_validation = train_test_split(data.iloc[:,:-1],data.iloc[:,-1],test_size=0.3 , random_state=1234)

          這里我們可以觀察一下數(shù)據(jù)的特征列,這里有很多列特征比如廣告的寬高是否可以下載是否會跳轉(zhuǎn)等一些特征,而且特征的數(shù)據(jù)類型各不一樣,有數(shù)值型(creative_height),布爾型(creative_is_js)等不同類型的特征。

          data


          下圖我們對所有特征做了一個統(tǒng)計,發(fā)現(xiàn)整個訓(xùn)練數(shù)據(jù)集一共有34列,除去標(biāo)簽列,整個數(shù)據(jù)集一共有33個特征,其中6個為布爾型特征,2個為浮點型特征,18個整型特征,還有8個對象型特征。

          data_information


          如果按照正常的算法,此時應(yīng)該將非數(shù)值型特征通過各種數(shù)據(jù)預(yù)處理手段,各種編碼方式轉(zhuǎn)化為數(shù)值型特征。而在catboost中你根本不用費心干這些,你只需要告訴算法,哪些特征屬于類別特征,它會自動幫你處理。代碼如下所示:

           

           

          
               
          1. categorical_features_indices = np.where(X_train.dtypes != np.float)[0]

          2. model = CatBoostClassifier(iterations=100, depth=5,cat_features=categorical_features_indices,learning_rate=0.5, loss_function='Logloss',

          3. logging_level='Verbose')

          最后就是將數(shù)據(jù)喂給算法,訓(xùn)練走起來。

           

          model.fit(X_train,y_train,eval_set=(X_validation, y_validation),plot=True)

          將plot = ture 打開后,catboot包還提供了非常炫酷的訓(xùn)練可視化功能,從下圖可以看到我的Logloss正在不停的下降。

           

          training

           

          訓(xùn)練結(jié)束后,通過model.feature_importances_屬性,我們可以拿到這些特征的重要程度數(shù)據(jù),特征的重要性程度可以幫助我們分析出一些有用的信息。

           

          
               
          1. import matplotlib.pyplot as plt

          2. fea_ = model.feature_importances_

          3. fea_name = model.feature_names_

          4. plt.figure(figsize=(10, 10))

          5. plt.barh(fea_name,fea_,height =0.5)

          執(zhí)行上方代碼,我們可以拿到特征重要程度的可視化結(jié)構(gòu),從下圖我們發(fā)現(xiàn)campaign_id是用戶是否點擊這個廣告的最關(guān)鍵的影響因子。

           

          feature_importance

          結(jié)語

          至此整個catboot的優(yōu)點和使用方法都介紹完了,是不是覺得十分簡單易用,而且功能強大。深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)減弱了我們對特征工程的依賴,catboost也在朝著這方面努力。所以有時候碰到需要特別多的前期數(shù)據(jù)處理和特征數(shù)值化的任務(wù)時,可以嘗試用一下catboost,python pip install catboost 即可安裝哦。




          Python“寶藏級”公眾號【Python之王】專注于Python領(lǐng)域,會爬蟲,數(shù)分,C++,tensorflow和Pytorch等等

          近 2年共原創(chuàng) 100+ 篇技術(shù)文章。創(chuàng)作的精品文章系列有:

          日常收集整理了一批不錯的 Python 學(xué)習(xí)資料,有需要的小伙可以自行免費領(lǐng)取。

          獲取方式如下:公眾號回復(fù)資料領(lǐng)取Python等系列筆記,項目,書籍,直接套上模板就可以用了。資料包含算法、python、算法小抄、力扣刷題手冊和 C++ 等學(xué)習(xí)資料!

          瀏覽 293
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  一区二区精品视频尤酸乳 | 青青草原视频免费在线观看 | 免费一级婬片AA片观看 | 欧美日韩黄色一级视频 | 一区二区三区未删减 |