XGBoost(Extreme Gradient Boosting)是一种高效的梯度提升树(Gradient Boosting Tree)算法,广泛应用于分类和回归问题。其gbtree模型专注于使用决策树作为基学习器。本文利用房价数据集对XGBoost模型进行训练,并应用训练好的XGBoost模型对房价进行预测。
准备数据
例如,使用boston数据集作为训练数据集,其数据结构如下所示:
列名 | 描述 | 数据类型 |
crim | 城镇的人均犯罪率。 | FLOAT |
zn | 面积超过25000平方英尺的住宅用地比例。 | FLOAT |
indus | 每个城镇非零售商业用地面积比例。 | FLOAT |
chas | 是否临近河道。 | INT |
nox | 氮氧化物浓度(千万分之一)。 | FLOAT |
rm | 每套住宅的平均房间数。 | FLOAT |
age | 1940年之前建造的自住房比例。 | FLOAT |
dis | 去往五个就业中心的平均距离。 | FLOAT |
rad | 高速公路的距离。 | INT |
tax | 每10000美元的全额房产税率。 | INT |
ptratio | 各城镇师生的比例。 | FLOAT |
b | 非洲裔城镇居民的比例。 | FLOAT |
lstat | 低收入人口的比例。 | FLOAT |
medv | 自住房屋的平均价值。 | FLOAT |
训练模型
使用boston.train进行模型训练,并利用boston.test进行数据预测。在训练过程中,RDS SQLFlow将自动对训练数据集进行划分,以生成训练数据集和验证数据集。
在RDS SQLFlow客户端的RDS SQLFlow命令行界面中,执行如下SQL训练模型。
SELECT * FROM boston.train TO TRAIN xgboost.gbtree WITH objective="reg:squarederror", train.num_boost_round = 30 COLUMN crim, zn, indus, chas, nox, rm, age, dis, rad, tax, ptratio, b, lstat LABEL medv INTO sqlflow_models.my_xgb_regression_model;
其中,
SELECT
语句用于从boston.train表中提取训练数据,TO TRAIN
明确指定所使用的模型为xgboost.gbtree,WITH
语句则用于配置训练参数,COLUMN
用于指定特征列,LABEL
用于指定标签列,最后,INTO
语句则用于定义训练完成后模型的存储位置。训练语法的更多信息请参见训练语法。
使用模型预测数据
在完成xgboost.gbtree模型的训练后,可以利用该模型进行房价预测,相关的预测SQL如下:
SELECT * FROM boston.test TO PREDICT boston.predict.medv USING sqlflow_models.my_xgb_regression_model;
其中,
SELECT
则用于指定预测所需的数据集,TO PREDICT
用于指明预测结果存储的表,而USING
语句用于指定所采用的模型,预测语法的更多信息请参见预测语法。预测结束后,通过如下SQL查看预测结果。
SELECT * FROM boston.predict;