XGBoost 入门实战 - xgboost的基础应用

"""
本节内容
* 直接使用XGBoost训练毒蘑菇分类
"""
import xgboost as xgb
from sklearn.metrics import accuracy_score  # 计算分类正确率
import time
from matplotlib import pyplot
import graphviz

"""
整体流程
1、构造学习器
2、训练模型
3、预测
"""

# 数据读取
"""
* XGBoost可以加载libsvm格式的文本数据,
* libsvm的文件格式(稀疏特征): 
* 1 3:1 10:1 11:1 21:1 30:1 34:1
* 0 3:1 10:1 20:1 21:1 23:1 34:1
* 开头0/1表示正负样本,也支持[0,1]表示概率用来做标签,表示为正样本的概率
* 3、10是feature的key,1、1是对应的value
* XGBoost加载的数据存储在对象DMatri x中 XGBoost自定义了一个数据矩阵类DMatrix,优化了存储和运算速度
"""
work_path = '../data/'
dtrain = xgb.DMatrix(work_path + 'agaricus.txt.train')
dtest = xgb.DMatrix(work_path + 'agaricus.txt.test')

# 查看数据情况
print(dtrain.num_col())  # 127
print(dtrain.num_row())  # 6513
print(dtest.num_row())  # 1611

# 训练参数设置
param = {
     'max_depth': 2,
         'eta': 1,
         'objective': 'binary:logistic'}
"""
* max_depth:树的最大深度,缺省值为6,取值范围[1,∞]
* eta:防止过拟合,更新过程中使用到收缩步长,在每次提升计算之后,算法会直接获得新特征的权重,缺省值0.3,范围[0,1]
* objective:定义学习任务及相应学习目标,'binary:logistic'表示二分类的逻辑回归问题,输出为概率
"""

# 训练模型
num_boost_round = 2   # boosting迭代计算次数
start_time = time.process_time()
bst = xgb.train(param, dtrain, num_boost_round)
end_time = time.process_time()
print(end_time - start_time)    # 训练时间0.0215

# 查看训练模型准确度
# 获取预测值
train_preds = bst.predict(dtrain)
# XGBoost预测的输出是概率。这里蘑菇分类是一个二类分类问题,输出值是样本为第一类的概率。 我们需要将概率值转换为0或1
train_predictions = [round(value) for value in train_preds]
# 获取label,label有监督学习
y_train = dtrain.get_label()
# 计算预测值和label的正确率
train_accuracy = accuracy_score(y_train, train_predictions)
print("Train Accuary: %.2f%%" % (train_accuracy * 100.0))       # 97.77%

# 对测试数据进行测试
test_preds = bst.predict(dtest)
test_predictions = [round(value) for value in test_preds]
y_test = dtest.get_label()
test_accuracy = accuracy_score(y_test, test_predictions)
print("Test Accuary: %.2f%%" % (test_accuracy * 100.0))     # 97.83%

# 模型可视化
"""
* 调用XGBoost工具包中的plot_tree,在显示 要可视化模型需要安装graphviz软件包
"""
xgb.plot_tree(bst, num_trees=0, rankdir='LR')
pyplot.show()

"""
* max_depth = 2, num_round = 2
* train正确率:97.77%, test正确率:97.83%

* max_depth = 3, num_round = 2
* train正确率:99.88%, test正确率:100%
"""

你可能感兴趣的:(机器学习,xgboost,机器学习,实战)