赞
踩
一、xgboost扩展包安装
1、官网下载xgboost扩展包:
Python Extension Packages for Windows下载对应版本,win64,python3.6
https://download.lfd.uci.edu/pythonlibs/rqr3k8is/xgboost-0.7-cp36-cp36m-win_amd64.whl
(https://www.lfd.uci.edu/~gohlke/pythonlibs/#xgboost 扩展包目录)
2、使用pip命令安装:
在python脚本目录下执行pip命令(本人为: cd D:\work\ide\Anaconda3\Scripts)
pip install D:\study\ai\7v\packages\xgboost-0.7-cp36-cp36m-win_amd64.whl
二、业务数据准备
1、分析业务场景中可能影响到门店日销售额的所有特征:
本demo使用的特征包含以下内容:周几、几号、是否节假日、前3天平均、前7天平均、前30天平均、前90天平均、
上周同天、上个月同天、3个月前同天、6个月同天(实际情况可能还需要更多的特征,但是运行demo已经足够了)
2、对确定的特征数据进行提取,本demo数据统计使用的是spark计算框架,只要拿到特征源数据即可。
三、建立模型
1、特征数据转换:
将业务数据中取值可以简单枚举的字段转换成包含1个1其它均为0的list(如:星期一为1,0,0,0,0,0,0)
#将数字转为list 如 星期一,只需要传入7,1就会返回 1,0,0,0,0,0,0 one-hot
def number2list(max_num,num):
return_list = []
day = int(num)
for i in range(1, max_num + 1):
if i == day: return_list.append(1)
else:return_list.append(0)
return return_list
2、使用特征数据建立模型
# 1、读取特征和目标
print(time() + '-读取特征和目标开始')
train_and_valid, test = pd.read_csv(tv_features), pd.read_csv(test_features)
print(time() + '-读取特征和目标开始完成,数据形状:',train_and_valid.shape)
# 2、获取训练、验证、测试的特征和目标(为了减少代码运行时间,方便测试)
# 2-1、取训练、验证、测试数据子集
# 训练、验证(0.99:0.01)
train,valid = cross_validation.train_test_split(train_and_valid,test_size=0.01,random_state=10)
# 2-2、解析训练、验证、测试数据的特征和目标
train_feature,train_target = parse_features_target('-训练数据:',train)
valid_feature,valid_target = parse_features_target('-验证数据:',valid)
test_feature,test_target = parse_features_target('-测试数据:',test)
print(time() + '-获取训练、验证、测试的特征和目标完成')
# 1、训练、验证数据转换为xgboost矩阵(取目标log是为了数据更稳定)
dtrain = xgb.DMatrix(train_feature,np.log(train_target))
dvalid = xgb.DMatrix(valid_feature,np.log(valid_target))
watchlist = [(dvalid,'valid'), (dtrain,'train')]
# 2、设置基本参数
num_boost_round=500
params = {"max_depth":8,"eta":0.2,"subsample":0.7,"colsample_bytree":0.7,"silent":1,
"objective":"reg:linear"} #线性回归
# 3、创建训练模型
gbm = xgb.train(params,dtrain,num_boost_round,evals=watchlist,feval=rmspe_xg,
early_stopping_rounds=50,verbose_eval=True)
print(time() + '获取训练、验证、测试的特征和目标完成')
3、根据迭代收敛情况,进行调参(调参是个高大上的事情,待精通了再聊)
四、评价预测
1、使用测试数据进行预测,并使用实际值对预测结果进行误差分析
# 1、测试shop_id集合(数据首位)
shop_id_df = test_feature[str(0)]
print(time() + '-测试shop_id集合,数据形状', shop_id_df.shape)
# 2、将测试集代入模型进行预测
test_probs = gbm.predict(xgb.DMatrix(test_feature))
print(time() + '-流量预测结果,数据形状',test_probs.shape)
# 预测目标流量(指数还原)
predict_flow = list(np.exp(test_probs)) #指数计算
# 汇总预测结果
real_predict = zip(list(shop_id_df),list(test_target),predict_flow)
print(time() + '-预测最终结果汇总(前10):',predict_flow[0:10])
# 3、对预测结果进行矫正(如果在极值之外就取平均值)
max_dict,min_dict,ave_dict = get_shop_number_dict()
# 预测修正结果
predict_flow_improve = []
for shop_id,real,predict in real_predict:
predict0 = predict
if predict > max_dict[shop_id]:predict = ave_dict[shop_id]
if predict < min_dict[shop_id]:predict = ave_dict[shop_id]
predict_flow_improve.append(predict)
print(time() + '-预测修正结果:','shop_id=',shop_id,'real=',real,'predict0=',predict0,'predict=',predict0)
# 4、计算误差
real_predict_improve = zip(list(test_target),predict_flow_improve)
error = rmse(real_predict_improve)
print('误差标准差计算:', error)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。