日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python机器学习笔记:XgBoost算法(亲测)

發布時間:2024/9/20 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python机器学习笔记:XgBoost算法(亲测) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

1,Xgboost簡介

  Xgboost是Boosting算法的其中一種,Boosting算法的思想是將許多弱分類器集成在一起,形成一個強分類器。因為Xgboost是一種提升樹模型,所以它是將許多樹模型集成在一起,形成一個很強的分類器。而所用到的樹模型則是CART回歸樹模型。

  Xgboost是在GBDT的基礎上進行改進,使之更強大,適用于更大范圍。

  Xgboost一般和sklearn一起使用,但是由于sklearn中沒有集成Xgboost,所以才需要單獨下載安裝。

2,Xgboost的優點

  Xgboost算法可以給預測模型帶來能力的提升。當我們對其表現有更多了解的時候,我們會發現他有如下優勢:

2.1? 正則化

  實際上,Xgboost是以“正則化提升(regularized boosting)” 技術而聞名。Xgboost在代價函數里加入了正則項,用于控制模型的復雜度。正則項里包含了樹的葉子節點個數,每個葉子節點上輸出的score的L2模的平方和。從Bias-variance tradeoff角度來講,正則項降低了模型的variance,使學習出來的模型更加簡單,防止過擬合,這也是Xgboost優于傳統GBDT的一個特征

2.2? 并行處理

  Xgboost工具支持并行。眾所周知,Boosting算法是順序處理的,也是說Boosting不是一種串行的結構嗎?怎么并行的?注意Xgboost的并行不是tree粒度的并行。Xgboost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數里包含)。Xgboost的并行式在特征粒度上的,也就是說每一顆樹的構造都依賴于前一顆樹。

  我們知道,決策樹的學習最耗時的一個步驟就是對特征的值進行排序(因為要確定最佳分割點),Xgboost在訓練之前,預先對數據進行了排序,然后保存為block結構,后面的迭代中重復使用這個結構,大大減小計算量。這個block結構也使得并行成為了可能,在進行節點的分類時,需要計算每個特征的增益,大大減少計算量。這個block結構也使得并行成為了可能,在進行節點的分裂的時候,需要計算每個特征的增益,最終選增益最大的那個特征去做分裂,那么各個特征的增益計算就可以開多線程進行。

2.3? 靈活性

  Xgboost支持用戶自定義目標函數和評估函數,只要目標函數二階可導就行。它對模型增加了一個全新的維度,所以我們的處理不會受到任何限制。

2.4? 缺失值處理

  對于特征的值有缺失的樣本,Xgboost可以自動學習出他的分裂方向。Xgboost內置處理缺失值的規則。用戶需要提供一個和其他樣本不同的值,然后把它作為一個參數穿進去,以此來作為缺失值的取值。Xgboost在不同節點遇到缺失值時采用不同的處理方法,并且會學習未來遇到缺失值時的處理方法。

2.5? 剪枝

  Xgboost先從頂到底建立所有可以建立的子樹,再從底到頂反向機芯剪枝,比起GBM,這樣不容易陷入局部最優解

2.6? 內置交叉驗證

  Xgboost允許在每一輪Boosting迭代中使用交叉驗證。因此可以方便的獲得最優Boosting迭代次數,而GBM使用網格搜索,只能檢測有限個值。

?

3,Xgboost的離線安裝

1,點擊此處,下載對應自己Python版本的網址。

2,輸入安裝的程式:

1

pip install xgboost-0.81-cp37-cp37m-win_amd64.whl

?

Xgboost模型詳解

1,Xgboost能加載的各種數據格式解析

  Xgboost可以加載多種數據格式的訓練數據:

1

2

3

4

5

libsvm 格式的文本數據;

?

Numpy 的二維數組;

?

XGBoost 的二進制的緩存文件。加載的數據存儲在對象 DMatrix 中。

   下面一一列舉:

  記載libsvm格式的數據

1

dtrain1 = xgb.DMatrix('train.svm.txt')

  記載二進制的緩存文件

1

dtrain2? = xgb.DMatrix('train.svm.buffer')

  加載numpy的數組

1

2

3

data = np.random.rand(5,10)???????????????? # 5行10列數據集

label = np.random.randint(2,size=5)?????? # 二分類目標值

dtrain = xgb.DMatrix(data,label=label)??? # 組成訓練集

  將scipy.sparse格式的數據轉化為Dmatrix格式

1

2

csr = scipy.sparse.csr_matrix((dat,(row,col)))

dtrain = xgb.DMatrix( csr )

  將Dmatrix格式的數據保存成Xgboost的二進制格式,在下次加載時可以提高加載速度,使用方法如下:

1

2

dtrain = xgb.DMatrix('train.svm.txt')

dtrain.save_binary("train.buffer")

  可以使用如下方式處理DMatrix中的缺失值

1

dtrain = xgb.DMatrix( data, label=label, missing = -999.0)

  當需要給樣本設置權重時,可以用如下方式:

1

2

w = np.random.rand(5,1)

dtrain = xgb.DMatrix( data, label=label, missing = -999.0, weight=w)

2,Xgboost的模型參數

  Xgboost使用key-value字典的方式存儲參數

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# xgboost模型

params?= {

????'booster':'gbtree',

????'objective':'multi:softmax',?? # 多分類問題

????'num_class':10,? # 類別數,與multi softmax并用

????'gamma':0.1,??? # 用于控制是否后剪枝的參數,越大越保守,一般0.1 0.2的樣子

????'max_depth':12,? # 構建樹的深度,越大越容易過擬合

????'lambda':2,? # 控制模型復雜度的權重值的L2 正則化項參數,參數越大,模型越不容易過擬合

????'subsample':0.7, # 隨機采樣訓練樣本

????'colsample_bytree':3,# 這個參數默認為1,是每個葉子里面h的和至少是多少

????# 對于正負樣本不均衡時的0-1分類而言,假設h在0.01附近,min_child_weight為1

????#意味著葉子節點中最少需要包含100個樣本。這個參數非常影響結果,

????# 控制葉子節點中二階導的和的最小值,該參數值越小,越容易過擬合

????'silent':0,? # 設置成1 則沒有運行信息輸入,最好是設置成0

????'eta':0.007,? # 如同學習率

????'seed':1000,

????'nthread':7,? #CPU線程數

????#'eval_metric':'auc'

}

  

  在運行Xgboost之前,必須設置三種類型成熟:general parameters,booster parameters和task parameters:

  通用參數(General Parameters):該參數控制在提升(boosting)過程中使用哪種booster,常用的booster有樹模型(tree)和線性模型(linear model)

  Booster參數(Booster Parameters):這取決于使用哪種booster

  學習目標參數(Task Parameters):控制學習的場景,例如在回歸問題中會使用不同的參數控制排序

2.1, 通用參數

    • booster [default=gbtree]?
      • 有兩種模型可以選擇gbtree和gblinear。gbtree使用基于樹的模型進行提升計算,gblinear使用線性模型進行提升計算。缺省值為gbtree
    • silent [default=0]?
      • 取0時表示打印出運行時信息,取1時表示以緘默方式運行,不打印運行時的信息。缺省值為0
      • 建議取0,過程中的輸出數據有助于理解模型以及調參。另外實際上我設置其為1也通常無法緘默運行。。
    • nthread [default to maximum number of threads available if not set]?
      • XGBoost運行時的線程數。缺省值是當前系統可以獲得的最大線程數
      • 如果你希望以最大速度運行,建議不設置這個參數,模型將自動獲得最大線程
    • num_pbuffer [set automatically by xgboost, no need to be set by user]?
      • size of prediction buffer, normally set to number of training instances. The buffers are used to save the prediction results of last boosting step.
    • num_feature [set automatically by xgboost, no need to be set by user]?
      • boosting過程中用到的特征維數,設置為特征個數。XGBoost會自動設置,不需要手工設置

2.2,tree booster參數

    • eta [default=0.3]?
      • 為了防止過擬合,更新過程中用到的收縮步長。在每次提升計算之后,算法會直接獲得新特征的權重。 eta通過縮減特征的權重使提升計算過程更加保守。缺省值為0.3
      • 取值范圍為:[0,1]
      • 通常最后設置eta為0.01~0.2
    • gamma?[default=0]?
      • minimum loss reduction required to make a further partition on a leaf node of the tree. the larger, the more conservative the algorithm will be.
      • range: [0,∞]
      • 模型在默認情況下,對于一個節點的劃分只有在其loss function 得到結果大于0的情況下才進行,而gamma 給定了所需的最低loss function的值
      • gamma值使得算法更conservation,且其值依賴于loss function ,在模型中應該進行調參。
    • max_depth [default=6]?
      • 樹的最大深度。缺省值為6
      • 取值范圍為:[1,∞]
      • 指樹的最大深度
      • 樹的深度越大,則對數據的擬合程度越高(過擬合程度也越高)。即該參數也是控制過擬合
      • 建議通過交叉驗證(xgb.cv ) 進行調參
      • 通常取值:3-10
    • min_child_weight [default=1]?
      • 孩子節點中最小的樣本權重和。如果一個葉子節點的樣本權重和小于min_child_weight則拆分過程結束。在現行回歸模型中,這個參數是指建立每個模型所需要的最小樣本數。該成熟越大算法越conservative。即調大這個參數能夠控制過擬合。
      • 取值范圍為: [0,∞]
    • max_delta_step [default=0]?
      • Maximum delta step we allow each tree’s weight estimation to be. If the value is set to 0, it means there is no constraint. If it is set to a positive value, it can help making the update step more conservative. Usually this parameter is not needed, but it might help in logistic regression when class is extremely imbalanced. Set it to value of 1-10 might help control the update
      • 取值范圍為:[0,∞]
      • 如果取值為0,那么意味著無限制。如果取為正數,則其使得xgboost更新過程更加保守。
      • 通常不需要設置這個值,但在使用logistics 回歸時,若類別極度不平衡,則調整該參數可能有效果
    • subsample [default=1]?
      • 用于訓練模型的子樣本占整個樣本集合的比例。如果設置為0.5則意味著XGBoost將隨機的從整個樣本集合中抽取出50%的子樣本建立樹模型,這能夠防止過擬合。
      • 取值范圍為:(0,1]
    • colsample_bytree [default=1]?
      • 在建立樹時對特征隨機采樣的比例。缺省值為1
      • 取值范圍:(0,1]
    • colsample_bylevel[default=1]
      • 決定每次節點劃分時子樣例的比例
      • 通常不使用,因為subsample和colsample_bytree已經可以起到相同的作用了
    • scale_pos_weight[default=0]
      • A value greater than 0 can be used in case of high class imbalance as it helps in faster convergence.
      • 大于0的取值可以處理類別不平衡的情況。幫助模型更快收斂

2.3,Linear Booster參數

    • lambda [default=0]?
      • L2 正則的懲罰系數
      • 用于處理XGBoost的正則化部分。通常不使用,但可以用來降低過擬合
    • alpha [default=0]?
      • L1 正則的懲罰系數
      • 當數據維度極高時可以使用,使得算法運行更快。
    • lambda_bias?
      • 在偏置上的L2正則。缺省值為0(在L1上沒有偏置項的正則,因為L1時偏置不重要)

?

2.4,學習目標參數

  這個參數是來控制理想的優化目標和每一步結果的度量方法。

    • objective [ default=reg:linear ]?
      • 定義學習任務及相應的學習目標,可選的目標函數如下:
      • “reg:linear” –線性回歸。
      • “reg:logistic” –邏輯回歸。
      • “binary:logistic” –二分類的邏輯回歸問題,輸出為概率。
      • “binary:logitraw” –二分類的邏輯回歸問題,輸出的結果為wTx。
      • “count:poisson” –計數問題的poisson回歸,輸出結果為poisson分布。
      • 在poisson回歸中,max_delta_step的缺省值為0.7。(used to safeguard optimization)
      • “multi:softmax” –讓XGBoost采用softmax目標函數處理多分類問題,同時需要設置參數num_class(類別個數)
      • “multi:softprob” –和softmax一樣,但是輸出的是ndata * nclass的向量,可以將該向量reshape成ndata行nclass列的矩陣。每行數據表示樣本所屬于每個類別的概率。
      • “rank:pairwise” –set XGBoost to do ranking task by minimizing the pairwise loss
    • base_score [ default=0.5 ]?
      • the initial prediction score of all instances, global bias
    • eval_metric [ default according to objective ]?
      • 校驗數據所需要的評價指標,不同的目標函數將會有缺省的評價指標(rmse for regression, and error for classification, mean average precision for ranking)
      • 用戶可以添加多種評價指標,對于Python用戶要以list傳遞參數對給程序,而不是map參數list參數不會覆蓋’eval_metric’
      • The choices are listed below:
      • “rmse”:?root mean square error
      • “logloss”: negative?log-likelihood
      • “error”:?Binary classification error rate. It is calculated as #(wrong cases)/#(all cases). For the predictions, the evaluation will regard the instances with prediction value larger than 0.5 as positive instances, and the others as negative instances.
      • “merror”:?Multiclass classification error rate. It is calculated as #(wrong cases)/#(all cases).
      • “mlogloss”: Multiclass logloss
      • “auc”:?Area under the curve?for ranking evaluation.
      • “ndcg”:Normalized Discounted Cumulative Gain
      • “map”:Mean average precision
      • “ndcg@n”,”map@n”: n can be assigned as an integer to cut off the top positions in the lists for evaluation.
      • “ndcg-“,”map-“,”ndcg@n-“,”map@n-“: In XGBoost, NDCG and MAP will evaluate the score of a list without any positive samples as 1. By adding “-” in the evaluation metric XGBoost will evaluate these score as 0 to be consistent under some conditions.?
        training repeatively
    • seed [ default=0 ]?
      • 隨機數的種子。缺省值為0
      • 可以用于產生可重復的結果(每次取一樣的seed即可得到相同的隨機劃分)

3,Xgboost基本方法和默認參數

1

2

3

xgboost.train(params,dtrain,num_boost_round=10,evals(),obj=None,

feval=None,maximize=False,early_stopping_rounds=None,evals_result=None,

verbose_eval=True,learning_rates=None,xgb_model=None)

  

  parms:這是一個字典,里面包含著訓練中的參數關鍵字和對應的值,形式是parms = {'booster':'gbtree','eta':0.1}

  dtrain:訓練的數據

  num_boost_round:這是指提升迭代的個數

  evals:這是一個列表,用于對訓練過程中進行評估列表中的元素。形式是evals = [(dtrain,'train'),(dval,'val')] 或者是 evals =[(dtrain,'train')] ,對于第一種情況,它使得我們可以在訓練過程中觀察驗證集的效果。

  obj :自定義目的函數

  feval:自定義評估函數

  maximize:是否對評估函數進行最大化

  early_stopping_rounds:早起停止次數,假設為100,驗證集的誤差迭代到一定程度在100次內不能再繼續降低,就停止迭代。這要求evals里至少有一個元素,如果有多個,按照最后一個去執行。返回的是最后的迭代次數(不是最好的)。如果early_stopping_rounds存在,則模型會生成三個屬性,bst.best_score ,bst.best_iteration和bst.best_ntree_limit

  evals_result:字典,存儲在watchlist中的元素的評估結果

  verbose_eval(可以輸入布爾型或者數值型):也要求evals里至少有一個元素,如果為True,則對evals中元素的評估結果會輸出在結果中;如果輸入數字,假設為5,則每隔5個迭代輸出一次。

  learning_rates:每一次提升的學習率的列表

  xgb_model:在訓練之前用于加載的xgb_model

4,模型訓練

  有了參數列表和數據就可以訓練模型了

1

2

num_round = 10

bst = xgb.train( plst, dtrain, num_round, evallist )

5,模型預測

1

2

3

# X_test類型可以是二維List,也可以是numpy的數組

dtest = DMatrix(X_test)

ans = model.predict(dtest)

  完整代碼如下:

1

2

3

4

5

6

xgb_model.get_booster().save_model('xgb.model')

tar = xgb.Booster(model_file='xgb.model')

x_test = xgb.DMatrix(x_test)

pre=tar.predict(x_test)

act=y_test

print(mean_squared_error(act, pre))

  

6,保存模型

  在訓練完成之后可以將模型保存下來,也可以查看模型內部的結構

1

bst.save_model('test.model')

  導出模型和特征映射(Map)

  你可以導出模型到txt文件并瀏覽模型的含義:

1

2

3

4

# 導出模型到文件

bst.dump_model('dump.raw.txt')

# 導出模型和特征映射

bst.dump_model('dump.raw.txt','featmap.txt')

7,加載模型

  通過如下方式可以加載模型

1

2

bst = xgb.Booster({'nthread':4}) # init model

bst.load_model("model.bin")????? # load data

 

Xgboost實戰

  Xgboost有兩大類接口:Xgboost原生接口 和sklearn接口,并且Xgboost能夠實現分類回歸兩種任務。下面對這四種情況做以解析。

?1,基于Xgboost原生接口的分類

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

from?sklearn.datasets import load_iris

import xgboost?as?xgb

from?xgboost import plot_importance

import matplotlib.pyplot??as?plt

from?sklearn.model_selection import train_test_split

from?sklearn.metrics import accuracy_score? # 準確率

?

# 記載樣本數據集

iris = load_iris()

X,y = iris.data,iris.target

# 數據集分割

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=123457)

?

# 算法參數

params?= {

????'booster':'gbtree',

????'objective':'multi:softmax',

????'num_class':3,

????'gamma':0.1,

????'max_depth':6,

????'lambda':2,

????'subsample':0.7,

????'colsample_bytree':0.7,

????'min_child_weight':3,

????'slient':1,

????'eta':0.1,

????'seed':1000,

????'nthread':4,

}

?

plst =?params.items()

?

# 生成數據集格式

dtrain = xgb.DMatrix(X_train,y_train)

num_rounds = 500

# xgboost模型訓練

model = xgb.train(plst,dtrain,num_rounds)

?

# 對測試集進行預測

dtest = xgb.DMatrix(X_test)

y_pred = model.predict(dtest)

?

# 計算準確率

accuracy = accuracy_score(y_test,y_pred)

print('accuarcy:%.2f%%'%(accuracy*100))

?

# 顯示重要特征

plot_importance(model)

plt.show()

  輸出預測正確率以及特征重要性:

1

accuarcy:93.33%

  

?

?

2,基于Xgboost原生接口的回歸

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

import xgboost?as?xgb

from?xgboost import plot_importance

from?matplotlib import pyplot?as?plt

from?sklearn.model_selection import train_test_split

from?sklearn.datasets import load_boston

from?sklearn.metrics import mean_squared_error

?

# 加載數據集,此數據集時做回歸的

boston = load_boston()

X,y = boston.data,boston.target

?

# Xgboost訓練過程

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)

?

# 算法參數

params?= {

????'booster':'gbtree',

????'objective':'reg:gamma',

????'gamma':0.1,

????'max_depth':5,

????'lambda':3,

????'subsample':0.7,

????'colsample_bytree':0.7,

????'min_child_weight':3,

????'slient':1,

????'eta':0.1,

????'seed':1000,

????'nthread':4,

}

?

dtrain = xgb.DMatrix(X_train,y_train)

num_rounds = 300

plst =?params.items()

model = xgb.train(plst,dtrain,num_rounds)

?

# 對測試集進行預測

dtest = xgb.DMatrix(X_test)

ans = model.predict(dtest)

?

# 顯示重要特征

plot_importance(model)

plt.show()

  

?  重要特征(值越大,說明該特征越重要)顯示結果:

?3,Xgboost使用sklearn接口的分類(推薦)

XGBClassifier

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

from?xgboost.sklearn import XGBClassifier

?

clf = XGBClassifier(

????silent=0,? # 設置成1則沒有運行信息輸出,最好是設置為0,是否在運行升級時打印消息

????# nthread = 4? # CPU 線程數 默認最大

????learning_rate=0.3 , # 如同學習率

????min_child_weight = 1,

????# 這個參數默認為1,是每個葉子里面h的和至少是多少,對正負樣本不均衡時的0-1分類而言

????# 假設h在0.01附近,min_child_weight為1 意味著葉子節點中最少需要包含100個樣本

????# 這個參數非常影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易過擬合

????max_depth=6, # 構建樹的深度,越大越容易過擬合

????gamma = 0,# 樹的葉子節點上做進一步分區所需的最小損失減少,越大越保守,一般0.1 0.2這樣子

????subsample=1, # 隨機采樣訓練樣本,訓練實例的子采樣比

????max_delta_step=0,? # 最大增量步長,我們允許每個樹的權重估計

????colsample_bytree=1, # 生成樹時進行的列采樣

????reg_lambda=1, #控制模型復雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合

????# reg_alpha=0, # L1正則項參數

????# scale_pos_weight =1 # 如果取值大于0的話,在類別樣本不平衡的情況下有助于快速收斂,平衡正負權重

????# objective = 'multi:softmax', # 多分類問題,指定學習任務和響應的學習目標

????# num_class = 10,? # 類別數,多分類與multisoftmax并用

????n_estimators=100,? # 樹的個數

????seed = 1000,? # 隨機種子

????# eval_metric ='auc'

)

  

基于Sckit-learn接口的分類

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

from?sklearn.datasets import load_iris

import xgboost?as?xgb

from?xgboost import plot_importance

from?matplotlib import pyplot?as?plt

from?sklearn.model_selection import train_test_split

from?sklearn.metrics import accuracy_score

?

# 加載樣本數據集

iris = load_iris()

X,y = iris.data,iris.target

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=12343)

?

# 訓練模型

model = xgb.XGBClassifier(max_depth=5,learning_rate=0.1,n_estimators=160,silent=True,objective='multi:softmax')

model.fit(X_train,y_train)

?

# 對測試集進行預測

y_pred = model.predict(X_test)

?

#計算準確率

accuracy = accuracy_score(y_test,y_pred)

print('accuracy:%2.f%%'%(accuracy*100))

?

# 顯示重要特征

plot_importance(model)

plt.show()

  

  輸出結果:

1

accuracy:93%

4,基于Scikit-learn接口的回歸

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

import xgboost?as?xgb

from?xgboost import plot_importance

from?matplotlib import pyplot?as?plt

from?sklearn.model_selection import train_test_split

from?sklearn.datasets import load_boston

?

# 導入數據集

boston = load_boston()

X ,y = boston.data,boston.target

?

# Xgboost訓練過程

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)

?

model = xgb.XGBRegressor(max_depth=5,learning_rate=0.1,n_estimators=160,silent=True,objective='reg:gamma')

model.fit(X_train,y_train)

?

# 對測試集進行預測

ans = model.predict(X_test)

?

# 顯示重要特征

plot_importance(model)

plt.show()

  

?5,整理代碼1(原生XGB)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

from?sklearn.model_selection import train_test_split

from?sklearn import metrics

from??sklearn.datasets? import? make_hastie_10_2

import xgboost?as?xgb

#記錄程序運行時間

import time

start_time = time.time()

X, y = make_hastie_10_2(random_state=0)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)##test_size測試集合所占比例

#xgb矩陣賦值

xgb_train = xgb.DMatrix(X_train, label=y_train)

xgb_test = xgb.DMatrix(X_test,label=y_test)

##參數

params={

'booster':'gbtree',

'silent':1 ,#設置成1則沒有運行信息輸出,最好是設置為0.

#'nthread':7,# cpu 線程數 默認最大

'eta': 0.007, # 如同學習率

'min_child_weight':3,

# 這個參數默認是 1,是每個葉子里面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言

#,假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。

#這個參數非常影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易 overfitting。

'max_depth':6, # 構建樹的深度,越大越容易過擬合

'gamma':0.1,? # 樹的葉子節點上作進一步分區所需的最小損失減少,越大越保守,一般0.1、0.2這樣子。

'subsample':0.7, # 隨機采樣訓練樣本

'colsample_bytree':0.7, # 生成樹時進行的列采樣

'lambda':2,? # 控制模型復雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。

#'alpha':0, # L1 正則項參數

#'scale_pos_weight':1, #如果取值大于0的話,在類別樣本不平衡的情況下有助于快速收斂。

#'objective': 'multi:softmax', #多分類的問題

#'num_class':10, # 類別數,多分類與 multisoftmax 并用

'seed':1000, #隨機種子

#'eval_metric': 'auc'

}

plst = list(params.items())

num_rounds = 100 # 迭代次數

watchlist = [(xgb_train,?'train'),(xgb_test,?'val')]

??

#訓練模型并保存

# early_stopping_rounds 當設置的迭代次數較大時,early_stopping_rounds 可在一定的迭代次數內準確率沒有提升就停止訓練

model = xgb.train(plst, xgb_train, num_rounds, watchlist,early_stopping_rounds=100,pred_margin=1)

#model.save_model('./model/xgb.model') # 用于存儲訓練出的模型

print?"best best_ntree_limit",model.best_ntree_limit

y_pred = model.predict(xgb_test,ntree_limit=model.best_ntree_limit)

print ('error=%f'?% (? sum(1?for?i?in?range(len(y_pred))?if?int(y_pred[i]>0.5)!=y_test[i]) /float(len(y_pred))))?

#輸出運行時長

cost_time = time.time()-start_time

print?"xgboost success!",'\n',"cost time:",cost_time,"(s)......"

  

6,整理代碼2(XGB使用sklearn)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

from?sklearn.model_selection import train_test_split

from?sklearn import metrics

from??sklearn.datasets? import? make_hastie_10_2

from?xgboost.sklearn import XGBClassifier

X, y = make_hastie_10_2(random_state=0)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0)##test_size測試集合所占比例

clf = XGBClassifier(

silent=0 ,#設置成1則沒有運行信息輸出,最好是設置為0.是否在運行升級時打印消息。

#nthread=4,# cpu 線程數 默認最大

learning_rate= 0.3, # 如同學習率

min_child_weight=1,

# 這個參數默認是 1,是每個葉子里面 h 的和至少是多少,對正負樣本不均衡時的 0-1 分類而言

#,假設 h 在 0.01 附近,min_child_weight 為 1 意味著葉子節點中最少需要包含 100 個樣本。

#這個參數非常影響結果,控制葉子節點中二階導的和的最小值,該參數值越小,越容易 overfitting。

max_depth=6, # 構建樹的深度,越大越容易過擬合

gamma=0,? # 樹的葉子節點上作進一步分區所需的最小損失減少,越大越保守,一般0.1、0.2這樣子。

subsample=1, # 隨機采樣訓練樣本 訓練實例的子采樣比

max_delta_step=0,#最大增量步長,我們允許每個樹的權重估計。

colsample_bytree=1, # 生成樹時進行的列采樣

reg_lambda=1,? # 控制模型復雜度的權重值的L2正則化項參數,參數越大,模型越不容易過擬合。

#reg_alpha=0, # L1 正則項參數

#scale_pos_weight=1, #如果取值大于0的話,在類別樣本不平衡的情況下有助于快速收斂。平衡正負權重

#objective= 'multi:softmax', #多分類的問題 指定學習任務和相應的學習目標

#num_class=10, # 類別數,多分類與 multisoftmax 并用

n_estimators=100, #樹的個數

seed=1000 #隨機種子

#eval_metric= 'auc'

)

clf.fit(X_train,y_train,eval_metric='auc')

#設置驗證集合 verbose=False不打印過程

clf.fit(X_train, y_train,eval_set=[(X_train, y_train), (X_val, y_val)],eval_metric='auc',verbose=False)

#獲取驗證集合結果

evals_result = clf.evals_result()

y_true, y_pred = y_test, clf.predict(X_test)

print"Accuracy : %.4g"?% metrics.accuracy_score(y_true, y_pred)

#回歸

#m_regress = xgb.XGBRegressor(n_estimators=1000,seed=0)

  

Xgboost參數調優的一般方法

調參步驟:

  1,選擇較高的學習速率(learning rate)。一般情況下,學習速率的值為0.1.但是,對于不同的問題,理想的學習速率有時候會在0.05~0.3之間波動。選擇對應于此學習速率的理想決策樹數量。Xgboost有一個很有用的函數“cv”,這個函數可以在每一次迭代中使用交叉驗證,并返回理想的決策樹數量。

  2,對于給定的學習速率和決策樹數量,進行決策樹特定參數調優(max_depth , min_child_weight , gamma , subsample,colsample_bytree)在確定一棵樹的過程中,我們可以選擇不同的參數。

  3,Xgboost的正則化參數的調優。(lambda , alpha)。這些參數可以降低模型的復雜度,從而提高模型的表現。

  4,降低學習速率,確定理想參數。

  下面詳細的進行這些操作。

第一步:確定學習速率和tree_based參數調優的估計器數目

  為了確定Boosting參數,我們要先給其他參數一個初始值。咱們先按照如下方法取值:

  • 1,max_depth = 5:這個參數的取值最好在3-10之間,我選的起始值為5,但是你可以選擇其他的值。起始值在4-6之間都是不錯的選擇。
  • 2,min_child_weight = 1 :這里選擇了一個比較小的值,因為這是一個極不平衡的分類問題。因此,某些葉子節點下的值會比較小。
  • 3,gamma = 0 :起始值也可以選擇其它比較小的值,在0.1到0.2之間就可以,這個參數后繼也是要調整的。
  • 4,subsample,colsample_bytree = 0.8? 這個是最常見的初始值了。典型值的范圍在0.5-0.9之間。
  • 5,scale_pos_weight =1 這個值時因為類別十分不平衡。

  注意,上面這些參數的值知識一個初始的估計值,后繼需要調優。這里把學習速率就設成默認的0.1。然后用Xgboost中的cv函數來確定最佳的決策樹數量。

1

2

3

4

5

6

7

8

9

10

11

12

13

from?xgboost import XGBClassifier

xgb1 = XGBClassifier(

?learning_rate =0.1,

?n_estimators=1000,

?max_depth=5,

?min_child_weight=1,

?gamma=0,

?subsample=0.8,

?colsample_bytree=0.8,

?objective=?'binary:logistic',

?nthread=4,

?scale_pos_weight=1,

?seed=27)

  

第二步:max_depth和min_weight參數調優

  我們先對這兩個參數調優,是因為他們對最終結果有很大的影響。首先,我們先大范圍地粗略參數,然后再小范圍的微調。

  注意:在這一節我會進行高負荷的柵格搜索(grid search),這個過程大約需要15-30分鐘甚至更久,具體取決于你系統的性能,你也可以根據自己系統的性能選擇不同的值。

  網格搜索scoring = 'roc_auc' 只支持二分類,多分類需要修改scoring(默認支持多分類)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

param_test1 = {

?'max_depth':range(3,10,2),

?'min_child_weight':range(1,6,2)

}

#param_test2 = {

?'max_depth':[4,5,6],

?'min_child_weight':[4,5,6]

}

from?sklearn import svm, grid_search, datasets

from?sklearn import grid_search

gsearch1 = grid_search.GridSearchCV(

estimator = XGBClassifier(

learning_rate =0.1,

n_estimators=140, max_depth=5,

min_child_weight=1,

gamma=0,

subsample=0.8,

colsample_bytree=0.8,

objective=?'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27),

param_grid = param_test1,

scoring='roc_auc',

n_jobs=4,

iid=False,

cv=5)

gsearch1.fit(train[predictors],train[target])

gsearch1.grid_scores_, gsearch1.best_params_,gsearch1.best_score_

#網格搜索scoring='roc_auc'只支持二分類,多分類需要修改scoring(默認支持多分類)

  

第三步:gamma參數調優

  在已經調整好其他參數的基礎上,我們可以進行gamma參數的調優了。Gamma參數取值范圍很大,這里我們設置為5,其實你也可以取更精確的gamma值。

1

2

3

4

5

6

7

8

9

10

11

12

param_test3 = {

?'gamma':[i/10.0?for?i?in?range(0,5)]

}

?

gsearch3 = GridSearchCV(estimator = XGBClassifier( learning_rate =0.1,

?n_estimators=140, max_depth=4,min_child_weight=6, gamma=0,

subsample=0.8, colsample_bytree=0.8,objective=?'binary:logistic',

nthread=4, scale_pos_weight=1,seed=27),? param_grid = param_test3, scoring='roc_auc',n_jobs=4,iid=False, cv=5)

?

gsearch3.fit(train[predictors],train[target])

?

gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_

  

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

param_test3 = {

?'gamma':[i/10.0?for?i?in?range(0,5)]

}

gsearch3 = GridSearchCV(

estimator = XGBClassifier(

learning_rate =0.1,

n_estimators=140,

max_depth=4,

min_child_weight=6,

gamma=0,

subsample=0.8,

colsample_bytree=0.8,

objective=?'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27),

param_grid = param_test3,

scoring='roc_auc',

n_jobs=4,

iid=False,

cv=5)

gsearch3.fit(train[predictors],train[target])

gsearch3.grid_scores_, gsearch3.best_params_, gsearch3.best_score_

  

第四步:調整subsample 和 colsample_bytree參數

  嘗試不同的subsample 和 colsample_bytree 參數。我們分兩個階段來進行這個步驟。這兩個步驟都取0.6,0.7,0.8,0.9作為起始值。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

#取0.6,0.7,0.8,0.9作為起始值

param_test4 = {

?'subsample':[i/10.0?for?i?in?range(6,10)],

?'colsample_bytree':[i/10.0?for?i?in?range(6,10)]

}

??

gsearch4 = GridSearchCV(

estimator = XGBClassifier(

learning_rate =0.1,

n_estimators=177,

max_depth=3,

min_child_weight=4,

gamma=0.1,

subsample=0.8,

colsample_bytree=0.8,

objective=?'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27),

param_grid = param_test4,

scoring='roc_auc',

n_jobs=4,

iid=False,

cv=5)

gsearch4.fit(train[predictors],train[target])

gsearch4.grid_scores_, gsearch4.best_params_, gsearch4.best_score_

  

第五步:正則化參數調優

  由于gamma函數提供了一種更加有效的降低過擬合的方法,大部分人很少會用到這個參數,但是我們可以嘗試用一下這個參數。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

param_test6 = {

?'reg_alpha':[1e-5, 1e-2, 0.1, 1, 100]

}

gsearch6 = GridSearchCV(

estimator = XGBClassifier(

learning_rate =0.1,

n_estimators=177,

max_depth=4,

min_child_weight=6,

gamma=0.1,

subsample=0.8,

colsample_bytree=0.8,

objective=?'binary:logistic',

nthread=4,

scale_pos_weight=1,

seed=27),

param_grid = param_test6,

scoring='roc_auc',

n_jobs=4,

iid=False,

cv=5)

gsearch6.fit(train[predictors],train[target])

gsearch6.grid_scores_, gsearch6.best_params_, gsearch6.best_score_

  

第六步:降低學習速率

  最后,我們使用較低的學習速率,以及使用更多的決策樹,我們可以用Xgboost中CV函數來進行這一步工作。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

xgb4 = XGBClassifier(

?learning_rate =0.01,

?n_estimators=5000,

?max_depth=4,

?min_child_weight=6,

?gamma=0,

?subsample=0.8,

?colsample_bytree=0.8,

?reg_alpha=0.005,

?objective=?'binary:logistic',

?nthread=4,

?scale_pos_weight=1,

?seed=27)

modelfit(xgb4, train, predictors)

  

?  總結一下,要想模型的表現有大幅的提升,調整每個參數帶來的影響也必須清楚,僅僅靠著參數的調整和模型的小幅優化,想要讓模型的表現有個大幅度提升是不可能的。要想模型的表現有質的飛躍,需要依靠其他的手段。諸如,特征工程(feature egineering) ,模型組合(ensemble of model),以及堆疊(stacking)等。

?第七步:Python示例

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

import xgboost?as?xgb

import pandas?as?pd

#獲取數據

from?sklearn import cross_validation

from?sklearn.datasets import load_iris

iris = load_iris()

#切分數據集

X_train, X_test, y_train, y_test = cross_validation.train_test_split(iris.data, iris.target, test_size=0.33, random_state=42)

#設置參數

m_class = xgb.XGBClassifier(

?learning_rate =0.1,

?n_estimators=1000,

?max_depth=5,

?gamma=0,

?subsample=0.8,

?colsample_bytree=0.8,

?objective=?'binary:logistic',

?nthread=4,

?seed=27)

#訓練

m_class.fit(X_train, y_train)

test_21 = m_class.predict(X_test)

print?"Accuracy : %.2f"?% metrics.accuracy_score(y_test, test_21)

#預測概率

#test_2 = m_class.predict_proba(X_test)

#查看AUC評價標準

from?sklearn import metrics

print?"Accuracy : %.2f"?% metrics.accuracy_score(y_test, test_21)

##必須二分類才能計算

##print "AUC Score (Train): %f" % metrics.roc_auc_score(y_test, test_2)

#查看重要程度

feat_imp = pd.Series(m_class.booster().get_fscore()).sort_values(ascending=False)

feat_imp.plot(kind='bar', title='Feature Importances')

import matplotlib.pyplot?as?plt

plt.show()

#回歸

#m_regress = xgb.XGBRegressor(n_estimators=1000,seed=0)

#m_regress.fit(X_train, y_train)

#test_1 = m_regress.predict(X_test)

  

XGBoost輸出特征重要性以及篩選特征

1,梯度提升算法是如何計算特征重要性的?

  使用梯度提升算法的好處是在提升樹被創建后,可以相對直接地得到每個屬性的重要性得分。一般來說,重要性分數,衡量了特征在模型中的提升決策樹構建中的價值。一個屬性越多的被用來在模型中構建決策樹,它的重要性就相對越高。

  屬性重要性是通過對數據集中的每個屬性進行計算,并進行排序得到。在單個決策樹中通過每個屬性分裂點改進性能度量的量來計算屬性重要性。由節點負責加權和記錄次數,也就是說一個屬性對分裂點改進性能度量越大(越靠近根節點),權值越大;被越多提升樹所選擇,屬性越重要。性能度量可以是選擇分裂節點的Gini純度,也可以是其他度量函數。

  最終將一個屬性在所有提升樹中的結果進行加權求和后然后平均,得到重要性得分。

2,繪制特征重要性

  一個已訓練的Xgboost模型能夠自動計算特征重要性,這些重要性得分可以通過成員變量feature_importances_得到。可以通過如下命令打印:

1

print(model.feature_importances_)

  我們可以直接在條形圖上繪制這些分數,以便獲得數據集中每個特征的相對重要性的直觀顯示,例如:

1

2

3

# plot

pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)

pyplot.show()

  我們可以通過在the Pima Indians onset of diabetes 數據集上訓練XGBoost模型來演示,并從計算的特征重要性中繪制條形圖。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

# plot feature importance manually

from?numpy import loadtxt

from?xgboost import XGBClassifier

from?matplotlib import pyplot

from?sklearn.datasets import load_iris

# load data

dataset = load_iris()

# split data into X and y

X = dataset.data

y = dataset.target

# fit model no training data

model = XGBClassifier()

model.fit(X, y)

# feature importance

print(model.feature_importances_)

# plot

pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)

pyplot.show()

  運行這個實例,首先輸出特征重要性分數:

1

[0.17941953 0.11345647 0.41556728 0.29155672]

  相對重要性條形圖:

  這種繪制的缺點在于,只顯示了特征重要性而沒有排序,可以在繪制之前對特征重要性得分進行排序。

  通過內建的繪制函數進行特征重要性得分排序后的繪制,這個函數就是plot_importance(),示例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# plot feature importance manually

from?numpy import loadtxt

from?xgboost import XGBClassifier

from?matplotlib import pyplot

from?sklearn.datasets import load_iris

from?xgboost import plot_importance

?

# load data

dataset = load_iris()

# split data into X and y

X = dataset.data

y = dataset.target

# fit model no training data

model = XGBClassifier()

model.fit(X, y)

# feature importance

print(model.feature_importances_)

# plot feature importance

?

plot_importance(model)

pyplot.show()

  示例得到條形圖:

  根據其在輸入數組的索引,特征被自動命名為f0~f3,在問題描述中手動的將這些索引映射到名稱,我們可以看到,f2具有最高的重要性,f1具有最低的重要性。

3,根據Xgboost特征重要性得分進行特征選擇

  特征重要性得分,可以用于在scikit-learn中進行特征選擇。通過SelectFromModel類實現,該類采用模型并將數據集轉換為具有選定特征的子集。這個類可以采取預先訓練的模型,例如在整個數據集上訓練的模型。然后,它可以閾值來決定選擇哪些特征。當在SelectFromModel實例上調用transform()方法時,該閾值被用于在訓練集和測試集上一致性選擇相同特征。

  在下面的示例中,我們首先在訓練集上訓練xgboost模型,然后在測試上評估。使用從訓練數據集計算的特征重要性,然后,將模型封裝在一個SelectFromModel實例中。我們使用這個來選擇訓練集上的特征,用所選擇的特征子集訓練模型,然后在相同的特征方案下對測試集進行評估。

1

2

3

4

5

6

7

8

9

# select features using threshold

selection = SelectFromModel(model, threshold=thresh, prefit=True)

select_X_train = selection.transform(X_train)

# train model

selection_model = XGBClassifier()

selection_model.fit(select_X_train, y_train)

# eval model

select_X_test = selection.transform(X_test)

y_pred = selection_model.predict(select_X_test)

  我們可以通過測試多個閾值,來從特征重要性中選擇特征。具體而言,每個輸入變量的特征重要性,本質上允許我們通過重要性來測試每個特征子集。

完整代碼如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

# plot feature importance manually

import numpy?as?np

from?xgboost import XGBClassifier

from?matplotlib import pyplot

from?sklearn.datasets import load_iris

from?xgboost import plot_importance

from?sklearn.model_selection import train_test_split

from?sklearn.metrics import accuracy_score

from?sklearn.feature_selection import SelectFromModel

?

# load data

dataset = load_iris()

# split data into X and y

X = dataset.data

y = dataset.target

?

# split data into train and test sets

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.33,random_state=7)

?

# fit model no training data

model = XGBClassifier()

model.fit(X_train, y_train)

# feature importance

print(model.feature_importances_)

?

# make predictions for test data and evaluate

y_pred = model.predict(X_test)

predictions = [round(value)?for?value?in?y_pred]

accuracy = accuracy_score(y_test,predictions)

print("Accuracy:%.2f%%"%(accuracy*100.0))

?

#fit model using each importance as a threshold

thresholds = np.sort(model.feature_importances_)

for?thresh?in?thresholds:

????# select features using threshold

????selection = SelectFromModel(model,threshold=thresh,prefit=True )

????select_X_train = selection.transform(X_train)

????# train model

????selection_model = XGBClassifier()

????selection_model.fit(select_X_train, y_train)

????# eval model

????select_X_test = selection.transform(X_test)

????y_pred = selection_model.predict(select_X_test)

????predictions = [round(value)?for?value?in?y_pred]

????accuracy = accuracy_score(y_test,predictions)

????print("Thresh=%.3f, n=%d, Accuracy: %.2f%%"?% (thresh, select_X_train.shape[1], accuracy * 100.0))

  運行示例,得到輸出:

1

2

3

4

5

6

[0.20993228 0.09029345 0.54176074 0.15801354]

Accuracy:92.00%

Thresh=0.090, n=4, Accuracy: 92.00%

Thresh=0.158, n=3, Accuracy: 92.00%

Thresh=0.210, n=2, Accuracy: 86.00%

Thresh=0.542, n=1, Accuracy: 90.00%

  我們可以看到,模型的性能通常隨著所選擇的特征的數量減少,在這一問題上,可以對測試集準確率和模型復雜度做一個權衡,例如選擇三個特征,接受準確率為92%,這可能是對這樣一個小數據集的清洗,但是對于更大的數據集和使用交叉驗證作為模型評估方案可能是更有用的策略。

4,網格搜索

代碼1:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

from?sklearn.model_selection import GridSearchCV

tuned_parameters= [{'n_estimators':[100,200,500],

??????????????????'max_depth':[3,5,7], ##range(3,10,2)

??????????????????'learning_rate':[0.5, 1.0],

??????????????????'subsample':[0.75,0.8,0.85,0.9]

??????????????????}]

tuned_parameters= [{'n_estimators':[100,200,500,1000]

??????????????????}]

clf = GridSearchCV(XGBClassifier(silent=0,nthread=4,learning_rate= 0.5,min_child_weight=1, max_depth=3,gamma=0,subsample=1,colsample_bytree=1,reg_lambda=1,seed=1000), param_grid=tuned_parameters,scoring='roc_auc',n_jobs=4,iid=False,cv=5)?

clf.fit(X_train, y_train)

##clf.grid_scores_, clf.best_params_, clf.best_score_

print(clf.best_params_)

y_true, y_pred = y_test, clf.predict(X_test)

print"Accuracy : %.4g"?% metrics.accuracy_score(y_true, y_pred)

y_proba=clf.predict_proba(X_test)[:,1]

print?"AUC Score (Train): %f"?% metrics.roc_auc_score(y_true, y_proba)??????????????

  

代碼2:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

from?sklearn.model_selection import GridSearchCV

parameters= [{'learning_rate':[0.01,0.1,0.3],'n_estimators':[1000,1200,1500,2000,2500]}]

clf = GridSearchCV(XGBClassifier(

?????????????max_depth=3,

?????????????min_child_weight=1,

?????????????gamma=0.5,

?????????????subsample=0.6,

?????????????colsample_bytree=0.6,

?????????????objective=?'binary:logistic', #邏輯回歸損失函數

?????????????scale_pos_weight=1,

?????????????reg_alpha=0,

?????????????reg_lambda=1,

?????????????seed=27

????????????),

????????????param_grid=parameters,scoring='roc_auc')?

clf.fit(X_train, y_train)

print(clf.best_params_)?

y_pre= clf.predict(X_test)

y_pro= clf.predict_proba(X_test)[:,1]

print?"AUC Score : %f"?% metrics.roc_auc_score(y_test, y_pro)

print"Accuracy : %.4g"?% metrics.accuracy_score(y_test, y_pre)

  

輸出特征重要性:

1

2

3

4

5

6

import pandas?as?pd

import matplotlib.pylab?as?plt

feat_imp = pd.Series(clf.booster().get_fscore()).sort_values(ascending=False)

feat_imp.plot(kind='bar', title='Feature Importances')

plt.ylabel('Feature Importance Score')

plt.show()

  

補充:關于隨機種子——random_state

  random_state是一個隨機種子,是在任意帶有隨機性的類或者函數里作為參數來控制隨機模式。random_state取某一個值的時候,也就確定了一種規則。

  random_state可以用于很多函數,比如訓練集測試集的劃分;構建決策樹;構建隨機森林

1,劃分訓練集和測試集的類train_test_split

  隨機數種子控制每次劃分訓練集和測試集的模式,其取值不變時劃分得到的結果一模一樣,其值改變時,劃分得到的結果不同。若不設置此參數,則函數會自動選擇一種隨機模式,得到的結果也就不同。

2,構建決策樹的函數

1

clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30,splitter="random")

  其取值不變時,用相同的訓練集建樹得到的結果一模一樣,對測試集的預測結果也是一樣的

  其取值改變時,得到的結果不同;

  若不設置此參數,則函數會自動選擇一種隨機模式,每次得到的結果也就不同。

3,構建隨機森林

1

clf = RandomForestClassifier(random_state=0)

  其取值不變時,用相同的訓練集建樹得到的結果一模一樣,對測試集的預測結果也是一樣的

  其取值改變時,得到的結果不同;

  若不設置此參數,則函數會自動選擇一種隨機模式,每次得到的結果也就不同。

4,總結

  在需要設置random_state的地方給其賦值,當多次運行此段代碼得到完全一樣的結果,別人運行代碼也可以復現你的過程。若不設置此參數則會隨機選擇一個種子,執行結果也會因此不同。雖然可以對random_state進行調參,但是調參后再訓練集上表現好的模型未必在陌生訓練集上表現好,所以一般會隨便選擇一個random_state的值作為參數。

  對于那些本質上是隨機的過程,我們有必要控制隨機的狀態,這樣才能重復的展現相同的結果。如果對隨機狀態不加控制,那么實驗的結果就無法固定,而是隨機的顯示。

?

參考文獻:

https://blog.csdn.net/waitingzby/article/details/81610495

https://blog.csdn.net/u011089523/article/details/72812019

?https://blog.csdn.net/luanpeng825485697/article/details/79907149

https://xgboost.readthedocs.io/en/latest/parameter.html#general-parameters

不經一番徹骨寒 怎得梅花撲鼻香

來源:https://www.cnblogs.com/wj-1314/p/9402324.html

總結

以上是生活随笔為你收集整理的Python机器学习笔记:XgBoost算法(亲测)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91热这里只有精品 | 日韩色综合| 97超碰人人澡人人 | 91高清视频在线 | 亚洲精品中文在线观看 | 肉色欧美久久久久久久免费看 | 丁香婷婷激情国产高清秒播 | 成人免费看片网址 | 狠狠色丁香婷婷综合视频 | 人人干干人人 | 国产又粗又猛又黄视频 | 成人国产精品久久久久久亚洲 | www黄色com| 欧美一区三区四区 | 国产小视频免费观看 | 波多野结衣电影一区 | 午夜久久福利 | 91看片淫黄大片一级在线观看 | 久久成人免费电影 | 久久精品亚洲综合专区 | 久久开心激情 | 国产精品久久久久久久久久99 | 人人躁| 国产高清黄色 | 狠狠操狠狠干天天操 | 免费成人av电影 | 天天干夜夜爱 | 午夜精品一区二区三区四区 | 青春草视频在线播放 | 91在线视频导航 | 免费av网站观看 | 97超碰人| 国产视频色 | 91一区二区三区在线观看 | 91精品国产综合久久福利 | 成人免费视频在线观看 | 国产精品日韩欧美 | 99精品在线免费在线观看 | 一本一本久久a久久精品牛牛影视 | 中文av不卡 | 欧美做受高潮电影o | 国产黄色大片 | 天天干夜夜 | 天天插天天干 | 玖玖国产精品视频 | a级片网站 | 久久国产亚洲视频 | 91经典在线 | 国内精品久久久久影院优 | 中文字幕文字幕一区二区 | 精品99免费 | 黄色片软件网站 | 久久国产成人午夜av影院宅 | 亚洲国产wwwccc36天堂 | av.com在线 | 国产精品美女久久久久久久久久久 | 国产欧美精品一区二区三区四区 | 亚洲最新视频在线 | 麻豆传媒在线免费看 | 午夜精品久久久久 | 久艹视频免费观看 | 中文字幕精品在线 | 天天天干天天天操 | 色爱成人网 | 亚洲国产免费网站 | 999久久久久久 | 国产精品一区二区吃奶在线观看 | 国产高清在线免费视频 | 久久精品黄 | 国产粉嫩在线观看 | 国产无套精品久久久久久 | 亚洲精品国偷自产在线99热 | 免费看日韩片 | 久99久在线| 国产成人精品在线 | 首页av在线| 高清一区二区 | 日韩午夜av | 波多野结衣理论片 | 久草在线免费看视频 | 日韩性网站| 久久国产精品一区二区三区四区 | 在线播放第一页 | 超碰在线公开 | 国产91在线免费视频 | 在线视频观看国产 | 亚洲国产精品久久久久久 | 精品亚洲国产视频 | 97视频总站 | 丝袜精品视频 | 久久精品爱爱视频 | 狠狠gao | www黄免费| 69av视频在线| 精品国产资源 | 亚洲精品乱码久久久久久蜜桃欧美 | 色是在线视频 | 天天做日日做天天爽视频免费 | 欧美久久久久久久久久久久久 | 久久国产精品久久久 | 日日操狠狠干 | 久久精品国产成人精品 | 欧美有色 | 91av片| 欧美91精品国产自产 | 国产 字幕 制服 中文 在线 | 欧美一级xxxx | 黄色av网站在线观看免费 | 久久激情片 | 欧美性精品 | 午夜私人影院久久久久 | 久久久久国产一区二区 | 亚洲综合在线五月 | 黄色av在| 国内精品久久久久影院优 | 天天插天天色 | 五月天,com | 亚一亚二国产专区 | 国产女教师精品久久av | 久久五月网 | 99久久精品午夜一区二区小说 | 精品久久免费看 | 久久第四色 | 99国产一区| 麻豆视频观看 | 国产精品久久久一区二区 | 日韩精品久久久免费观看夜色 | 亚洲国产精品成人女人久久 | 日韩高清一 | 国产精品黄色 | 91女神的呻吟细腰翘臀美女 | 麻豆影视在线免费观看 | 色综久久 | 亚洲少妇激情 | 中文字幕 国产视频 | 毛片99 | 精品久久久久久久久久久久 | 成人av高清在线 | 国产精品尤物 | 在线 视频 一区二区 | 日本精品久久久久影院 | 天天操天天爽天天干 | 国产黄色精品 | 成片视频在线观看 | 亚洲1区 在线 | www.91国产| 91九色国产 | 日韩女同一区二区三区在线观看 | 午夜精品久久久99热福利 | 久久国产高清 | 一区二区不卡视频在线观看 | 91av国产视频 | 国产九色91| 狠狠的日日 | 国产五码一区 | a'aaa级片在线观看 | av一级二级 | 久久人91精品久久久久久不卡 | 成人黄色片免费 | 91高清在线看 | 六月色| 九九免费观看全部免费视频 | 日日操夜 | 97电影在线 | 日韩欧美极品 | 色婷婷亚洲婷婷 | 久久只精品99品免费久23小说 | 全久久久久久久久久久电影 | 天天爽夜夜爽人人爽曰av | 91麻豆产精品久久久久久 | 国产视频一区在线免费观看 | 日本精油按摩3 | 久久福利在线 | 成人aaa毛片 | 一区二区三区污 | 深夜免费小视频 | 婷婷久久网 | www.午夜视频| 亚洲欧美日韩精品久久奇米一区 | 97人人澡人人爽人人模亚洲 | 奇米影视777影音先锋 | 九九九九热精品免费视频点播观看 | 成人国产精品入口 | 开心激情五月网 | 久久久免费国产 | 美女网站在线免费观看 | av色一区 | 色婷婷亚洲精品 | 国产理论在线 | 97精品在线 | 麻豆网站免费观看 | 亚洲精品视频在线看 | 精品一区二区在线播放 | 亚洲免费成人av电影 | 久久久久免费精品 | 播五月婷婷 | 国产精品久久久久久久久久三级 | 精品国产免费一区二区三区五区 | 久久这里只有精品9 | 国产精品福利小视频 | 亚av在线 | 毛片基地黄久久久久久天堂 | 少妇自拍av | 欧美黑人xxxx猛性大交 | 狠狠插狠狠操 | 91成年视频 | 欧美激情综合五月色丁香 | 日日躁夜夜躁xxxxaaaa | 91高清一区 | 久久亚洲综合色 | 亚洲视频综合 | 综合久久一本 | 国产黄色免费电影 | 国产精品18久久久久久久久 | av网站免费看 | 免费看一级一片 | 久久精品屋| 免费在线观看av电影 | 免费在线| 久久黄色免费观看 | 久久综合久久综合这里只有精品 | 国产精品中文字幕在线 | www.色婷婷.com| 狠狠久久 | 免费碰碰 | 色婷婷激情五月 | 久久精品8 | 99自拍视频在线观看 | 2021国产精品视频 | 在线播放 日韩专区 | 国产精品资源 | 免费91在线观看 | 国产成人一级 | 天天翘av| 成人影视片 | 国产手机视频在线观看 | 国产91精品一区二区麻豆网站 | 日韩精品一卡 | 久久久精品欧美 | 亚洲男男gⅴgay双龙 | 国产精品第十页 | 91精品久久久久久久久久入口 | 国产视频在 | 91激情小视频 | 超级碰碰碰视频 | 日韩精品一区二区三区第95 | 久草综合在线观看 | 久久99久久99精品免视看婷婷 | 国产精品日韩在线播放 | 黄色毛片电影 | 亚洲自拍av在线 | 欧美日韩高清不卡 | 久久精品123 | av资源免费观看 | 国产91精品高清一区二区三区 | 久久精品一区二区三区中文字幕 | 精品国产乱码久久久久久久 | 中文字幕视频免费观看 | 久久久这里有精品 | 在线看污网站 | av视屏在线播放 | 亚洲传媒在线 | 日韩爱爱网站 | av一区二区三区在线观看 | av中文字幕在线看 | 99久久精品免费看国产四区 | 成人国产精品久久久久久亚洲 | 在线国产视频一区 | 国产精品18毛片一区二区 | 午夜精品久久久久久久99 | 国产在线精品国自产拍影院 | 麻豆视频免费在线观看 | 久久久高清一区二区三区 | 91香蕉嫩草 | 国产乱码精品一区二区蜜臀 | 三日本三级少妇三级99 | 福利在线看片 | 精品国产免费看 | 精品在线观 | 91在线产啪 | 成人免费视频播放 | 日本三级全黄少妇三2023 | 狠狠色丁香婷婷综合久小说久 | 欧美午夜一区二区福利视频 | 亚洲国产黄色片 | 91九色成人蝌蚪首页 | 国产中文字幕在线视频 | 日本不卡一区二区三区在线观看 | 一级黄色片在线播放 | 在线观看香蕉视频 | 国产又粗又猛又黄又爽的视频 | 色婷婷综合久久久中文字幕 | 国产精品国产三级国产aⅴ无密码 | 91看毛片| 成年人毛片在线观看 | 久久综合色天天久久综合图片 | 午夜在线免费观看视频 | 亚洲一区二区天堂 | 亚洲一级片在线看 | 中文字幕 在线看 | 久久久久日本精品一区二区三区 | 中文字幕九九 | 国产午夜精品免费一区二区三区视频 | 在线久久 | 超级碰碰碰视频 | 91探花系列在线播放 | 91在线免费观看网站 | 亚洲欧美日韩精品久久奇米一区 | 亚洲国产欧美在线看片xxoo | 97成人精品区在线播放 | 少妇精品久久久一区二区免费 | 欧美色图另类 | 久久久久女教师免费一区 | 久久久久中文 | 亚洲电影影音先锋 | 亚洲精品小视频在线观看 | 久久久久久久久免费视频 | 国产福利在线不卡 | www.夜夜 | 久久久国产精品一区二区中文 | 天天天天综合 | 天天综合网 天天综合色 | 中文字幕在线观看2018 | 欧美 日韩 久久 | 久久久久国产一区二区 | 亚洲免费观看在线视频 | 在线观看自拍 | 亚洲精品一区二区久 | 99久久99视频只有精品 | av在线观 | 久久精品在线视频 | 夜夜视频欧洲 | aaa黄色毛片| 久久黄网站 | 99精品黄色片免费大全 | 天天爱天天插 | 国产精品久久久久久久婷婷 | 日本中文字幕在线观看 | 国产精品视频全国免费观看 | 成人av高清| 高清在线一区 | 91成人精品在线 | 国产999精品久久久久久麻豆 | 在线看av网址 | 亚洲 欧美日韩 国产 中文 | 日韩精品视频在线观看免费 | 91黄色小视频 | 97人人模人人爽人人喊网 | 天天操夜操视频 | 久久麻豆精品 | 国产亚洲精品女人久久久久久 | av性网站| 夜夜夜草 | 一区二区三区动漫 | 亚洲精品久久久久久中文传媒 | 五月丁色 | 亚洲另类在线视频 | 人人藻人人澡人人爽 | 亚洲午夜久久久久久久久久久 | 国产精品久久久久久久久大全 | 91免费黄视频 | 国产精品一区二区在线观看免费 | 五月天久久狠狠 | 亚洲福利精品 | 久久成人精品电影 | 国产精品无| 久热国产视频 | 亚洲少妇天堂 | 中文字幕在线字幕中文 | 日韩av中文字幕在线免费观看 | 亚洲男男gⅴgay双龙 | 四虎精品成人免费网站 | 久久夜色电影 | 日日干夜夜操视频 | 色在线观看网站 | 国产精品mv在线观看 | 黄色大全视频 | 99久久婷婷国产 | 国产高清在线观看av | 日韩在线视频免费看 | 亚洲日本精品视频 | 国产视频97 | 亚洲理论视频 | 久久人人爽人人爽人人片av免费 | 中文字幕之中文字幕 | 欧美性黑人 | 99久热在线精品视频成人一区 | 欧美精品在线观看免费 | 久久成人国产精品 | 国产在线观看二区 | 中文字幕不卡在线88 | 综合网在线视频 | 日韩资源在线观看 | 日韩高清免费在线观看 | 日韩狠狠操 | 日韩毛片一区 | 亚洲三级网 | 99久久精品国产一区 | 欧美伦理电影一区二区 | 97精品免费视频 | 午夜国产一区二区三区四区 | 91免费观看网站 | 91丝袜美腿| 日日夜夜精品免费视频 | 美女亚洲精品 | 欧美一进一出抽搐大尺度视频 | 最新真实国产在线视频 | 亚洲福利精品 | 91成年人在线观看 | 人人爽人人爽人人片av免 | 天天操网址 | 国产一区二区免费看 | 国内精品久久久久久久久 | 国产精品亚洲片夜色在线 | 中文字幕亚洲在线观看 | 久久久久久国产精品久久 | 日韩精品一区二区免费视频 | 国产精品久久久久久久av电影 | 狠狠的操| 免费一级日韩欧美性大片 | 日韩二区三区在线观看 | 天天干天天天天 | 久久在线视频在线 | 国产精品久久久久久久久久不蜜月 | 国产无遮挡又黄又爽馒头漫画 | 国内精品视频免费 | 久热国产视频 | 丝袜av一区| 中文字幕在线观看网址 | 日韩18p| 四虎影视成人精品 | 国产精品毛片一区视频播 | 国产高清视频在线免费观看 | 日日夜夜精品网站 | 久久激情五月激情 | 人人爽人人舔 | 国产一二区免费视频 | 久久久久久久久久福利 | 99色网站 | 国产精品69久久久久 | 国产精品久久久久久久久久白浆 | 国产人成一区二区三区影院 | 色综久久| 91高清免费在线观看 | 天天操天天射天天添 | 久久字幕网 | 啪啪免费观看网站 | 五月激情丁香图片 | 国产亚洲情侣一区二区无 | 国产欧美在线一区二区三区 | 亚洲国内精品视频 | 91九色在线视频观看 | av在线免费播放 | 色国产在线| 久久九九影视网 | 天天草视频 | 国产在线观看你懂得 | 国产色视频一区 | 久草在线视频免赞 | 久久久网页 | 亚洲综合干 | 国产精品1000 | 热re99久久精品国产66热 | 四虎在线免费观看 | 中文字幕一区二 | 中文字幕在线观看免费高清电影 | 国产视频一区在线免费观看 | 91久久人澡人人添人人爽欧美 | www.xxxx欧美 | 欧美日性视频 | 天天色视频 | 国产精品激情 | 亚洲在线视频观看 | 欧美日韩免费一区 | 六月色丁| 成人精品一区二区三区电影免费 | 99视频偷窥在线精品国自产拍 | 中文资源在线官网 | 亚洲国产精品va在线看黑人动漫 | 安徽妇搡bbbb搡bbbb | 国产96av | 国产精品视频不卡 | 精品国产一区二区三区四 | 久久黄色免费 | 午夜精品久久久99热福利 | 天天色天天干天天色 | 天天天天天天天操 | 久久无码精品一区二区三区 | 97夜夜澡人人双人人人喊 | 亚洲美女视频网 | 亚洲精品自拍 | 国产精品亚州 | 欧美一级在线观看视频 | 深夜成人av| 日本三级香港三级人妇99 | 日韩精品一区二区三区视频播放 | 成人一级免费视频 | 日本爱爱片 | 日韩sese | 高清av中文在线字幕观看1 | 久久色中文字幕 | 特黄一级毛片 | 精品一区久久 | av电影av在线 | av免费观看高清 | 91成人在线观看高潮 | 黄毛片在线观看 | 操久久免费视频 | 国内精品视频在线 | 激情综合五月网 | 亚洲最新精品 | 亚洲夜夜网 | 毛片在线网 | 伊人电影天堂 | 天天躁天天躁天天躁婷 | 91av在线免费看 | 91av视屏 | 中文字幕高清视频 | 午夜在线日韩 | 国产精品久久久视频 | 又污又黄的网站 | 欧美精品免费在线观看 | 特级黄色片免费看 | 日韩1页| 午夜12点 | 69视频在线| 午夜精品一区二区三区在线观看 | 久久久久久免费毛片精品 | 91入口在线观看 | av网址最新| 国产99久久九九精品 | 69国产盗摄一区二区三区五区 | www.久久免费视频 | 国产精品久久久久久久99 | 黄色精品久久 | 日韩在线激情 | 日批视频在线观看免费 | 99综合久久| 波多野结衣小视频 | 亚洲免费资源 | 狠狠躁18三区二区一区ai明星 | 日本中文字幕电影在线免费观看 | 天天操天天爱天天干 | 激情网第四色 | 激情综合五月天 | 亚洲综合干| 国产精品久久久久久久久免费看 | 日韩三区在线观看 | 免费视频区 | 天天操天天干天天 | 日韩久久电影 | 欧美老人xxxx18 | 久久国产精品99精国产 | 欧美激情精品久久久久久变态 | 婷婷网址 | 97超碰免费在线观看 | 久久精品福利 | 免费观看一级 | 98久久 | 国产视频色 | 亚洲国产97在线精品一区 | 美女久久一区 | 99麻豆久久久国产精品免费 | 精品国产一区二区三区久久久久久 | 欧美ⅹxxxxxx| 成人黄色大片在线观看 | 国产精品一区二区久久精品爱微奶 | 欧美日韩国产免费视频 | 国产成人av福利 | 超碰个人在线 | 精品国内自产拍在线观看视频 | 久久九九久久九九 | 91精品国产综合久久婷婷香蕉 | 久久国色夜色精品国产 | 夜夜躁天天躁很躁波 | 超碰成人网 | 国产高清无av久久 | 懂色av懂色av粉嫩av分享吧 | 黄色在线看网站 | 九色在线 | 国产精品白浆 | 色婷av | 久久综合久久综合久久综合 | 操综合 | 亚洲欧洲在线视频 | 久久一区二区免费视频 | 免费久久99精品国产 | 国产精品自产拍在线观看网站 | 人人射人人澡 | 久久久久久久久久影视 | 日本中文乱码卡一卡二新区 | 亚洲精品国产精品国产 | 国产三级国产精品国产专区50 | 国产成人一区二区在线观看 | 国产日产精品一区二区三区四区的观看方式 | 久久久国产影院 | 在线中文字幕一区二区 | 最近中文字幕免费av | 久久精品91视频 | 亚州av免费 | av成人亚洲| 玖玖视频免费在线 | 九九在线高清精品视频 | 亚洲欧美视频一区二区三区 | 久久不色 | 久久久久久影视 | 午夜久久久久久久久久影院 | 国产成人99av超碰超爽 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲日本一区二区在线 | 国产字幕在线观看 | 91综合久久一区二区 | 免费中午字幕无吗 | 四虎国产永久在线精品 | 久热电影 | 国产99在线播放 | 免费成人av电影 | 一区二区三区手机在线观看 | 特黄一级毛片 | 美女视频免费精品 | 96精品高清视频在线观看软件特色 | 日韩性片| 97色在线视频 | 久久久久久久久久影院 | 亚洲最新av网站 | 精品毛片一区二区免费看 | 激情丁香在线 | 成人高清在线观看 | 91精品国产欧美一区二区成人 | 国产一区二区三区视频在线 | 天天干天天天 | 黄a网 | 国产在线观看高清视频 | 国产无遮挡又黄又爽在线观看 | 国产精品v欧美精品v日韩 | 999热线在线观看 | 日韩黄色免费在线观看 | 又色又爽又黄高潮的免费视频 | 天天干,天天射,天天操,天天摸 | 成人免费91 | 午夜影院日本 | 国产精品黑丝在线观看 | 婷婷亚洲最大 | www一起操| 97国产情侣爱久久免费观看 | 麻豆精品传媒视频 | 9999精品免费视频 | 99这里只有久久精品视频 | 日韩欧美在线中文字幕 | 久久久久久久久久福利 | 国产视频色 | 91黄色免费网站 | 欧美一区二区三区免费观看 | 国产资源精品在线观看 | 国产在线国偷精品产拍免费yy | 日韩1页| 欧美久草网 | 国产99久久久国产精品成人免费 | 成人免费观看网站 | 精品国精品自拍自在线 | 亚洲一级黄色av | 国产精品久久久久久电影 | 日本高清中文字幕有码在线 | 黄色大片日本 | 99精品系列 | 国产精品毛片网 | 天堂视频一区 | 精品色999 | 91在线播放综合 | 欧美日韩国产亚洲乱码字幕 | av中文字幕在线看 | 中文在线 | 麻豆va一区二区三区久久浪 | 色综合天天综合 | 91传媒在线看 | 国产精品白丝jk白祙 | 久久国产精品影片 | 日韩二区精品 | 99在线观看免费视频精品观看 | 日韩在线视频国产 | 国产高清精 | 久久草| 成人高清在线观看 | 午夜色站 | 五月亚洲 | 亚洲一级电影在线观看 | 丁香 婷婷 激情 | 一区二区三区免费在线观看视频 | 五月天伊人网 | 51精品国自产在线 | 国产老太婆免费交性大片 | 亚洲精品视频在线播放 | 操操操人人人 | 精品国产一区二区三区四区vr | av中文字幕剧情 | 成人a毛片 | 在线影院 国内精品 | 中文av一区二区 | 国产最顶级的黄色片在线免费观看 | 成人av电影网址 | 黄色福利网站 | 久久久久免费 | av日韩精品 | 中文字幕在线中文 | 最新久久久 | 看国产黄色大片 | 日日干美女 | 亚洲精品国产高清 | 日韩精品久久久久久中文字幕8 | 天天操天天是 | 欧美精品国产综合久久 | 国产精品一区二区果冻传媒 | 天天操天天爱天天爽 | 欧美日韩一区二区久久 | av电影一区二区三区 | 久久a v电影 | 久久草精品 | 在线观看一区 | 国产精品成人一区二区三区 | 天天爽人人爽 | 91成人免费看 | 深爱激情五月婷婷 | 亚洲精品久久视频 | 国产激情免费 | 五月婷婷综合久久 | 久久免费视频网 | 中文字幕在线观看1 | 色综合天天色 | 国产一区观看 | 99re视频在线观看 | 国产91九色视频 | 成人三级黄色 | 天天草av| 亚洲午夜大片 | 成人av日韩 | 在线天堂中文www视软件 | 国产九九精品 | www91在线观看 | 日韩欧美一二三 | 成人影音在线 | 日韩欧美视频在线 | 又黄又色又爽 | 国产精品高清免费在线观看 | 99性视频 | 日日添夜夜添 | 久久精品男人的天堂 | 97人人精品 | 亚洲国产精品资源 | 国产免费久久久久 | 最新日韩在线 | 2021国产在线 | 久久精品视频日本 | 五月天久久 | 亚洲欧美日韩在线看 | 国产成人一区在线 | 国产成人精品一区二区三区福利 | 欧美性久久久久久 | 亚洲成人精品影院 | 在线三级播放 | 国产精品欧美精品 | 欧美激情视频一二区 | 亚洲干视频在线观看 | 成人黄色小视频 | 国产成人av一区二区三区在线观看 | 超碰在线97国产 | 国产九色91 | 91视频链接 | 黄色www免费 | 一本一本久久a久久精品综合 | 国产精品手机在线播放 | 久久久影院一区二区三区 | 午夜精品久久久久久中宇69 | 99精品国产99久久久久久福利 | 99亚洲视频| 久久久官网 | 在线观看mv的中文字幕网站 | 欧美日韩亚洲第一 | 国产在线观 | 91亚洲综合 | 国产精品成人自产拍在线观看 | 欧美成人影音 | 黄色软件在线看 | 亚洲精品一区二区三区新线路 | 激情av资源网 | 日日夜夜人人天天 | 久久久久97国产 | 国产精品美女久久 | 亚洲国产精品第一区二区 | 伊人久久国产精品 | 91精品成人 | 久久最新网址 | 中文字幕123区 | 日韩一区二区三区在线观看 | 国产精品成人免费一区久久羞羞 | 缴情综合网五月天 | 91豆麻精品91久久久久久 | 日韩精品免费一区 | 中文在线8新资源库 | 日本中文一级片 | 免费看污网站 | 国产视频在线播放 | 一级黄色免费网站 | 色综合久久精品 | 黄网在线免费观看 | 日韩二区精品 | 免费在线观看毛片网站 | 国产精品2019 | 亚洲精品视频在线观看免费视频 | 麻豆视频免费在线观看 | 精品久久一区二区 | 成人四虎 | 免费看av在线 | 久久久久久国产精品亚洲78 | 精品国产一区二区三区在线 | 国产高清一区二区 | 97av视频 | 国产超碰97 | 免费观看国产视频 | 色福利网站 | 色天堂在线视频 | 九九精品久久 | 996久久国产精品线观看 | 欧美一区二区三区四区夜夜大片 | 久久婷婷一区二区三区 | 又黄又色又爽 | 色婷婷色 | 亚洲首页| 国产亚洲精品久久19p | 久久成人亚洲欧美电影 | 综合网久久 | 丁香导航 | 婷婷网站天天婷婷网站 | 日韩欧美一区二区在线 | 免费91麻豆精品国产自产在线观看 | 欧美精品乱码久久久久久 | 久久婷婷丁香 | 丁香狠狠| 亚洲欧美国产日韩在线观看 | 久久草网| 国产乱对白刺激视频不卡 | 九九爱免费视频在线观看 | 国内久久看 | 精品久久精品久久 | 亚洲精品播放 | 在线成人av| 亚洲va在线va天堂va偷拍 | 超碰人人av | 91高清视频在线 | 日本中文乱码卡一卡二新区 | 欧美精品三级在线观看 | 国产精品12| 久久99亚洲热视 | 国产成人精品av在线 | 中文字幕在线网址 | 久久午夜网 | 国产精品久久久久久一区二区三区 | 亚洲综合欧美日韩狠狠色 | 最近免费观看的电影完整版 | 啪啪免费视频网站 | 日韩电影在线视频 | 91日韩精品 | 国产精品99在线播放 | 亚洲欧美国产日韩在线观看 | 欧美性色网站 | japanesefreesexvideo高潮 | www黄色com | 色视频网址 | 国产高清在线观看 | 又黄又刺激的网站 | 免费成人在线观看视频 | 在线观看国产高清视频 | 一区二区三区高清不卡 | 中文字幕乱在线伦视频中文字幕乱码在线 | 亚洲国产理论片 | 久久精品91久久久久久再现 | 日韩欧美在线播放 | 夜夜躁日日躁狠狠久久av | 深爱激情综合网 | 亚洲精品乱码久久久久v最新版 | 深夜免费小视频 | 亚洲电影自拍 | 91视频下载 | 久久激情久久 | 日韩视频一区二区三区在线播放免费观看 | 天堂v中文| 日韩免费视频观看 | 色婷婷综合在线 | www.久草视频 | 午夜在线观看影院 | 亚洲爽爽网 | 久久精品视频3 | 日韩一级精品 | 果冻av在线 | 国产香蕉97碰碰久久人人 | 久久久免费精品国产一区二区 | 久久99在线观看 | 久草视频国产 | 色综合久久久久久中文网 | 国产婷婷色 | 精品在线观看一区二区 | 99精品在线免费 | 激情影音 | 91在线永久| 日韩久久激情 | 国产精品久久久久影院 | 欧美日韩大片在线观看 | 国产精品一区二区三区在线免费观看 | 国产手机视频在线 | 91看片在线播放 | 日韩成年视频 | 久久久午夜剧场 | 国产精品美女在线 | 182午夜在线观看 | 婷婷久久综合网 | 国产黄色片在线免费观看 | 在线观看www91 | 亚洲激情小视频 | 视频在线观看亚洲 | 久久国产露脸精品国产 | 久久久免费观看完整版 | 国产免费视频一区二区裸体 | 免费看的国产视频网站 | 91香蕉视频720p | 婷婷在线色 | 日韩视频在线观看免费 | 中字幕视频在线永久在线观看免费 | 91久久电影| 日韩在线 一区二区 | 久草在线网址 | 日本一区二区高清不卡 | 国产不卡在线观看视频 | 国产精品久久麻豆 | 亚洲在线精品视频 | 亚洲国产日韩一区 | 免费在线观看黄网站 | 久热av | 97超碰资源总站 | 狠狠狠色丁香婷婷综合久久五月 | 麻豆免费视频 | 午夜精品一区二区三区视频免费看 | 天天插狠狠插 | 精品国产一区二区三区噜噜噜 | 麻豆免费看片 | 久久tv | 不卡的av电影在线观看 | 97在线播放视频 | 日韩电影中文字幕 | 久久午夜色播影院免费高清 | 又污又黄的网站 | 中文国产成人精品久久一 | 日韩乱色精品一区二区 | 亚洲精品在线视频观看 | 日韩av免费大片 | 91福利影院在线观看 | 最近日本中文字幕 | 亚洲乱码久久久 | 美女网站在线免费观看 | 五月婷婷丁香在线观看 | 天天艹天天| 亚洲春色综合另类校园电影 | 人人干干人人 | 天天综合网国产 | 久久一区二区三区国产精品 | 亚洲欧美精品一区二区 | 狠狠干中文字幕 | 黄色三级在线看 | 亚洲一区免费在线 | 亚洲粉嫩av | 成人免费在线电影 | 手机看片中文字幕 | 伊人亚洲综合 | 青草草在线 | 国产免码va在线观看免费 | 婷婷视频 | 一区二区三区日韩在线 | 韩国av一区 | 久久精品福利 | 操操色| 午夜色性片| 国产成人一区二区啪在线观看 | 四虎国产视频 | 天天搞夜夜骑 | 狠狠的干狠狠的操 | 婷婷丁香九月 | 综合五月| 在线看国产日韩 | 亚洲精品裸体 | 日日夜夜精品免费观看 | 国产最新在线观看 | 高清视频一区二区三区 | 国外av在线 | 天天操福利视频 | 国偷自产视频一区二区久 | 欧美疯狂性受xxxxx另类 | 九九在线播放 | 成人电影毛片 | 色的网站在线观看 | 九月婷婷色 |