初次实践XGBoosting

我先做一个小例子热身一下:

import numpy as np  
dataset=np.array([[1.,-1.,2.],[2.,0.,0.],[0.,1.,-1.]])
X=dataset[0]#[ 1. -1.  2.]第一行
X=dataset[:1]#[[ 1. -1.  2.]]第一行很少用
X=dataset[:,1]#[-1.  0.  1.]第二列
X=dataset[:,0:2]
# =============================================================================
# [[ 1. -1.] 
#  [ 2.  0.]
#  [ 0.  1.]]
# =============================================================================
print(X)

初次实践XGBoosting_第1张图片



2.开始初次实践:                                                                          数据网站链接

#引入xgboost包
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

#分出变量和标签
dataset=loadtxt('game/pima-indians-diabetes.csv',delimiter=",")
#取前七列
X=dataset[:,0:8]
#取第八列
Y=dataset[:,8]
seed=7
test_size=0.33
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=test_size,random_state=seed)
model=XGBClassifier()
model.fit(X_train,y_train)
y_pre=model.predict(X_test)
#xgboost 的结果是每个样本属于第一类的概率,需要用 round 将其转换为 0 1 值
predictions=[round(value) for value in y_pre]
#得到Accuracy:77.95%
accuracy=accuracy_score(y_test,predictions)
print("Accuracy:%0.2f%%"%(accuracy*100))

初次实践XGBoosting_第2张图片


初次实践XGBoosting_第3张图片



初次实践XGBoosting_第4张图片


对应的换了,就会输出    。。那么它会在每加入一颗树后打印出 logloss

# =============================================================================
# model=XGBClassifier()
# model.fit(X_train,y_train)
# 
# 
# =============================================================================

model = XGBClassifier()
eval_set = [(X_test, y_test)]
model.fit(X_train, y_train, early_stopping_rounds=10, eval_metric="logloss", eval_set=eval_set, verbose=True)

初次实践XGBoosting_第5张图片

3. 输出特征重要度


#添加这几句
from xgboost import plot_importance
from matplotlib import pyplot


plot_importance(model)
pyplot.show()

初次实践XGBoosting_第6张图片

4. 调参


如何调参呢,下面是三个超参数的一般实践最佳值,可以先将它们设定为这个范围,然后画出 learning curves,再调解参数找到最佳模型:

  • learning_rate = 0.1 或更小,越小就需要多加入弱学习器;
  • tree_depth = 2~8;
  • subsample = 训练集的 30%~80%;








参考

你可能感兴趣的:(python数据分析实战练习)