xgboost算法教程(兩種使用方法)

標籤: xgboost
做者:煉己者
------
歡迎你們訪問個人簡書以及個人博客
本博客全部內容以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,而且是非商業用途,謝謝!
------python

你們若是感受格式看着彆扭的話,也能夠去個人簡書裏看,這裏面markdown的編輯效果不錯算法

1.摘要

  • xgboost 是個很棒的算法,基本上遇到分類問題,都會先拿xgboost跑一跑,由於它的效果是很好的。此算法源自陳天奇大佬,它的原理我就很少說了,能夠去看大神的論文。
  • 本文主要介紹xgboost算法的實現。xgboost算法有兩種方法能夠實現,第一種就是調用sklearn庫,第二種就是網上下載的xgboost包

2.操做思路

(1)調用sklearn庫的xgboost算法來進行文本分類

  • 第一步:把文本轉爲TFIDF向量windows

    這裏面就涉及到了文本的預處理了,有不少操做,套路是固定的。好比去停用詞,去掉一些指定的奇怪符號,分詞等操做。詳情你們能夠看這篇文章——中文文本的預處理 。對於怎麼用sklearn庫將文本轉爲TFIDF向量,你們能夠看這篇文章——使用不一樣的方法計算TF-IDF值markdown

  • 第二步:調用sklearn的xgboost算法
from xgboost import XGBClassifier
xgbc = XGBClassifier()
xgbc.fit(X_train, y_train)

X_train, y_train數據格式符合sklearn的要求便可,這裏再也不贅述,其實直接調用sklearn計算tfidf的方法就能夠了學習

(2)調用xgboost庫來進行文本分類

首先下載xgboost算法包,從下面這個網址就能夠找到windows版本的了
https://www.lfd.uci.edu/~gohlke/pythonlibs/code

看了網上不少文章,好多都不直截了當地把數據給你看,竟說一些虛的。你不知道這個算法包所要求的數據格式,那該怎麼操做。
因此咱們首先看一下xgboost算法包所要求的數據格式blog

-1 3367:0.5103014996095588 58258:0.7395069334859974 2027:0.43900099637970286 100000:0
-1 4:1.0 100000:0
-1 415:0.6398192123775941 1519:0.4588776849973563 416:0.3584690940979446 1793:0.40344923876987276 181:0.2979786334564799 100000:0
-1 100000:0
-1 1198:0.40847247591945973 2696:0.3283454215475906 4177:0.44923012253203026 5138:0.5667874369451246 793:0.322578190068597 89:0.3134120772849428 100000:0
-1 5723:0.7442708333186842 11957:0.667877927971206 100000:0
-1 1242:0.291656345459087 1042:0.5230367071957044 867:0.201093108317622 4653:0.12886942653591874 1677:0.11557567851702705 401:0.09045277190046198 1418:0.37780570665526336 23187:0.17435885282574362 19413:0.18153924925026366 47353:0.21588503167788953 26486:0.1776484644780567 140:0.06556371798587017 3552:0.3134346764736389 9923:0.14897284990847234 4235:0.1400130703981178 10074:0.201093108317622 5003:0.1400130703981178 477:0.059368723610437456 3138:0.12432562118943459 18158:0.19244038783832423 11634:0.13464996157113307 100000:0
-1 4009:0.25082607952773406 2565:0.23419907434673645 1804:0.3433315414553655 17453:0.45143782878931465 5423:0.3564658009755151 19011:0.4717358825927435 3323:0.3780312936247865 4965:0.26087188739580747 100000:0
-1 22:0.1587631734435183 412:0.1300669379236184 413:0.22962362689914045 414:0.9071773544857186 181:0.15109135553114256 415:0.16221155015652758 416:0.1817633053585686 100000:0
-1 1384:0.7633678190724622 1:0.6459640646387018 100000:0
-1 2:0.6671390512446658 4915:0.7449332092908513 100000:0

每一行表示一個樣本,咱們用第一行舉例,開頭的「-1」是樣本的類別(也就是標籤)。剩下的數據好比這個,"3367:0.5103014996095588",左邊的3367是指詞的ID值,右邊就是TFIDF值。是否是感受很眼熟,沒錯,用gensim庫計算的TFIDF值就能夠獲得這種格式。
仍是看那篇文章——使用不一樣的方法計算TF-IDF值
給你們看一下用gensim獲得TFIDF的格式utf-8

[[(0, 0.33699829595119235),
  (1, 0.8119707171924228),
  (2, 0.33699829595119235),
  (4, 0.33699829595119235)],
 [(0, 0.10212329019650272),
  (2, 0.10212329019650272),
  (4, 0.10212329019650272),
  (5, 0.9842319344536239)],
 [(6, 0.5773502691896258), (7, 0.5773502691896258), (8, 0.5773502691896258)],
 [(0, 0.33699829595119235),
  (1, 0.8119707171924228),
  (2, 0.33699829595119235),
  (4, 0.33699829595119235)]]

因此接下來把用gensim訓練獲得的TFIDF向量轉爲咱們須要的數據格式便可
我在這裏寫個示例代碼,你們仿照着作便可,至於標籤的寫入仿照着來就行ci

a = [[(0, 0.33699829595119235),
  (1, 0.8119707171924228),
  (2, 0.33699829595119235),
  (4, 0.33699829595119235)],
 [(0, 0.10212329019650272),
  (2, 0.10212329019650272),
  (4, 0.10212329019650272),
  (5, 0.9842319344536239)],
 [(6, 0.5773502691896258), (7, 0.5773502691896258), (8, 0.5773502691896258)],
 [(0, 0.33699829595119235),
  (1, 0.8119707171924228),
  (2, 0.33699829595119235),
  (4, 0.33699829595119235)]]

with open('test.txt','w',encoding='utf-8') as fw:
    for i in range(len(a)):
        for j in range(len(a[i])):
            fw.write(str(a[i][j][0]) + ":" + str(a[i][j][1]) + '\n')

由上面代碼可輸出:get

0:0.33699829595119235
1:0.8119707171924228
2:0.33699829595119235
4:0.33699829595119235
0:0.10212329019650272
2:0.10212329019650272
4:0.10212329019650272
5:0.9842319344536239
6:0.5773502691896258
7:0.5773502691896258
8:0.5773502691896258
0:0.33699829595119235
1:0.8119707171924228
2:0.33699829595119235
4:0.33699829595119235

數據轉換好以後,咱們能夠正式操做了

A. 導入數據包

import xgboost as xgb

B. XGBoost自定義了一個數據矩陣類DMatrix,將咱們的數據轉爲矩陣

  • temp_train.txt 和 temp_test.txt就是咱們的前面轉換好的數據
dtrain = xgb.DMatrix('temp_train.txt') 
dtest = xgb.DMatrix('temp_test.txt')

C. 訓練並保存模型

  • 模型參數
param = {'max_depth':2,'eta':1,'silent':0,'objective':'binary:logistic'}
num_round = 2
  • 訓練模型並保存模型
bst = xgb.train(param,dtrain,num_round)
bst.save_model('xgboost.model')
  • 預測標籤(xgboost獲得的是預測標籤的機率,因此咱們要將其轉爲標籤)
preds = bst.predict(dtest) # 獲得的是第一類別的機率 
p_label = [round(value) for value in preds] # 獲得預測標籤

3. 總結

xgboost是一個很好的算法,通常的分類比賽都會先用xgboost跑一遍看看效果,因此在這裏分享給你們如何操做,但願會對你們有所幫助

相關文章
相關標籤/搜索