博客
关于我
机器学习数据处理时label错位对未来数据做预测
阅读量:424 次
发布时间:2019-03-06

本文共 5015 字,大约阅读时间需要 16 分钟。

这篇文章继上篇,通过将测试集label(行)错位,将部分数据作为对未来的预测,观察其效果。

实验方式

  • 以不同方式划分数据集和测试集
  • 使用不同的归一化(标准化)方式
  • 使用不同的模型
  • 将测试集label错位,计算出MSE的大小
  • 不断增大错位的数据的个数,并计算出MSE,并画图
  • 通过比较MSE(均方误差,mean-square error)的大小来得出结论

过程及结果

数据预处理部分与上次相同。两种划分方式:

一、

test_sort_data = sort_data[16160:]test_sort_target = sort_target[16160:]_sort_data = sort_data[:16160]_sort_target = sort_target[:16160]sort_data1 = _sort_data[:(int)(len(_sort_data)*0.75)]sort_data2 = _sort_data[(int)(len(_sort_data)*0.75):]sort_target1 = _sort_target[:(int)(len(_sort_target)*0.75)]sort_target2 = _sort_target[(int)(len(_sort_target)*0.75):]

二、

test_sort_data = sort_data[:5000]test_sort_target = sort_target[:5000]sort_data1 = _sort_data[5000:16060]sort_data2 = _sort_data[16060:]sort_target1 = _sort_target[5000:16060]sort_target2 = _sort_target[16060:]

一开始用的第一种划分方式,发现直接跑飞了

然后仔细想了想,观察了上篇博客跑出来的数据,果断换了第二种划分方式,发现跑出来的结果还不错

MaxMinScaler()

看到lr模型明显要大,就舍弃了

(emmmmm。。。这张图看起来就友好很多了)

MaxAbsScaler()

StandardScaler()

代码

其中大部分的代码都是一样的,就是改改归一化方式,就只放一部分了

数据预处理部分见上篇博客

加上这一段用于画图

import matplotlib.pyplot as plt lr_plt=[]ridge_plt=[]svr_plt=[]RF_plt=[]

接着,先计算不改变label时的值

from sklearn.linear_model import LinearRegression,Lasso,Ridgefrom sklearn.preprocessing import MinMaxScaler,StandardScaler,MaxAbsScalerfrom sklearn.metrics import mean_squared_error as msefrom sklearn.svm import SVRfrom sklearn.ensemble import RandomForestRegressorimport xgboost as xgb#最大最小归一化mm = MinMaxScaler()lr = Lasso(alpha=0.5)lr.fit(mm.fit_transform(sort_data1[new_fea]), sort_target1)lr_ans = lr.predict(mm.transform(sort_data2[new_fea]))lr_mse=mse(lr_ans,sort_target2)lr_plt.append(lr_mse)print('lr:',lr_mse)ridge = Ridge(alpha=0.5)ridge.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)ridge_ans = ridge.predict(mm.transform(sort_data2[new_fea]))ridge_mse=mse(ridge_ans,sort_target2)ridge_plt.append(ridge_mse)print('ridge:',ridge_mse)svr = SVR(kernel='rbf',C=100,epsilon=0.1).fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)svr_ans = svr.predict(mm.transform(sort_data2[new_fea]))svr_mse=mse(svr_ans,sort_target2)svr_plt.append(svr_mse)print('svr:',svr_mse)estimator_RF = RandomForestRegressor().fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)predict_RF = estimator_RF.predict(mm.transform(sort_data2[new_fea]))RF_mse=mse(predict_RF,sort_target2)RF_plt.append(RF_mse)print('RF:',RF_mse)bst = xgb.XGBRegressor(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=0,                             subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1)bst.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)bst_ans = bst.predict(mm.transform(sort_data2[new_fea]))print('bst:',mse(bst_ans,sort_target2))

先将label错位,使得data2的第i位对应target2的第i+5位

change_sort_data2 = sort_data2.shift(periods=5,axis=0)change_sort_target2 = sort_target2.shift(periods=-5,axis=0)change_sort_data2.dropna(inplace=True)change_sort_target2.dropna(inplace=True)

然后用一个循环不断迭代,改变错位的数量

mm = MinMaxScaler()for i in range(0,45,5):    print(i)    lr = Lasso(alpha=0.5)    lr.fit(mm.fit_transform(sort_data1[new_fea]), sort_target1)    lr_ans = lr.predict(mm.transform(change_sort_data2[new_fea]))    lr_mse=mse(lr_ans,change_sort_target2)    lr_plt.append(lr_mse)    print('lr:',lr_mse)        ridge = Ridge(alpha=0.5)    ridge.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)    ridge_ans = ridge.predict(mm.transform(change_sort_data2[new_fea]))    ridge_mse=mse(ridge_ans,change_sort_target2)    ridge_plt.append(ridge_mse)    print('ridge:',ridge_mse)        svr = SVR(kernel='rbf',C=100,epsilon=0.1).fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)    svr_ans = svr.predict(mm.transform(change_sort_data2[new_fea]))    svr_mse=mse(svr_ans,change_sort_target2)    svr_plt.append(svr_mse)    print('svr:',svr_mse)        estimator_RF = RandomForestRegressor().fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)    predict_RF = estimator_RF.predict(mm.transform(change_sort_data2[new_fea]))    RF_mse=mse(predict_RF,change_sort_target2)    RF_plt.append(RF_mse)    print('RF:',RF_mse)    #     bst = xgb.XGBRegressor(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=0,#                              subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1)#     bst.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1)#     bst_ans = bst.predict(mm.transform(change_sort_data2[new_fea]))#     print('bst:',mse(bst_ans,change_sort_target2))        change_sort_target2=change_sort_target2.shift(periods=-5,axis=0)    change_sort_target2.dropna(inplace=True)    change_sort_data2 = change_sort_data2.shift(periods=5,axis=0)    change_sort_data2.dropna(inplace=True)

 然后就可以画图了

x=[0,5,10,15,20,25,30,35,40,45]plt.plot(x,lr_plt,label='lr',color='r',marker='o')plt.plot(x,ridge_plt,label='plt',color='b',marker='o')plt.plot(x,svr_plt,label='svr',color='g',marker='o')plt.plot(x,RF_plt,label='RF',color='y',marker='o')plt.legend()plt.show()

结果分析

从上面给出的图来看,发现将label错位后,相比于原来的大小还是有所增大,但是增大后的值并不是特别大,并且大致在某个范围内浮动,大概在错位10个label时能得到的结果是最好的。

 

转载地址:http://yywuz.baihongyu.com/

你可能感兴趣的文章
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>