2019-09-03

from hyperopt import fmin, tpe, hp,space_eval,rand,Trials,partial,STATUS_OK

from sklearn.model_selection import cross_val_score

from xgboost import XGBClassifier as XGBC

def GBM(argsDict):

    max_depth = argsDict["max_depth"]

    n_estimators = argsDict['n_estimators'] * 10 + 50

    learning_rate = argsDict["learning_rate"] * 0.01 + 0.05

    subsample = argsDict["subsample"] * 0.1 + 0.7

    colsample_bytree = argsDict["colsample_bytree"] * 0.1 + 0.7

    min_child_weight = argsDict["min_child_weight"]+1

    print ("max_depth:" + str(max_depth))

    print ("n_estimator:" + str(n_estimators))

    print ("learning_rate:" + str(learning_rate))

    print ("subsample:" + str(subsample))

    print ("colsample_bytree:" + str(colsample_bytree))

    print ("min_child_weight:" + str(min_child_weight))

    global X_train,Y_train

    gbm = XGBC(nthread=4,    #进程数

                            max_depth=max_depth,  #最大深度

                            n_estimators=n_estimators,  #树的数量

                            learning_rate=learning_rate, #学习率

                            subsample=subsample,      #采样数

                            colsample_bytree = colsample_bytree,

                            min_child_weight=min_child_weight,

                            max_delta_step = 10,  #10步不降则停止

                            objective="binary:logistic")

    metric = cross_val_score(gbm,X_train,Y_train,cv=5,scoring="roc_auc").mean()

    print (metric)

● 【1 流失预警模型】

      构建实动预测模型(LightGBM),基于客户当月消费、APP登录、分期循环等特征,预测客户下月是否实动。针对预测不动客户,推送微信立减券(18-10),达到促活效果。模型训练集准确率92.17%,AUC为0.97,验证集91.57%,AUC为0.96,测试集90.63%,AUC为0.95。

● 【2.销量预测模型】

        搭建销量预测模型(Random Forest),基于上月活动人力、工作日产能、地区表现等因素,进行滑动特征衍生,预测寿险渠道下月产能,模型训练集误差率7.34%,误差率11.80%,整体误差率7.58%,为制定业绩目标、分配渠道资源,提供科学依据。建模报告可视化了销量走势与特征重要性,对比了Python随机森林与Tableau时间序列预测的精度差异,受到上级领导高度认可。

● 【3.新户获客分析】

      针对银行渠道929新户活动,每周提供重点客户清单,输出复盘分析报告,对客户进行分层促动。11月新户三绑率相比10月,环比提升6pct(47% Vs 41%),M0首刷率环比提升5pct(52% Vs 47%),两者均达全年峰值,取得出色效果。分析建议在代发量大,首刷率低的分中心,采取类似的新户活动,对于参与率低的汽融、消金通路,可以改变活动形式(如无门槛券),提升通路表现。

● 【4.客户经营分析】

      围绕12.06上线的现金分期产品,进行漏斗分析,以全面掌握经营动态。分析发现,尽管不同渠道客户在资格率上差异不大(约50%),但在转化率方面差异显著:网络渠道进件客户意愿明显更高,户均成交金额也相对较高。分析指出,尽管成交额连创新高,但银行渠道自有进件客户成交占比仅1/5,有为其他渠道做嫁衣的风险,有必要在银行渠道内各通路加强宣导,投注更多资源,提升贡献占比。

● 【5.自动报表开发】

      编写大量HQL/SQL调度作业,开发多套核心的自动化报表:《银行渠道新户表现报表》,《策盟渠道客户画像报表》、《策盟渠道基础表现报表》、《策盟渠道新户Vintage报表》、《策盟渠道损益报表》、《Costco产能日报》、《Costco苏州店活动报表》、《中石油四省加油活动报表》等。






    return -metric

space = {"max_depth":hp.randint("max_depth",11),

        "n_estimators":hp.randint("n_estimators",3),  #[0,1,2,3] -> [50,]

        "learning_rate":hp.randint("learning_rate",6),  #[0,1,2,3,4,5] -> 0.05,0.06

        "subsample":hp.randint("subsample",4), #[0,1,2,3] -> [0.7,0.8,0.9,1.0]

        "colsample_bytree":hp.randint("colsample_bytree",4), #[0,1,2,3] -> [0.7,0.8,0.9,1.0]

        "min_child_weight":hp.randint("min_child_weight",6), #[0,1,2,3,4,5]

        }

algo = partial(tpe.suggest,n_startup_jobs=1)

best = fmin(GBM,space,algo=algo,max_evals=4)#max_evals表示想要训练的最大模型数量,越大越容易找到最优解

print (best)

print (GBM(best))

early_stopping_rounds


第一轮,原始参数

第二轮,调整最大深度,改为2

第三轮,调整最大深度,改为3,发现不如2

第四轮,调整最大深度,改为1,发现不如2

第五轮,固定最大深度为2,更改学习率为0.1, 发现效果较好

第六轮,固定最大深度为2,更改学习率为0.05,发现效果更好(对比0.1)

第七轮,调整最小结构分数之差gamma,从0调整为5,10,20,发现效果不明显,因为树的深度低,效果覆盖了这里,所以固定为0

第八轮,调整L2正则项lambda ,从1调为0.5,效果略有变差,区别不大,因此固定为1

第九轮,调整L1正则项alpha,从0调整为1、10,效果略有变差,区别不大,因此固定为0

第十轮,调整colsample_bytree,发现意义不大,选择1,后续colsample_bylevel类似

第十一轮,调整 num_boost_round,调整为300

结论:通常先确定n_estimators 和eta, 然后gamma和最大深度随便选,然后调纵向抽样,最后调正则化参数


fig,ax = plt.subplots(1,figsize=(15,8))

ax.set_ylim(top=5)

ax.grid()

#--------------------------------------------------------------------------------------------------------------------------------

params_1 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

            ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

            ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

            ,"max_depth":6 # 默认6,  [default=6]: 树的最大深度

            ,"eta":0.3 # 默认为3, [default=0.3]:学习率, alias: learning_rate

            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

}

cv_result_1 = xgb.cv( dtrain =dtrain,        # 数据

                      params = params_1,        # xgb参数

                      num_boost_round=300,    # 最大迭代次数,即建立的树数目

                      nfold = 5,

                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

ax.plot(range(1,301),cv_result_1.iloc[:,0],c="red",label="train,original")

ax.plot(range(1,301),cv_result_1.iloc[:,2],c="orange",label="test,original")

#--------------------------------------------------------------------------------------------------------------------------------

# 调整最大深度 max_depth为2

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

# #            ,"eta":0.3 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

#--------------------------------------------------------------------------------------------------------------------------------

# 调整最大深度 max_depth为3,发现不如2

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":3 # 默认6,  [default=6]: 树的最大深度

# #            ,"eta":0.3 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

#--------------------------------------------------------------------------------------------------------------------------------

# 调整最大深度 max_depth为1,发现不如2

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":1 # 默认6,  [default=6]: 树的最大深度

# #            ,"eta":0.3 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

#--------------------------------------------------------------------------------------------------------------------------------

#固定max_depth为2,调整学习率eta为0.1,发现效果较好

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.1 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

#--------------------------------------------------------------------------------------------------------------------------------

# 调整最大深度 max_depth为2调整学习率eta为0.1,对比0.05,

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.1 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# #--------------------------------------------------------------------------------------------------------------------------------

# #固定max_depth为2,调整学习率eta为0.05,发现效果较好

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

# #            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

#--------------------------------------------------------------------------------------------------------------------------------

# #固定最大深度 max_depth为2,学习率eta为0.05,调整最小结构分数之差gamma,默认0

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# #--------------------------------------------------------------------------------------------------------------------------------

# #固定最大深度 max_depth为2,学习率eta为0.05,调整最小结构分数之差gamma,从默认0调整为5,没区别,再调整为10,20,50,意义不大,所以固定为0

# #因为最大深度调整得低,所以gamma的性质就会被覆盖掉

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":50 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

# #            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# #--------------------------------------------------------------------------------------------------------------------------------

# # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为默认的1

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# # #--------------------------------------------------------------------------------------------------------------------------------

# # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda调整为0.5,0.1,效果略有变差,区别不大

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":0.5 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

# #            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# #--------------------------------------------------------------------------------------------------------------------------------

# #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, ,"alpha":0

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# # #--------------------------------------------------------------------------------------------------------------------------------

# # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, "alpha"为1,影响不大

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#              ,"alpha":10 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

# #            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

# #            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# #--------------------------------------------------------------------------------------------------------------------------------

# #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, ,"alpha":0 ,调整colsample_bytree

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# # # #--------------------------------------------------------------------------------------------------------------------------------

# # # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, "alpha"为0,colsample_bytree调整为0.5,0.7,意义不大

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#              ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":0.3 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# # #--------------------------------------------------------------------------------------------------------------------------------

# #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, ,"alpha":0 ,调整colsample_bytree

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=300,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,301),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,301),cv_result_2.iloc[:,2],c="green",label="test,original")

# # # #--------------------------------------------------------------------------------------------------------------------------------

# # # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, "alpha"为0,colsample_bytree调整为0.5,0.7,意义不大

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#              ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":0.3 # 默认为1,列采样比例: 层级

# #            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=300,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,301),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,301),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# #--------------------------------------------------------------------------------------------------------------------------------

#固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, ,"alpha":0 ,调整colsample_bytree

# params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":0.4 # 默认为1,列采样比例: 层级

#            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

# }

# cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

#                      params = params_2,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_2.iloc[:,0],c="yellow",label="train,original")

# ax.plot(range(1,201),cv_result_2.iloc[:,2],c="green",label="test,original")

# # # #--------------------------------------------------------------------------------------------------------------------------------

# # # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, "alpha"为0,colsample_bytree调整为0.5,0.7,意义不大

# params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

#              ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

#              ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

#              ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

#              ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

#              ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

#              ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

#              ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

#            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

#              ,"colsample_bylevel":0.4 # 默认为1,列采样比例: 层级

#            ,"colsample_bynode":0.3 # 默认为1,列采样比例: 节点

# }

# cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

#                      params = params_3,        # xgb参数

#                      num_boost_round=200,    # 最大迭代次数,即建立的树数目

#                      nfold = 5,

#                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

# ax.plot(range(1,201),cv_result_3.iloc[:,0],c="cyan",label="train,original")

# ax.plot(range(1,201),cv_result_3.iloc[:,2],c="blue",label="test,original")

# ax.legend(fontsize="xx-large")

# plt.show()

# #--------------------------------------------------------------------------------------------------------------------------------

#固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, ,"alpha":0 ,调整colsample_bytree

params_2 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

            ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

,"subsample":1

,"eta":0.05

,"gamma":20

,"lambda":3.5

,"alpha":0.2

,"max_depth":4

,"colsample_bytree":0.4

,"colsample_bylevel":0.6

,"colsample_bynode":1

}

cv_result_2 = xgb.cv( dtrain =dtrain,            #  数据

                      params = params_2,        # xgb参数

                      num_boost_round=300,    # 最大迭代次数,即建立的树数目

                      nfold = 5,

                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

ax.plot(range(1,301),cv_result_2.iloc[:,0],c="yellow",label="train,original")

ax.plot(range(1,301),cv_result_2.iloc[:,2],c="green",label="test,original")

# # #--------------------------------------------------------------------------------------------------------------------------------

# # #固定最大深度 max_depth为2,学习率eta为0.05,最小结构分数之差gamma为0,lambda为1, "alpha"为0,colsample_bytree调整为0.5,0.7,意义不大

params_3 = {  'verbosity':1  # 非默认,0 (silent), 1 (warning), 2 (info), 3 (debug).

            ,'objective':'reg:squarederror' # 默认,MSE:均方误差: (Σ(yi - y预测)²)/n,而均方根误差RMSE就是对MSE开平方,这是生成每颗树时,所用的损失函数

            ,"subsample":1 # 默认1,[default=1]:有放回随机抽样比例

            ,"max_depth":2 # 默认6,  [default=6]: 树的最大深度

            ,"eta":0.05 # 默认为3, [default=0.3]:学习率, alias: learning_rate

            ,"gamma":0 # 默认为0,[default=0]:最小结构分数之差, alias: min_split_loss

            ,"lambda":1 # 默认为1,[default=1]: L2正则项的参数, alias: reg_lambda :

            ,"alpha":0 # 默认为0,[default=0]:L1正则项的参数:alias: reg_alpha

            ,"colsample_bytree":1 # 默认为1,列采样比例:  树

            ,"colsample_bylevel":1 # 默认为1,列采样比例: 层级

            ,"colsample_bynode":1 # 默认为1,列采样比例: 节点

}

cv_result_3 = xgb.cv( dtrain =dtrain,        # 数据

                      params = params_3,        # xgb参数

                      num_boost_round=300,    # 最大迭代次数,即建立的树数目

                      nfold = 5,

                      metrics = 'rmse')        # 评估指标:rmse,均方根误差,mae:mean absolute error这是每次建立好模型以后对训练样本和验证样本的回测评估指标

ax.plot(range(1,301),cv_result_3.iloc[:,0],c="cyan",label="train,original")

ax.plot(range(1,301),cv_result_3.iloc[:,2],c="blue",label="test,original")

ax.legend(fontsize="xx-large")

plt.show()













\




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容

  • 早饭:一块饼,一个苹果,俩猕猴桃。 午饭:一碗板面,一块月饼,。 很好吃,谢谢庄杰啦。 晚饭:聚餐吧。 一个与我同...
    yummy0632阅读 69评论 0 0
  • 度过了黑暗 迎来了黎明 而你 却未在 太阳升起的地方 等我
    那一见的风情521阅读 113评论 0 0
  • 最近我们一直在谈一个非常重要的词汇---反思。 没有反思的人生不值得过。 如何做反思呢?前面几讲我们谈了一些技巧。...
    道亦自然阅读 236评论 0 0
  • 感恩日记(420) 《欢喜心》 日不入斗金, 更非富贵身。 心不思苦随欲安, 全凭欢喜心。 大胆去追寻, 热度不降...
    hao黑土阅读 87评论 0 0
  • 季涵原以为自己和沈默是不会相遇的两条平行线,可缘分就是如此妙不可言. 季涵这个平凡而又善良,胆怯中又有...
    薄荷味的酸酸阅读 71评论 0 0