精华内容
下载资源
问答
  • 机械行业周报:汽车、3C等行业用电量同比增加,利好激光设备、工业自动化.pdf
  • 全文把2006~2012年的用电量作为建模数据,2013年头3个月的数据拿来检验预测效果,并预测了未来一年安徽省全社会用电量和工业用电量。第一部分分析了全社会2006~2012年的月用电量时间序列,通过游程检验确定其为不...
  • 一、简介 基于matlab Elman神经网络的...%% 选取训练数据和测试数据 for i=1:6 p(i,:)=[a(i,:),a(i+1,:),a(i+2,:)]; end % 训练数据输入 p_train=p(1:5,:); % 训练数据输出 t_train=a(4:8,:); % 测试数据输入 p_te

    一、SVM简介

    机器学习的一般框架:
    训练集 => 提取特征向量 => 结合一定的算法(分类器:比如决策树、KNN)=>得到结果
    1 SVM定义
    支持向量机(support vector machines,SVM)是一种二分类模型,它将实例的特征向量映射为空间中的一些点,SVM 的目的就是想要画出一条线,以 “最好地” 区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。SVM 适合中小型数据样本、非线性、高维的分类问题。
    在这里插入图片描述
    SVM 最早是由 Vladimir N. Vapnik 和 Alexey Ya. Chervonenkis 在1963年提出,目前的版本(soft margin)是由 Corinna Cortes 和 Vapnik 在1993年提出,并在1995年发表。深度学习(2012)出现之前,SVM 被认为机器学习中近十几年来最成功,表现最好的算法。

    2 SVM 基本概念
    将实例的特征向量(以二维为例)映射为空间中的一些点,如下图的实心点和空心点,它们属于不同的两类。SVM 的目的就是想要画出一条线,以“最好地”区分这两类点,以至如果以后有了新的点,这条线也能做出很好的分类。

    Q1:能够画出多少条线对样本点进行区分?
    答:线是有无数条可以画的,区别就在于效果好不好,每条线都可以叫做一个划分超平面。比如上面的绿线就不好,蓝线还凑合,红线看起来就比较好。我们所希望找到的这条效果最好的线就是具有 “最大间隔的划分超平面”。

    Q2:为什么要叫作“超平面”呢?
    答:因为样本的特征很可能是高维的,此时样本空间的划分就不是一条线了。

    Q3:画线的标准是什么?/ 什么才叫这条线的效果好?/ 哪里好?
    答:SVM 将会寻找可以区分两个类别并且能使间隔(margin)最大的划分超平面。比较好的划分超平面,样本局部扰动时对它的影响最小、产生的分类结果最鲁棒、对未见示例的泛化能力最强。

    Q4:间隔(margin)是什么?
    答:对于任意一个超平面,其两侧数据点都距离它有一个最小距离(垂直距离),这两个最小距离的和就是间隔。比如下图中两条虚线构成的带状区域就是 margin,虚线是由距离中央实线最近的两个点所确定出来的(也就是由支持向量决定)。但此时 margin 比较小,如果用第二种方式画,margin 明显变大也更接近我们的目标。
    在这里插入图片描述
    在这里插入图片描述
    Q5:为什么要让 margin 尽量大?
    答:因为大 margin 犯错的几率比较小,也就是更鲁棒啦。

    Q6:支持向量是什么?
    答:从上图可以看出,虚线上的点到划分超平面的距离都是一样的,实际上只有这几个点共同确定了超平面的位置,因此被称作 “支持向量(support vectors)”,“支持向量机” 也是由此来的。

    二、部分源代码

    clear all;
    clc ;
    close all
    %得到文件路径,找到所有.dat格式的文件
    sh = xlsread('data.xlsx','Sheet1','B2:B38');
    addpath('./libsvm-3.20');%%添加工具箱
    %extract data
    [m,n] = size(sh);
    n1 = round(length(sh)*0.7);%训练样本大小
    ts = sh(1:n1,1);%训练数据
    tsx = sh(n1+1:m,1);%测试数据
    original = sh(n1+1:end,:);%原始测试数据
    %归一化处理
    [TS,TSps] = mapminmax(ts);
    [TSX,TSXps] = mapminmax(tsx);
    [TSX_zong,TSXps_zong] = mapminmax(sh);
    %split the data into training and testing
    
    train_label = TS(1:n1,:);%训练数据标签
    train_data = TS(1:n1,:);%训练数据
    test_label = TSX(1:end,:);%测试数据标签
    test_data = TSX(1:end,:);%测试数据
    test_label_zong = TSX_zong(1:end,:);%测试数据标签
    test_data_zong = TSX_zong(1:end,:);%测试数据
    % Find the optimize value of c,g paramter
    % Approximately choose the parameters:
    % the scale of c is 2^(-5),2^(-4),...,2^(10)
    % the scale of g is 2^(-5),2^(-4),...,2^(5)
    [bestmse,bestc,bestg] = svmregress(train_label,train_label,-5,10,-5,5,3,1,1,0.0005);
    
    % Display the approximate result
    disp('Display the approximate result');
    str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);
    disp(str);
    %Do training by using svmtrain of libsvm
    cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01'];
    model = svmtrain(train_label,train_data,cmd);%训练
    %Do predicting by using svmpredict of libsvm
     clear all;
    clc ;
    close all
    %得到文件路径,找到所有.dat格式的文件
    sh = xlsread('data.xlsx','Sheet1','B2:B38');
    addpath('./libsvm-3.20');%%添加工具箱
    %extract data
    [m,n] = size(sh);
    n1 = round(length(sh)*0.7);%训练样本大小
    ts = sh(1:n1,1);%训练数据
    tsx = sh(n1+1:m,1);%测试数据
    original = sh(n1+1:end,:);%原始测试数据
    %归一化处理
    [TS,TSps] = mapminmax(ts);
    [TSX,TSXps] = mapminmax(tsx);
    [TSX_zong,TSXps_zong] = mapminmax(sh);
    %split the data into training and testing
    
    train_label = TS(1:n1,:);%训练数据标签
    train_data = TS(1:n1,:);%训练数据
    test_label = TSX(1:end,:);%测试数据标签
    test_data = TSX(1:end,:);%测试数据
    test_label_zong = TSX_zong(1:end,:);%测试数据标签
    test_data_zong = TSX_zong(1:end,:);%测试数据
    % Find the optimize value of c,g paramter
    % Approximately choose the parameters:
    % the scale of c is 2^(-5),2^(-4),...,2^(10)
    % the scale of g is 2^(-5),2^(-4),...,2^(5)
    [bestmse,bestc,bestg] = svmregress(train_label,train_label,-5,10,-5,5,3,1,1,0.0005);
    
    % Display the approximate result
    disp('Display the approximate result');
    str = sprintf( 'Best Cross Validation MSE = %g Best c = %g Best g = %g',bestmse,bestc,bestg);
    disp(str);
    %Do training by using svmtrain of libsvm
    cmd = ['-c ', num2str(bestc), ' -g ', num2str(bestg) , ' -s 3 -p 0.01'];
    model = svmtrain(train_label,train_data,cmd);%训练
    %Do predicting by using svmpredict of libsvm
    

    三、运行结果

    在这里插入图片描述

    四、matlab版本及参考文献

    1 matlab版本
    2014a

    2 参考文献
    [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
    [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
    [3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013.
    [4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013.
    [5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.

    展开全文
  • 环保与公用事业周报:中电联发布2018年1-5月份电力工业运行简况,5月份全社会用电量同比增长11.4%.pdf
  • 暂无描述
  • 2018 年已经过半,各省又开始比考试成绩了,考试...答案便是:因为你用电量不够高!!! 有托着腮帮子怀疑的,请看下国家电网的大屏分析,看看右下方的数据是不是我说的答案。 沉稳内敛型 缤纷炫酷型(怎么做...

    2018 年已经过半,各省又开始比考试成绩了,考试科目就叫 GDP,排在前面的自然扬眉吐气,排在后面的,就灰头土脸了,同样都是大省份,同样都是直辖市,为啥你排名靠前,我却垫了底呢?来,让小编给各位揭晓答案(此处应该有“咣咣咣”三声响)。

    答案便是:因为你用电量不够高!!!

    有托着腮帮子怀疑的,请看下国家电网的大屏分析,看看右下方的数据是不是我说的答案。

    1png
    沉稳内敛型

    ddd4png

    缤纷炫酷型(怎么做更炫酷,请看文章结尾 )

    注:以上都是基于刚刚发布不久还冒热气的真实数据做的统计。

    其实,明眼人一看就知道小编这个答案是完全经不起推敲的,是小编为了吸引大家眼球硬生生的给捏出来的答案,但是这个答案也是有一定道理的。就像,我们说好学生用的练习本多是一个道理,不一定你用的练习本多就可以成为好学生,但是用的少的,大概率成不了好学生。

    好了,我们就继续就这个话题,继续看看电网的电力统计还能帮我们分析出哪些信息和规律。

    一个主题大屏包括 n 多小的模块组件。就今天的主题,我们分为上半年全国各省用电情况统计、用电总量统计及与上年对比、全国全社会用电量情况(分各产业与居民用电)、用电大省的经济发展情况(用电前五省份及 GDP 排名情况)、下半年用电预测及上半年发电情况分布等七个模块。根据数据分析形式分别采用地图、柱图、仪表盘、折线等统计图呈现,使其更直观、更好理解。

    润乾报表怎么做大屏?!easy,无需多想,干就是了。

    注:以下所用数据均来自国家能源局、统计局。

    各省用电情况分析

    以地图形式呈现各省的用电情况,用电量越高 颜色越深。

    2png

    做法:

    1,准备数据

    内建数据集,增加”地区”和”电量”字段,把获取到的各省用电量数据依次录入

    3png

    2,设置统计图及表达式

    报表单元格内右–第三方统计–打开模板,选择“地图”

    4png

    依次设置左侧参数部分表达式:

     
    dataname:数据集.select@r(地区,,,地区) datavalue:H1{}  此处的H1内为扩展格扩展的所有用电量字段值,第一行隐藏 seriesName:[“用电量”] legend:[“用电量”]

    3,预览效果

    5png

    其中标题与副标题均可在地图中设置,包括其他样式(如左下的 dataRange、地图用色、是否显示数值等)可通过 echarts 的属性处理。

    注:以下统计图均采用第三方 echarts2 统计图,不再说明。

    2018 年上半年用电总量统计、同比

    以仪表盘形式呈现 2018 上半年、2017 上半年及 2017 全年用电总量。

    6png

    直观能看出,2018 年上半年已用电 32291 亿千瓦时,相比 17 年的上半年同比增长 9.43%。2017 年全年用电 63077 亿千瓦时,根据往年及 2018 上半年的增长情况,预计 2018 年全年用电量要逼近 70000 亿千瓦时。

    做法:

    1,准备数据

    仪表盘理论上本身只需要一个 value 值,所以无需准备数据集,可以直接在统计图中定义。

    注:实际还需要一个总的值,决定指针的位置。

    2,仪表盘设置

    该模块下显示 3 个数据,所以依次在相连的三个单元格内如下操作:

    报表单元格内右–第三方统计–打开模板,选择“仪表盘”

    以 2018 年上半年为例  

    7png8png

      Series 内 max 设置为预估的 2018 年全年用电,data 内为上半年实际用电量。

    3,预览效果

    9png

    全社会用电情况统计(即第一、二、三产业与居民生活用电)

    以柱图形式呈现,更直观对比各产业及居民生活用电的增长情况。

    10png

    分产业看,第一产业用电量 328 亿千瓦时,同比增长 10.3%;第二产业用电量 22336 亿千瓦时,同比增长 7.6%;第三产业用电量 5071 亿千瓦时,同比增长 14.7%。城乡居民生活用电量 4555 亿千瓦时,同比增长 13.2%。

    第二产业为用电大户,这也是产业类型决定,占到社会用电的 70%。 第三产业涵盖行业较多,相比城乡居民用电总量高 11% 左右。另外,受天气影响及人民生活水平改善,居民用电也同比增长 13.2%,增长速度很快。

    做法:

    1,准备数据

    可以用报表数据集,当然因数据较少,直接定义在图形里完全没问题。

    2,柱图设置

    第三方统计图中选择“柱图”,其中

    11png

    12png

    13png

    分别对应系列、分类轴及各系列对应数据。

    3,预览效果

    14png

    注:以下几个模块与柱图均属一个图形系列,不再啰嗦具体做法,仅做分析。

    用电大省经济发展情况

    以条形图呈现 2017 年全年及 2018 年上半年用电量前五的省份及 GDP 的排名情况。

    15png

    作为观察经济走势的风向标的指标,用电量占据一席。参考刚刚出炉的 2018 年上半年 GDP 各省排名情况,用电量前五的省份,前四位 GDP 排行也依次排在前四。第五位的河北,其用电量也在第七(环保专家又发话了?重工业又被关停了? 娱乐一下)。

    所以,“要想 GDP 数据好,用电绝对不能少”还真不是口号,真的像一对夫妻相辅相成。

    本人作为一个普通老百姓,息息相关的城乡居民生活用电增长可真不少,估计这里面天气因素(今年初的寒潮和入夏以来的蒸、烧烤天气)功不可没,当然也有老百姓消费升级的拉动(原来骑自行车解决的短途交通问题,现在都懒得换成平衡车、便携折叠电动车了;刷个牙也都电动了;家庭空调 24 小时也不关机了,都是电(qian)啊)。

    2018 年上半年发电情况

    包括上半年总发电量,同比及累计增长,各月份发电量及各发电类型(火力、水力、风力、核能、太阳能)发电总量情况

    各月发电量、同比及累计增长

    16png

    各发电类型发电量统计

    17png

    从增长情况看,充足的发电能力保障了社会用电。国家在保证充足供电情况下,为了环保考虑,不断促进新能源发电的发展。从发电类型看,太阳能、水力等发电占比不断扩大。这也看出国家在治理环境污染方面做出的巨大努力。

    2018 年下半年用电预测

    根据 2018 年上半年的用电情况及同比增长情况,以折线图形式呈现下半年个月的预测用电量,该数据可以为发电计划做参考。

    18png

    根据上半年用电、往年下半年用电增长情况,这里预测了下下半年各月的可能用电情况,总量接近 70000 亿千瓦时。下半年能否提供充足保障?让我们拭目以待!!

    整体布局

    再来聊聊怎么摆楞这些组件,本例采用视觉美观的对称(基本)结构,根据呈现的业务数据合理布局各模块。其中的地图作为焦点,显示各省用电情况,观感上大气,数据也清晰明了。

    另外,整个大屏也并非所有的必须都是数据,还可增加符合主题的图片等美化效果,当然占比要适当。

    png

    温馨提示:对于大屏展示,整体及各组件的大小要根据实际的情况做调整,才能与实际展示设备更匹配。

    设计好布局后,将前面做好的组件一一放好即可,对应调整好大小  使其达到最协调、最美的展示效果。

    20png

    嗯,还是挺漂亮的。

    配色说明

    1,背景色(当然可以用图片)的选取

    整体采用深蓝色,一是有科技感,二是大屏显示不会刺眼(小秘密:屏幕亮度高的话,用浅色会亮瞎你的小眼儿)。

    组件背景采用亮度稍高的蓝色(#264C70),和大背景对比,不会跳色,承接自然。同时避免用太“脏”,比如深灰色系等,虽然不刺眼,但看起来不舒服。

    2,标题字体用色  

    (1)主标题,采用白色(#FFF),和其他配色相比有鹤立鸡群的感觉,焦点。。。

    (2)组件标题,文字及图作为数据展示的重点,自然要突出一些,要抓住看客的眼球。此例中采用微软雅黑的亮蓝色(#87CEFA),文字前配上圆形图标,更能引起看客的注意。有哪些组件也是一目了然,观看者能快捷找到关注的内容。

    3,统计图配色

    整体还是与背景色搭配,选择相融的色系,还是避免跳色(不是说跳色不好,如果有特殊的数据还是有跳色更好,比如来个红色突出一些预警数据)。

    标签文字:#679DBF

    柱或折线的颜色:[‘#32749C’,‘#2F8CC0’,‘#75B6DD’,‘#4EB3AD’,‘#028688’]

    能不能更炫酷?!

    可以,开篇已剧透!

    这里的炫酷是相对于沉稳内敛型来说,我们可以通过简单调换颜色、增加效果背景图等来使得整体更活泼、靓丽。

    温习一下图

    ddd4png

    怎么改?! 真的特简单。

    1、 整体背景色由背景图替代
    好看的背景图,可以将各组件衬托的更完美。
    首先找或问美工要到合适的图片,通过报表工具菜单栏,报表 -- 报表属性 -- 背景图 完成添加背景图。

    2、 调整统计图柱线用色

    原配色列表为 [‘#32749C’,‘#2F8CC0’,‘#75B6DD’,‘#4EB3AD’,‘#028688’],替换一组为 [‘#32749C’,‘#2F8CC0’,‘#75B6DD’,‘#4EB3AD’,‘#028688’]。

    以“中下”位置的环形图为例,编辑统计图,找到

    dd5png

    替换 color 值,齐活!

    3、 调整轴标签值配色

    包含 X、Y 轴,以位置“左下”的柱图为例,找到

    dd6png

    直接替换成想要的(应该是更合适的)颜色即可。
    通过以上简单 3 小步,轻松灵活换风格,真心不由得想给自己个赞。

    总结

    “骗”大家进来了解了用电量和 GDP 的关系(脑洞开没开,涨没涨知识?!),其实更重要的是让大家了解下润乾报表也是可以处理大屏需求的(di),并且同样做的很美。 对于大屏的制作,只要下足功夫,效果肯定是可以接近完美的。 当然最好给配个专门的美工人员,给开发人员们搞搞配色、布局等样式问题,不然还有另外一个口号“真想大屏做的好,时间必定花不少”。

    看完之后还不知道如何下手?没关系,企业 QQ:800025723 欢迎随时骚扰。



    作者:bubblegum
    链接:http://c.raqsoft.com.cn/article/1536634816208?r=xiaohuihui
    来源:乾学院
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 时间序列预测14:CNN 实现用电量/发电量预测

    千次阅读 多人点赞 2020-04-10 11:39:39
    与其他机器学习算法不同,卷积神经网络能够从序列数据中自动学习特征,支持多变量数据,并可直接输出用于多步预测的向量。一维CNN已被证明可以很好地执行,甚至在具有挑战性的序列预测问题上也能达到最新的结果。...

    【时间序列预测/分类】 全系列60篇由浅入深的博文汇总:传送门



    前言

    与其他机器学习算法不同,卷积神经网络能够从序列数据中自动学习特征,支持多变量数据,并可直接输出用于多步预测的向量。一维CNN已被证明可以很好地执行,甚至在具有挑战性的序列预测问题上也能达到最新的结果。

    计划用两篇文章介绍如何开发 1D CNN 进行多步时间序列预测。主要内容如下:

    • 如何为单变量数据开发多步时间序列预测的CNN模型;
    • 如何为多变量数据开发多通道多步时间序列预测的CNN模型;
    • 如何为多变量数据开发多头多步时间序列预测的CNN模型。

    本文介绍如何为单变量数据开发多步时间序列预测的CNN模型。


    代码环境:

    • python 3.7.6
    • tensorflow 2.1.0
    • keras 2.3.1

    代码在 jupyter notebook编写。完整代码部分对比较难理解的地方做了注释,应该很容易理解。


    适用于多时间步预测的CNN模型

    数据处理和模型评估部分之前的文章已经介绍过了,本文不再赘述。之前的文章:传送门


    卷积神经网络(CNN)可用于多步时间序列预测。CNN也可用于递归或直接预测策略,在该策略中,模型进行一步预测,并为每个要预测的时间步开发一个模型。或者,CNN可以用来预测整个输出序列,作为整个矢量的一步预测。这是前馈神经网络的普遍优势。使用CNN的一个重要好处是:支持多个1D输入以进行预测。如果多步输出序列是一个以上输入序列的函数,则此功能很有用。这可以使用两种不同的模型配置来实现。

    • 多个输入通道(Multiple Input Channels):每个输入序列作为一个单独的通道读取,可类比图像的不同颜色通道(如RGB)。
    • 多个输入头(Multiple Input Heads):每个输入序列由不同的CNN子模型读取,并且模型的内部表征在解释之前先进行组合再进行预测。按个人理解,命名为子模型异构。

    本文介绍三种业务场景下的CNN模型:

    • 单变量输入数据的多步时间序列预测CNN模型;
    • 多变量多输入通道的多步时间序列预测CNN模型;
    • 多变量子模型异构的多步时间序列预测CNN模型;

    这些模型会在家庭用电量数据集上进行演示。通过之前的文章可知,如果一个模型比一个总RMSE约为465千瓦的七天预测朴素模型的RMSE小,就可以认为该模型是可用的。本文示例并没有调整超参数以获得最佳性能,所选择的结构和超参数都经过了小的尝试和误差。考虑到模型的随机性,最好对模型进行多次评估,并输出测试数据集的平均性能。


    1 单变量多步预测 CNN 模型

    1.1 业务需求

    开发卷积神经网络进行多步时间序列预测,该预测使用上篇文章中转换好的日功耗单变量序列。业务需求:给定之前几天的总日耗电量,预测下一个标准周(周天开始,周六结束)的日耗电量。


    1.2 1D CNN 模型

    一维CNN模型要求输入数据的shape为:[样本,时间步长,特征]([samples, timesteps, features])。一个样本(sample)包含一周7天的日总有功功率,即滑动窗口的宽度为7;特征只有1个(原数据集有七个特征,不包含日期和时间),即7天的日总有功功率序列。训练数据集有159周的数据(将原数据集的每分钟采样一次的数据,重采样成每天采样数据,然后把前三年的作为训练集,最后一年的数据作为测试集,截取的都是完整周,丢弃不完整周的日数据。相关细节👓请看这里),因此训练集的shape为:[159,7,1]

    将原数据集(每分钟采样一次)重采样成每天的数据,新数据的shape为:

    (1442, 8)
    

    这种格式的数据将使用之前的标准周来预测下一个标准周。问题是对于神经网络来说,159个训练样本是远远不够的。创建更多训练数据的一种方法是在训练期间做如下更改:根据之前的7天预测未来7天,而不考虑是否为标准周,可以理解滑动窗口的步长由7变为1,相当于增加了样本数(samples),特征数(features)不变,即行数增加,列数不变。而不是,相当于人为地在原数据集每两个样本之间又增加了6个新样本。再说详细一点就是,现在标准周预测数据相当于只有159行,2列,第一行是前一周的日总有功功率及期望预测输出(下一周的数据),第二行是之后一周的日总有功功率及期望输出预测(下下周的数据)…以此类推,最后行数(样本数变为159×7行)。原来的训练样本是使用当前一个标准周(周天开始,周六结束)的数据预测下一个标准周;使用下一个标准周预测下下个标准周…以此类推。而现在是放开标准周的限制来预测,比如从周一开始,周天结束(预测的总天数不变,同样是七天);周二开始,周一结束;周三开始,周二结束…以此类推。细说就是,由通过之前一周中,从周一开始到周天结束的非标准周的预测结果,相当于添加一行(一个样本);接着添加从周二开始到下周周一结束的非标准周预测结果,又相当于添加了一行…以此类推。测试集不做改变,仍然使用标准周进行预测。经过以上分析,训练数据的shape由 [159,7,1] 变为 [159*7,7,1]。其实最关键的还是段首说的那句话:滑动窗口的滑动步长由7变为1,相当于增加了样本数,特征数不变。画个图说明一下数据集扩充的思路:
    在这里插入图片描述
    代码实现:

    def sliding_window(train, sw_width=7, in_start=0):
        '''
        该函数实现窗口宽度为7、滑动步长为1的滑动窗口截取序列数据
        '''
        data = train.reshape((train.shape[0] * train.shape[1], train.shape[2])) # 将以周为单位的样本展平为以天为单位的序列
        X, y = [], []
        
        for _ in range(len(data)):
            in_end = in_start + sw_width
            out_end = in_end + sw_width
            
            # 保证截取样本完整,最大元素索引不超过原序列索引,则截取数据;否则丢弃该样本
            if out_end < len(data):
                # 训练数据以滑动步长1截取
                train_seq = data[in_start:in_end, 0]
                train_seq = train_seq.reshape((len(train_seq), 1))
                X.append(trian_seq)
                y.append(data[in_end:out_end], 0)
            in_start += 1
            
        return np.array(X), np.array(y)
    

    在训练集上运行该函数,将159个样本转换为1099个样本。转换后,数据集的形状(shape)为 X=[1099, 7, 1]y=[1099, 7]。接下来,可以在训练数据上定义和拟合CNN模型。这个多步时间序列预测问题是一个自回归问题(只有一个特征,日总有功功率)。

    较少的特征和数据意味着只需要一个简单的模型即能满足业务需求。定义参数配置为 filters=16kernel_size=3 的卷积层。这意味着7天的输入序列将通过卷积操作一次读取3个时间步长的值,该操作将执行16次。池化层把这些特征映射(feature maps)缩小1/4,之后将内部表示压缩为一个长向量。然后,全连接的层对其进行解释,最后在输出层输出序列预测结果。

    使用均方误差损失函数(mse),因为它与我们选择的RMSE误差度量很好地匹配。使用随机梯度下降算法Adam,epochs=20,batch_size=4。该算法的小批量和随机性意味着同一个模型在每次训练时将学习输入到输出的略有不同的映射。这意味着评估模型时,结果可能会有所不同。可以尝试多次运行模型并计算模型性能的平均值。


    1.3 完整代码

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    
    # 设置中文显示
    plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei']
    plt.rcParams['axes.unicode_minus'] = False
    
    import math
    import sklearn.metrics as skm
    from tensorflow.keras.models import Sequential
    from tensorflow.keras.layers import Dense, Flatten
    from tensorflow.keras.layers import Conv1D,MaxPooling1D
    
    def split_dataset(data):
        '''
        该函数实现以周为单位切分训练数据和测试数据
        '''
        # data为按天的耗电量统计数据,shape为(1442, 8)
        # 测试集取最后一年的46周(322天)数据,剩下的159周(1113天)数据为训练集,以下的切片实现此功能。
        train, test = data[1:-328], data[-328:-6]
        train = np.array(np.split(train, len(train)/7)) # 将数据划分为按周为单位的数据
        test = np.array(np.split(test, len(test)/7))
        return train, test
    
    def evaluate_forecasts(actual, predicted):
        '''
        该函数实现根据预期值评估一个或多个周预测损失
        思路:统计所有单日预测的 RMSE
        '''
        scores = list()
        for i in range(actual.shape[1]):
            mse = skm.mean_squared_error(actual[:, i], predicted[:, i])
            rmse = math.sqrt(mse)
            scores.append(rmse)
        
        s = 0 # 计算总的 RMSE
        for row in range(actual.shape[0]):
            for col in range(actual.shape[1]):
                s += (actual[row, col] - predicted[row, col]) ** 2
        score = math.sqrt(s / (actual.shape[0] * actual.shape[1]))
        print('actual.shape[0]:{}, actual.shape[1]:{}'.format(actual.shape[0], actual.shape[1]))
        return score, scores
    
    def summarize_scores(name, score, scores):
        s_scores = ', '.join(['%.1f' % s for s in scores])
        print('%s: [%.3f] %s\n' % (name, score, s_scores))
        
    def sliding_window(train, sw_width=7, n_out=7, in_start=0):
        '''
        该函数实现窗口宽度为7、滑动步长为1的滑动窗口截取序列数据
        '''
        data = train.reshape((train.shape[0] * train.shape[1], train.shape[2])) # 将以周为单位的样本展平为以天为单位的序列
        X, y = [], []
        
        for _ in range(len(data)):
            in_end = in_start + sw_width
            out_end = in_end + n_out
            
            # 保证截取样本完整,最大元素索引不超过原序列索引,则截取数据;否则丢弃该样本
            if out_end < len(data):
                # 训练数据以滑动步长1截取
                train_seq = data[in_start:in_end, 0]
                train_seq = train_seq.reshape((len(train_seq), 1))
                X.append(train_seq)
                y.append(data[in_end:out_end, 0])
            in_start += 1
            
        return np.array(X), np.array(y)
    
    def cnn_model(train, sw_width, in_start=0, verbose_set=0, epochs_num=20, batch_size_set=4):
        '''
        该函数定义 1D CNN 模型
        '''
        train_x, train_y = sliding_window(train, sw_width, in_start=0)
        
        n_timesteps, n_features, n_outputs = train_x.shape[1], train_x.shape[2], train_y.shape[1]
        
        model = Sequential()
        model.add(Conv1D(filters=16, kernel_size=3, activation='relu', 
                         input_shape=(n_timesteps, n_features)))
        
        model.add(MaxPooling1D(pool_size=2))
        model.add(Flatten())
        model.add(Dense(10, activation='relu'))
        model.add(Dense(units=n_outputs))
        
        model.compile(loss='mse', optimizer='adam', metrics=['accuracy'])
        print(model.summary())
        
        model.fit(train_x, train_y,
                  epochs=epochs_num, batch_size=batch_size_set, verbose=verbose_set)
        return model
    
    def forecast(model, pred_seq, sw_width):
        '''
        该函数实现对输入数据的预测
        '''
        data = np.array(pred_seq)
        data = data.reshape((data.shape[0]*data.shape[1], data.shape[2]))
        
        input_x = data[-sw_width:, 0] # 获取输入数据的最后一周的数据
        input_x = input_x.reshape((1, len(input_x), 1)) # 重塑形状[1, sw_width, 1]
        
        yhat = model.predict(input_x, verbose=0) # 预测下周数据
        yhat = yhat[0] # 获取预测向量
        return yhat
    
    def evaluate_model(model, train, test, sd_width):
        '''
        该函数实现模型评估
        '''
        history_fore = [x for x in train]
        predictions = list() # 用于保存每周的前向验证结果;
        for i in range(len(test)):
            yhat_sequence = forecast(model, history_fore, sd_width) # 预测下周的数据
            predictions.append(yhat_sequence) # 保存预测结果
            history_fore.append(test[i, :]) # 得到真实的观察结果并添加到历史中以预测下周
        
        predictions = np.array(predictions) # 评估一周中每天的预测结果
        score, scores = evaluate_forecasts(test[:, :, 0], predictions)
        return score, scores
    
    def model_plot(score, scores, days, name):
        '''
        该函数实现绘制RMSE曲线图
        '''
        plt.figure(figsize=(8,6), dpi=150)
        plt.plot(days, scores, marker='o', label=name)
        plt.grid(linestyle='--', alpha=0.5)
        plt.ylabel(r'$RMSE$', size=15)
        plt.title('CNN 模型预测结果',  size=18)
        plt.legend()
        plt.show()
        
    def main_run(dataset, sw_width, days, name, in_start, verbose, epochs, batch_size):
        '''
        主函数:数据处理、模型训练流程
        '''
        # 划分训练集和测试集
        train, test = split_dataset(dataset.values)
        # 训练模型
        model = cnn_model(train, sw_width, in_start, verbose_set=0, epochs_num=20, batch_size_set=4)
        # 计算RMSE
        score, scores = evaluate_model(model, train, test, sw_width)
        # 打印分数
        summarize_scores(name, score, scores)
        # 绘图
        model_plot(score, scores, days, name)
            
    if __name__ == '__main__':
        
        dataset = pd.read_csv('household_power_consumption_days.csv', header=0, 
                       infer_datetime_format=True, engine='c',
                       parse_dates=['datetime'], index_col=['datetime'])
        
        days = ['sun', 'mon', 'tue', 'wed', 'thr', 'fri', 'sat']
        name = 'cnn'
        
        sliding_window_width=7
        input_sequence_start=0
        
        epochs_num=20
        batch_size_set=4
        verbose_set=0
        
        main_run(dataset, sliding_window_width, days, name, input_sequence_start,
                 verbose_set, epochs_num, batch_size_set)
    

    输出:

    Model: "sequential_1"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv1d_1 (Conv1D)            (None, 5, 16)             64        
    _________________________________________________________________
    max_pooling1d_1 (MaxPooling1 (None, 2, 16)             0         
    _________________________________________________________________
    flatten_1 (Flatten)          (None, 32)                0         
    _________________________________________________________________
    dense_2 (Dense)              (None, 10)                330       
    _________________________________________________________________
    dense_3 (Dense)              (None, 7)                 77        
    =================================================================
    Total params: 471
    Trainable params: 471
    Non-trainable params: 0
    _________________________________________________________________
    None
    actual.shape[0]:46, actual.shape[1]:7
    cnn: [400.800] 429.3, 391.4, 346.6, 395.3, 404.1, 320.0, 494.9
    

    评估模型,打印一周预测的总体RMSE,以及一周中每天的每天RMSE。我们可以看到,在这种情况下,该模型比朴素模型性能更好,实现了400千瓦左右的整体RMSE,低于朴素模型实现的465千瓦。
    在这里插入图片描述

    每日RMSE图。该图显示,周二和周五的总有功功率比其他时间更容易预测,按标准周预测时,周六是最难预测的一天。

    可以把滑动窗口宽度设置为14 重新实验:

    sliding_window_width = 14
    main_run(dataset, sliding_window_width, days, name, input_sequence_start,
                 verbose_set, epochs_num, batch_size_set)
    

    输出:

    Model: "sequential_2"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv1d_2 (Conv1D)            (None, 12, 16)            64        
    _________________________________________________________________
    max_pooling1d_2 (MaxPooling1 (None, 6, 16)             0         
    _________________________________________________________________
    flatten_2 (Flatten)          (None, 96)                0         
    _________________________________________________________________
    dense_4 (Dense)              (None, 10)                970       
    _________________________________________________________________
    dense_5 (Dense)              (None, 7)                 77        
    =================================================================
    Total params: 1,111
    Trainable params: 1,111
    Non-trainable params: 0
    _________________________________________________________________
    None
    actual.shape[0]:46, actual.shape[1]:7
    cnn: [383.272] 390.3, 392.4, 348.3, 386.5, 374.8, 311.2, 462.5
    

    在这里插入图片描述

    可以看到RMSE降低了,关于超参数调整,以后的文章会介绍。


    下篇文章介绍多通道CNN模型和多头(子模型异构)CNN模型。


    参考:
    https://machinelearningmastery.com/how-to-develop-convolutional-neural-networks-for-multi-step-time-series-forecasting/


    展开全文
  • 数据分析-matlab入门-用电分析和音频频率分析0 序1、matlab2、数据分析入门实战1-用电分析1、入门实战2-音频...此项目中,将绘制各经济部门的用电量图 - 居民用电、商业用电和工业用电。 1.1.1 实操 数据加载及处理

    0 序

    来源-matlab入门之旅-学习记录

    1、matlab

    • 数据加载、加工、作图、修饰

    2、数据分析

    1、入门实战1-用电分析

    1.1 用电量分析

    此项目中,将绘制各经济部门的用电量图 - 居民用电、商业用电和工业用电。
    在这里插入图片描述

    1.1.1 实操

    1. 数据加载及处理
    load electricity
    usage
    %缺失值处理
    sage(2,3) = 2.74
    %%分别取出居民、商业、工业数据
    res = usage(:,1)
    comm = usage(:,2)
    ind = usage(:,3)
    % 时间,x轴
    yrs = 1991:2013
    
    1. 绘图及修饰(加图例和标题)
    • 创建一个包含所有三列数据的绘图。使用 yrs 作为 x 数据。
    • 将标题 “July Electricity Usage” 添加到现有绘图。
    • 用值 “res”、“comm” 和 “ind” 创建图例。
    plot(yrs,res,"b--")
    hold on
    plot(yrs,comm,"k:")
    plot(yrs,ind,"m-.")
    hold off
    
    title("July Electricity Usage")
    legend("res","comm","ind")
    

    在这里插入图片描述

    1.1.2 据图分析

    从图中可以很明显地看出,工业部门的用电量相当稳定,波动似乎不如居民部门和商业部门的大。

    2 、入门实战2-音频频率分析

    2.1 音频频率

    音频信号通常由许多不同的频率组成。例如,在音乐中,音符“中央 C”的基率为 261.6 Hz,并且大多数音乐都包含多个同时演奏的音符(或频率)。

    在此项目中,您将分析风琴演奏 C 和弦的频谱。

    C 和弦由 C (261.6 Hz)、E (329.6 Hz) 和 G (392.0 Hz) 音符组成。此频率图中突出显示的点对应于每个音符。

    在这里插入图片描述

    2.1.1实操

    C 和弦录音存储在一个名为 Cchord.mat 的文件中。此文件包含两个变量:

    • y:录音信号
    • fs:采样频率
    1. 数据加载
      创建一个名为 n 的变量,表示 y 中的元素数目。然后使用 n 创建等间距向量 t,该向量以 0 开头,以 n-1 结尾,元素之间的间距为 1。
    load Cchord
    y
    fs
    n = numel(y)
    t = 0:n-1
    
    1. 数据加工、处理及作图
      t 现在有正确的点数,但它需要表示音频信号的采样时间。您可以使用采样频率 fs 将向量转换为时间(以秒为单位)。
    t = t / fs
    plot(t, y)
    

    在这里插入图片描述
    在绘图中, y 是周期性的,但它不是简单的正弦波。它由具有不同频率的多个正弦波组成。

    傅里叶变换将返回信号的频谱信息。主频的位置将显示和弦中包含的音符。

    可以使用 fft 函数来计算向量的离散傅里叶变换。
    3. matllab离散傅里叶变换

    • fft 函数来计算向量的离散傅里叶变换并取绝对值
    • FFT 向量 yfft 计算频率向量 f
    yfft = abs(fft(y))
    f = 0:n-1
    
    1. 修饰
      向量 f 现在包含 n 个点。要将这些点转换为频率,您可以将整个向量乘以采样频率 (fs),然后除以点数 (n)。

    f 将包含从 0 到 fs 的频率。主频位于 f 的开头位置。可以使用 xlim 函数放大所关注的区域。
    xlim([xmin xmax])

    f = f*fs/n
    plot(f, yfft)
    xlim([0,1000])
    

    在这里插入图片描述

    load Cchord
    y
    fs
    n = numel(y)
    t = 0:n-1
    t = t / fs
    plot(t, y)
    yfft = abs(fft(y))
    f = 0:n-1
    f = f*fs/n
    plot(f, yfft)
    xlim([0,1000])
    

    3 总结

    3.1 音频、图像 频图分析

    3.2 傅里叶变换

    3.3 matlab知识点

    • 数据加载语句文件名可以不带后缀
    • xlim限制x轴范围
    • hold on / hold off 一张图里画多组线
    • title 标题
    • legend 图例
    • 线型设置
    展开全文
  • 国网能源研究院估计,2018年,全国数据中心的耗电总量达到1609亿kWh,超过上海市当年全社会用电量(1567亿kWh),占全国用电量比重的2.35%。中国电子节能技术协会数据中心节能技术委员会秘书长吕天文在2019年的一次...
  •  占世界用电量8%  近日,国家能源局原局长张国宝在一次活动上表示,当前非常流行的云计算模式,属高能耗项目。他分析说,中国联通[0.31% 资金 研报]数据中心的能耗数据显示,该中心每年耗电99亿千瓦时。以中国...
  • 工业数据挖掘实例

    2020-10-30 14:22:26
    所以简单说所有的智能都是做好两件事:收集数据,使用数据数据挖掘技术根据业务数据不同有不同的应用场景。在我以往工作中主要在以下领域有应用尝试: 市场营销:用数据挖掘进行消费者画像,定向进行产品推荐 ...
  • 四次工业革命的划分已经被大家所接受,其中蒸汽工业革命,用煤量无疑是一个衡量指标,电气工业革命是用电量作为工业经济运行状况的一个指标,那么到了互联网时代,用什么指标来衡量数字经济的运行或者发展状况呢?...
  • 客户与工业企业之间的交互和交易行为将产生大量数据,挖掘和分析这些客户动态数据,能够帮助客户参与到产品的需求分析和产品设计等创新活动中,为产品创新作出贡献。福特公司是这方面的表率,他们将大数据技术应用到...
  • 上海数采物联网科技有限公司 ...该系统数据 高压侧数据是准确的,低压侧 数据不准只能做参考用,只能精确到车间的用电量计量。该系统的104规约接口没有开放。需要通讯管理机做数据转发,通过以太网和数采机通讯。 ...
  • 智能用电及能效管理系统简介系统在线监测整个企业的生产能耗动态过程,收集生产过程中大量分散的用电、用水、用气等能耗数据,提供实
  • 工业污染源废气工况用电监测系统具备废气监测、设备控制、设备用电监测功能,在废气治理、废气排量、空气质量、工况用电等每一环节严格把控。数据自动采集、全程监测、远程调控,实现智能管理、高效率低成本运作。 ...
  • 内蒙古电力交易对数据中心用电费用的影响分析从北京往西北方向出发,沿着京藏高速驱车约5个小时,经过张家口,即可到达中国的“草原云谷”-内蒙古自治区乌兰察布市。凭借着优越的地理位置,全年平均...
  • 用电量预测是国民经济运行的重要内容,根据历史数据,如国内生产总值、工业增加值、居民消费价格指数等,预测一段时间以内的用电量数据。 要求: (1)从公开渠道收集数据。目前已有一部分数据,但量还太小,需要...
  • 苏州协鑫:数据智能开启“工业互联网”中国路径 “云栖奖”获奖人:苏州协鑫信息管理部经理 周小栋 作者:阿里云研究中心 田丰 当美国制造业回归,日本机器替换匠人,德国研发“工业4.0”智能工厂之际,“中国制造...
  • 北斗通信转接盒通过RS232实现与北斗一体机之间的数据传输及控制。 主站系统:包括主站北斗指挥机(含北斗外置天线)、北斗多卡机、北斗通信前置机、北斗通信前置服务软件、计量自动化系统主站服务器。 1、北斗指挥...
  • 数据分析场景和模型应用 数据分析建模需要先明确业务需求,然后选择是描述型分析还是预测型分析。 如果分析的目的是描述目标行为模式,就采用描述型数据分析,描述型分析就考虑关联规则、序列规则、聚类等模型...
  • 这一言论实际上反映了一个现象——在占领了零售、消费等行业后,2C的互联网思维在电气、能源领域碰了壁,它们无法应对专业的、海量的工业数据。   但好在,物联网带来了方法论,能源企业开始了探索。   能源这种...
  • 数据中心的下层基础是物理基础设施,上层建筑是IT系统。物理基础设施包括建筑装修、供配电、制冷、集中监控、消防、布线等系统,一旦这些下层基础出了问题,将极大地影响到由服务器设备、网络设备、通信设备、存储...
  • 工业能耗管理系统

    2021-05-08 17:15:39
    1、能源消耗大,工业企业是能源消耗的主要群体,能源消耗占全国能源消耗总量的70%左右。 2、工业企业没有完善的管理系统,能源每年消耗大,成本高。 3、工作人员没有节能意识,不会去节省能源消耗。 4、设备...
  • 陆薇表示:“消费互联网是开放草地,而工业互联网是有墙花园,前者是没有行业准入和特别领域的知识要求,后者有行业准入门槛和特别领域的知识要求;前者是纯线上,后者是线上和线下相结合;前者可以只是软件的,但后...
  • Cirrus Logic公司推出了CS5461A和CS5463两款高精度电表集成电路(IC),为数字电表制造商提供了适用于新一代电能测量应用产品的简易升级选择。这两款产品与Cirrus ...在片上直接读取用电量数据无需使用额外的板上数字
  • 2018 年已经过半,各省又开始比考试成绩了,...答案便是:因为你用电量不够高!!! 有托着腮帮子怀疑的,请看下国家电网的大屏分析,看看右下方的数据是不是我说的答案。 注:以上都是基于刚刚发布不久还冒热...
  • 一、项目背景 目前,许多中小型离散制造企业仍然采用传统的管理模式,缺少信息化系统辅助,久而久之企业...设备种类繁多,数据采集困难;设备处于异常待机或停机状态,没有相关统计,过程缺乏监控,导致设备实际利用率
  • 2018 年已经过半,各省又开始比考试成绩了,考试...答案便是:因为你用电量不够高!!! 有托着腮帮子怀疑的,请看下国家电网的大屏分析,看看右下方的数据是不是我说的答案。 沉稳内敛型 缤纷炫酷型(怎么做...
  • JK-DMS-8088/ RTU 通用全数据采集器:JK-2000 RTU 通用全数据采集器应用于采集各类智能设备及非智能设备的运行状态下的各种参量值:电压、电流、效率、功率、用电量、开关状态、开关控制及温度、湿度、烟感、水浸、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,610
精华内容 1,044
关键字:

工业用电量数据