1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        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點擊率預估的數(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)整個訓練數(shù)據(jù)集一共有34列,除去標簽列,整個數(shù)據(jù)集一共有33個特征,其中6個為布爾型特征,2個為浮點型特征,18個整型特征,還有8個對象型特征。

        data_information


        如果按照正常的算法,此時應該將非數(shù)值型特征通過各種數(shù)據(jù)預處理手段,各種編碼方式轉(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ù)喂給算法,訓練走起來。

         

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

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

         

        training

         

        訓練結(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)點和使用方法都介紹完了,是不是覺得十分簡單易用,而且功能強大。深度學習,神經(jīng)網(wǎng)絡減弱了我們對特征工程的依賴,catboost也在朝著這方面努力。所以有時候碰到需要特別多的前期數(shù)據(jù)處理和特征數(shù)值化的任務時,可以嘗試用一下catboost,python pip install catboost 即可安裝哦。




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

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

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

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

        瀏覽 293
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

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

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲一级无码 | japanese一本色道久久 | 2019无码中文 | 日韩日 | 日韩欧美一级二级三级 | 久久一级片 | 午夜成人免费观看 | 777午夜精品 | 被老师带到办公室调教 | 精品久久久久久久久久久久久久 |