机器学习预测时label错位对未来数据做预测
前言
这篇文章时承继上一篇机器学习经典模型使用归一化的影响。这次又有了新的任务,通过将label错位来对未来数据做预测。
实验过程
使用不同的归一化方法,不同得模型将测试集label错位,计算出MSE的大小;
不断增大错位的数据的个数,并计算出MSE,并画图。通过比较MSE(均方误差,mean-square error)的大小来得出结论
过程及结果
数据处理(和上一篇的处理方式相同):
1 test_sort_data = sort_data[:5000] 2 test_sort_target = sort_target[:5000] 3 4 sort_data1 = _sort_data[5000:16060] 5 sort_data2 = _sort_data[16060:] 6 sort_target1 = _sort_target[5000:16060] 7 sort_target2 = _sort_target[16060:]
View Code
完整数据处理代码:
1 #按时间排序 2 sort_data = data.sort_values(by = 'time',ascending = True) 3 4 sort_data.reset_index(inplace = True,drop = True) 5 target = data['T1AOMW_AV'] 6 sort_target = sort_data['T1AOMW_AV'] 7 del data['T1AOMW_AV'] 8 del sort_data['T1AOMW_AV'] 9 10 from sklearn.model_selection import train_test_split 11 test_sort_data = sort_data[16160:] 12 test_sort_target = sort_target[16160:] 13 14 _sort_data = sort_data[:16160] 15 _sort_target = sort_target[:16160] 16 17 from sklearn.model_selection import train_test_split 18 test_sort_data = sort_data[:5000] 19 test_sort_target = sort_target[:5000] 20 21 sort_data1 = _sort_data[5000:16060] 22 sort_data2 = _sort_data[16060:] 23 sort_target1 = _sort_target[5000:16060] 24 sort_target2 = _sort_target[16060:] 25 26 import scipy.stats as stats 27 dict_corr = { 28 'spearman' : [], 29 'pearson' : [], 30 'kendall' : [], 31 'columns' : [] 32 } 33 34 for i in data.columns: 35 corr_pear,pval = stats.pearsonr(sort_data[i],sort_target) 36 corr_spear,pval = stats.spearmanr(sort_data[i],sort_target) 37 corr_kendall,pval = stats.kendalltau(sort_data[i],sort_target) 38 39 dict_corr['pearson'].append(abs(corr_pear)) 40 dict_corr['spearman'].append(abs(corr_spear)) 41 dict_corr['kendall'].append(abs(corr_kendall)) 42 43 dict_corr['columns'].append(i) 44 45 # 筛选新属性 46 dict_corr =pd.DataFrame(dict_corr) 47 dict_corr.describe()
View Code
选取25%以上的;
1 new_fea = list(dict_corr[(dict_corr['pearson']>0.41) & (dict_corr['spearman']>0.45) & (dict_corr['kendall']>0.29)]['columns'].values)
View Code
包含下面的用来画图:
1 import matplotlib.pyplot as plt 2 lr_plt=[] 3 ridge_plt=[] 4 svr_plt=[] 5 RF_plt=[]
View Code
正常的计算mse(label没有移动):
1 from sklearn.linear_model import LinearRegression,Lasso,Ridge 2 from sklearn.preprocessing import MinMaxScaler,StandardScaler,MaxAbsScaler 3 from sklearn.metrics import mean_squared_error as mse 4 from sklearn.svm import SVR 5 from sklearn.ensemble import RandomForestRegressor 6 import xgboost as xgb 7 #最大最小归一化 8 mm = MinMaxScaler() 9 10 lr = Lasso(alpha=0.5) 11 lr.fit(mm.fit_transform(sort_data1[new_fea]), sort_target1) 12 lr_ans = lr.predict(mm.transform(sort_data2[new_fea])) 13 lr_mse=mse(lr_ans,sort_target2) 14 lr_plt.append(lr_mse) 15 print('lr:',lr_mse) 16 17 ridge = Ridge(alpha=0.5) 18 ridge.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 19 ridge_ans = ridge.predict(mm.transform(sort_data2[new_fea])) 20 ridge_mse=mse(ridge_ans,sort_target2) 21 ridge_plt.append(ridge_mse) 22 print('ridge:',ridge_mse) 23 24 svr = SVR(kernel='rbf',C=100,epsilon=0.1).fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 25 svr_ans = svr.predict(mm.transform(sort_data2[new_fea])) 26 svr_mse=mse(svr_ans,sort_target2) 27 svr_plt.append(svr_mse) 28 print('svr:',svr_mse) 29 30 estimator_RF = RandomForestRegressor().fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 31 predict_RF = estimator_RF.predict(mm.transform(sort_data2[new_fea])) 32 RF_mse=mse(predict_RF,sort_target2) 33 RF_plt.append(RF_mse) 34 print('RF:',RF_mse) 35 36 bst = xgb.XGBRegressor(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=0, 37 subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1) 38 bst.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 39 bst_ans = bst.predict(mm.transform(sort_data2[new_fea])) 40 print('bst:',mse(bst_ans,sort_target2))
View Code
先让label移动5个:
1 change_sort_data2 = sort_data2.shift(periods=5,axis=0) 2 change_sort_target2 = sort_target2.shift(periods=-5,axis=0) 3 change_sort_data2.dropna(inplace=True) 4 change_sort_target2.dropna(inplace=True)
View Code
让label以5的倍数移动:
1 mm = MinMaxScaler() 2 3 for i in range(0,45,5): 4 print(i) 5 lr = Lasso(alpha=0.5) 6 lr.fit(mm.fit_transform(sort_data1[new_fea]), sort_target1) 7 lr_ans = lr.predict(mm.transform(change_sort_data2[new_fea])) 8 lr_mse=mse(lr_ans,change_sort_target2) 9 lr_plt.append(lr_mse) 10 print('lr:',lr_mse) 11 12 ridge = Ridge(alpha=0.5) 13 ridge.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 14 ridge_ans = ridge.predict(mm.transform(change_sort_data2[new_fea])) 15 ridge_mse=mse(ridge_ans,change_sort_target2) 16 ridge_plt.append(ridge_mse) 17 print('ridge:',ridge_mse) 18 19 svr = SVR(kernel='rbf',C=100,epsilon=0.1).fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 20 svr_ans = svr.predict(mm.transform(change_sort_data2[new_fea])) 21 svr_mse=mse(svr_ans,change_sort_target2) 22 svr_plt.append(svr_mse) 23 print('svr:',svr_mse) 24 25 estimator_RF = RandomForestRegressor().fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 26 predict_RF = estimator_RF.predict(mm.transform(change_sort_data2[new_fea])) 27 RF_mse=mse(predict_RF,change_sort_target2) 28 RF_plt.append(RF_mse) 29 print('RF:',RF_mse) 30 31 # bst = xgb.XGBRegressor(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=0, 32 # subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1) 33 # bst.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) 34 # bst_ans = bst.predict(mm.transform(change_sort_data2[new_fea])) 35 # print('bst:',mse(bst_ans,change_sort_target2)) 36 37 change_sort_target2=change_sort_target2.shift(periods=-5,axis=0) 38 change_sort_target2.dropna(inplace=True) 39 change_sort_data2 = change_sort_data2.shift(periods=5,axis=0) 40 change_sort_data2.dropna(inplace=True)
View Code
结果如图:
然后就是画图了;
1 plt.plot(x,lr_plt,label='lr',color='r',marker='o') 2 plt.plot(x,ridge_plt,label='ridge',color='b',marker='o') 3 plt.plot(x,svr_plt,label='svr',color='g',marker='o') 4 plt.plot(x,RF_plt,label='RF',color='y',marker='o') 5 plt.legend() 6 plt.show()
View Code
舍去lr,并扩大纵坐标:
1 #plt.plot(x,lr_plt,label='lr',color='r',marker='o') 2 plt.plot(x,ridge_plt,label='ridge',color='b',marker='o') 3 plt.plot(x,svr_plt,label='svr',color='g',marker='o') 4 plt.plot(x,RF_plt,label='RF',color='y',marker='o') 5 plt.legend() 6 plt.show()
View Code
其他模型只需将MinMaxScaler改为MaxAbsScaler,standarScaler即可;
总的来说,label的移动会使得mse增加,大约在label=10时候差异最小,结果最理想;
转载于:https://www.cnblogs.com/songorz/p/10005356.html
机器学习预测时label错位对未来数据做预测相关推荐
- joblib 读取模型后对单条数据做预测并解决Reshape your data either using array报错
用joblib读取模型并对模型做预测: # 这里假设模型已经训练完成,就不训练了 import joblib model = joblib.load("kn_model.m") p ...
- 使用SPSS做时间序列预测时,如何自定义日期型数据周期(时间数据周期)?
使用SPSS做时间序列预测时,如何自定义日期型数据周期/时间数据周期? 问题的产生 解决方案的来源:SPSS自带的语法参考 DATE命令的基本使用方法 两个示例讲解 写好命令以后如何运行 需要注意的点 ...
- 机器学习-预剪枝和后剪枝
一棵完全生长的决策树会面临一个很严重的问题,即过拟合.当模型过拟合进行预测时,在测试集上的效果将会很差.因此我们需要对决策树进行剪枝, 剪掉一些枝叶,提升模型的泛化能力. 决策树的剪枝通常有两种方法, ...
- BP神经网络如何用历史数据预测未来数据
本文主要为了解决如何用BP神经网络由历史的目标数据与因素数据去预测未来的目标数据.Bp神经网络的具体算法步骤与代码在网络上已经有很多大佬写过了,本文提供了将其应用于预测的方法.(附简单直接可使用代码) ...
- 预见未来 | 数据智能的现在与未来
编者按:自1998年成立以来,微软亚洲研究院一直致力于推动计算机科学领域的前沿技术发展.在建院20周年之际,我们特别邀请微软亚洲研究院不同领域的专家共同撰写"预见未来"系列文章,以 ...
- 机器学习算法(七): 基于LightGBM的分类预测(基于英雄联盟10分钟数据判断红蓝方胜负)
机器学习算法(七)基于LightGBM的分类预测 1. 实验室介绍 1.1 LightGBM的介绍 LightGBM是2017年由微软推出的可扩展机器学习系统,是微软旗下DMKT的一个开源项目,由20 ...
- 机器学习的第一个难点,是数据探索性分析
作者 | 陆春晖 责编 | 寇雪芹 头图 | 下载于视觉中国 当我们在进行机器学习领域的学习和研究时,遇到的第一个难点就是数据探索性分析(Exploratory Data Analysis).虽然从各 ...
- 《Science》杂志:机器学习究竟将如何影响人类未来的工作? 2018-01-11 Smiletalker AI科技评论 AI 科技评论按:人工智能、机器学习相关技术已经多次刷新了人们对于「计算机能
<Science>杂志:机器学习究竟将如何影响人类未来的工作? 2018-01-11SmiletalkerAI科技评论 AI 科技评论按:人工智能.机器学习相关技术已经多次刷新了人们对于「 ...
- 开篇词:中文自然语言处理——未来数据领域的珠穆朗玛峰
人工智能或许是人类最美好的梦想之一.追溯到公元前仰望星空的古希腊人,当亚里士多德为了解释人类大脑的运行规律而提出了联想主义心理学的时候,他恐怕不会想到,两千多年后的今天,人们正在利用联想主义心理学衍化 ...
- matlab 预测值一样,matlab BP神经网络建造如下,预测时,预测值反归一化报错,求大神指教!!!!!...
data=xlsread('Book1.xlsx','sheet1');%读取表格中的数据 input=data(:,1:3);%将前三列作为输入 output=data(:,4:6);%后三列作为输 ...
最新文章
- oracle date怎么用,Oracle to_date的使用方法
- 找工作实用书《LeetCode 题解》(附pdf)
- python网络爬虫---selenium的使用
- 深度学习入门课程学习笔记06 反向传播
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
- cocos2x (c++/lua) spine 文件的预加载
- 抽象类 VS 接口 (3)
- 4周,从入门小白到爬虫老炮儿,薪资水平超过60% IT新手!
- java集合是wftc_Java集合
- Linux:多进程、多线程服务器的实现解析(有图有代码有真相!!!)
- 如何构建数据指标体系?
- python 发送 smtp
- stm32mp1 Cortex M4开发篇6:TIM定时器中断
- ubuntu18安装wine QQ——2021.11.9
- 小米笔记本安装Win 10历程
- Python常用中文分词库:jieba
- ThinkPHP多语言包功能使用
- Spring Core 之 Validation, Data Binding(校验和数据绑定)
- 论文笔记——Contextual Multi-armed Bandit Algorithm for Semiparametric(半参数) Reward Model
- java降噪_耳机降噪技术有哪几种?
热门文章
- 纯前端项目文件部署到远程服务器
- 自定义ckeditor图片上传插件
- 基于JAVA藏宝阁游戏交易系统计算机毕业设计源码+系统+lw文档+部署
- app store android退款,买完 App、游戏内购就后悔了?手把手教你如何申请 App Store 退款...
- c 添加mysql表单的一行数据类型,MySQL InnoDB表行格式及压缩
- Spring AOP报错Set ‘exposeProxy‘ property on Advised to ‘true‘ to make it available问题
- HDMI转VGA转换器 HDMI转接头,VGA转换器
- 可操作 转载 安装cpan软件包软件包
- Vue:成功解决[Vue warn]: Failed to resolve directive: modle (found in Anonymous)
- IP技术 -- 6 Telemetry