国电电力天津大港电厂 许 斯
目前在火电厂中PID调节技术被广泛使用。通过计算并求出设定值与实际值间具体的差值,再以这个差值为基础,结合比例、积分和微分控制器,以这样的方式可有效控制变量,这就是PID控制的运行过程。PID控制技术在今天还受到大多数工业行业的青睐,得益于PID控制技术的简单算法及自身的高可靠性。但如面对现场情况复杂、线性分布与标准相差过大、场地内有其他的异常值扰乱等不在预期内的突发状况时,PID的性能就不能应对这些非正常情况了,不能正常工作。
当前主流火电厂对蒸汽温度的主要调节手段是使用减温水进行调节,调节过程的基础是低温过热器的出口温度稳定,才能达到调节目的[1]。而低温过热器出口的温度是与非常多参数相关的,包括机组负荷、蒸汽流量、锅炉风量、燃煤量等可量化参数,还包括锅炉结焦程度、炉内空气动力场情况、加热器管内结垢程度等许多不可量化参数,以及设备工况的变化、环境温度的变化、煤质的变化等等因素,都会影响锅炉受热情况。
目前的调节方法易造成汽轮发电机组的效率降低和机组安全性的问题。针对目前火电站减温水调节的现状,将机器学习技术融入到减温水调节中,将对减温水的调节提供新的思路。本文利用机器学习算法来解决蒸汽调整的问题,来解决过调、调节滞后、水量增加不够造成超温、水量波动较大造成温度长时间不稳等问题。
随机森立算法是一种集成学习思想的应用。集成学习(Emsemble Learning)是一种思想,通过构建并结合多个学习器来完成学习任务的一类算法,可为分类器或回归器通过特定的方式进行融合,形成一个效果较好的强学习器,以此来获取比单个模型更好的回归或分类表现[2]。随机森林(Random Forest)是基于Bagging思想的算法,建立在决策树模型的基础之上,结合Bagging集成思想将多个决策树结合到一起,建立每一个决策树时使用随机选取特征的方法。其简单易实现,性能强大,是集成学习中的代表性算法,在Bagging方法的基础上增加了对于属性的随机选择,不同于Bagging方法只有数据采样时的随机,正是这个在选择属性上的随机性,给随机森林算法带来了更好的泛化性能[3]。
用随机森林算法建立模型,训练已经分割好的数据,对目标值“一级减温水”进行预测。利用Python语言的集成库Scikit-learn中的随机森林算法库文件,通过集成方法库sklearn.ensemble中的随机森林回归训练器RandomForestRegressor,可方便的建立随机森林模型。
模型实例化。首先,利用导入的库函数中的Random Forest Regressor方法,来将模型实例化。estimator=RandomForestRegressor(random_st ate=0,criterion='mse',bootstrap=True,max_features=None,n_estimators=8,max_depth=None,max_leaf_nodes=None,min_samples_leaf=1,oob_score=True)。Random Forest Regressor有很多重要参数,参数调整是训练模型中重要的步骤。需要用科学的方法来验证不同参数时模型的效果。
训练模型。模型实例化后可对模型进行训练。利用fit接口对建立好的模型实例进行训练:regr=estimator.fit(X,y),其中X是分配好的训练集,y是测试集。模型训练完毕后得到模型regr,通过score接口对模型进行评分,其中测试数据就是用来训练模型的训练集(X,y):regr.score(X,y),得分是0.99106834。这个分数说明模型对训练集的拟合程度非常高,得到了较好的分数,但有过拟合的可能存在,测试模型是否过拟合还需对测试集的数据进行验证。
利用测试集测试模型。整个数据集是由训练集与测试集构成的,训练集主要的作用是模型建立,而测试集的作用是检查模型是否准确及是否符合标准,此外还能检查出来模型是否存在拟合的情况。第一步需计算测试集的结果,这一步需利用preditct接口,可得到y_1=regr.predict(X_test),随后利用score计算测试集结果的分数regr.score(X_test,y_test),得分是0.93277192。利用袋外数据来验证模型的分数regr.oob_score_,输出结果是0.93544676。对模型进行交叉验证:score=cross_val_score(estimator,X,y).mean(),print('Score with the entire dataset=%.2f'%score),其得分是0.93。通过测试集和袋外数据的分数可看出测试结果泛化性良好。结果是基于模型实例化时初始的参数,通过对模型参数的调整,还可继续对模型进行优化。
模型的参数关系着整个模型表现的好坏。RandomForestRegressor函数的参数分有两种,一种是随机森林框架的参数:n_estimators、oob_score、bootstrap、max_samples;另一种是决策树的参数:criterion、max_features、max_depth、min_samples_split、min_samples_leaf、max_leaf_nodes。通过坐标下降的方法,按照顺序逐个对参数进行验证,参数的调整顺序是:bootstrap,n_estimators,max_features,max_depth,max_leaf_nodes,min_samples_leaf。
Bootstrap。当bootstrap为False时,说明决策树的多样化差且泛化性能差。如果过拟的现象出现在了训练集中,造成的结果就是测试集的分数会较低。反之,如果bootstrap不是False而是True时,那么决策树的多样化就会提高、泛化性能也会增强,可进行有放回的抽取选择。基于以上这两种情况,最终应当将bootstrap的参数定为True;n_estimators。代表随机森林中决策树的数量。决策树的数量与模型的性能是息息相关的,决策树的数量越多,模型性能增加的幅度越大。当然模型的性能不能一直这样增长。当决策树的数量达到了一个标准值之后,模型的性能也就达到了一定的程度,变化幅度不在那么明显。当n_estimators到达100以后,分数基本上就不会在发生变化。因此最终n_estimators设定为100。
max_features。表示建立决策树时随机选取属性的最大数,如果想要建立随机森林的话,就不能允许max_features的数值是随意的,必须要对其进行一定的限制。可利用网络来找到做适合的数值,数据集的属性加起来一共是36个,而max_features的范围取range(1,37,5),也就是说取值要从1开始取值,往后间隔5个再进行取值,以此为规律进行相应的取值,发现当max_features取值为11时分数是最高的,所以最终的确定值为11。
max_depth。表示每棵决策树的最大深度,默认值是None。如想对决策树进行剪枝,就要对max_depth进行合理的设置。决策树的深度与模型的偏差值息息相关,深度越深偏差值就会越小。通过不断的进行取值设置,发现max_depth为41时结果是最优的;max_leaf_nodes。表示单棵树的最大叶子节点数。设置max_leaf_nodes值可对树进行剪枝,最大叶子的节点数与测试集的分数是关联的,呈现出正相关的关系,也就是随着前者数量的变大后者也会随之变大。通过不断地实验发现,当max_leaf_nodes参数为None时就符合标准,因此最终设置为None。
min_samples_leaf。表示叶子节点包含最小样本数。如果说数值比这个参数小的话,那么这些叶子节点就会被裁剪掉。所以min_samples_leaf值与剪枝也可说是正相关的关系,数值越大裁剪掉的越多,最后导致模型的偏差也就越大。基于以上这种情况,将min_samples_leaf值为1。
至此最终确定参数及其值如下:'bootstrap'/TRUE、'criterion'/Mse、'max_depth'/41、'max_features'/11、'max_leaf_nodes'/None、'min_samples_leaf'/1、'n_estimators'/100、'n_jobs'/-1、'oob_score'/TRUE、'random_state'/0。
最后测试集结果是0.942169656,袋外测试结果是0.942124891。训练集的拟合程度是0.99199292,存在过拟合的情况。原数据集的采样周期是1s,通过查看数据集发现数据的重复值较多,说明采样周期太短。重采样可减少重复值,提高模型对数据的敏感度。上述调整参数的过程是在数据集每30s进行重采样后的数据进行的。通过用10s采样周期的数据,利用上述模型得到的参数进行训练模型后,得到的最后测试集结果是0.982981054,袋外测试结果是0.983475399。随着数据集内数据量的增加,训练模型效果变好。利用原始没有进行重采样的数据集进行模型训练得到测试集结果是0.999747017,袋外测试结果是0.9997289。三个数据集的结果比较如表1。
通过表1看出,利用30s重采样数据集对模型进行调参,调参后的模型再用于原数据集进行训练,得到了非常理想的效果。
测试集数据是时间序列,减温水流量随着时间的变化。通过绘制测试集的散点图,能清晰看出减温水流量随着时间的变化趋势,将测试集的实际值和模型的预测中绘制于同一个图中,能方便的看出预测值的质量。绘制对于测试集的减温水量和预测量的点图如图1。
图1中X是测试集的真实值,O是预测值。从图中可看出预测值和实际值随时间变化的对比。从散点图上可看出,随着数据集数量的增加,训练的模型在测试集上的表现更好。将测试集的实际值作为y轴,预测值作为x轴,画出30s、10s采样和不采样的散点图。
图2是预测值与实际值的相关性散点图。图2中可见在重采样周期为30s的数据集,存在小范围的偏差。随着采样周期的缩短,10s重采样周期的预测值和实际值的偏差减小,但个别散点偏差较大。在原始数据集没有进行重采样的数据上,可看出预测值和实际值的偏差很小,只有个别点出现了较小的偏差。
利用RMSE(均方根误差)值可更精确的量化评价结果,利用随机森林算法的模型,在三个不同的重采样数据集中均方根误差分别为3.74955、2.06013和0.25063,即表现在实际中的减温水量误差大致为3.7t/h、2t/h和0.2t/h。
如图3,随着数据集数量的增加、误差减小,说明增加数据集的规模可减小预测结果的误差。通过图1可从预测值和实际值的点图中看出不同的RMSE值,相对应的误差表现。在实际生产过程中,3.7t/h和2t/h的误差对蒸汽温度会产生微小的影响,会使蒸汽温度出现缓慢的变化,而0.2t/h的误差基本不会对蒸汽温度造成影响。所以在没有进行重采样的原始数据集中,0.2t/h的误差是非常好表现了,保证了模型对蒸汽温度调节精确度的要求。
综上,在电力、煤炭和石油等众多传统行业都存在技术老旧的问题,这些行业中技术体系相对封闭,实际核心生产环节缺少对于前沿技术的应用。原因一是传统行业生产技术人员对于前沿新技术了解不够深入,不清楚哪些技术能利用、如何应用;二是传统生产行业将安全生产放在第一位,对于新技术往往持有怀疑态度,宁可牺牲生产效率也要保证生产安全。本文将随机森林算法运用到传统生产行业,为传统行业的生产系统优化提供了一种新的思路,工业化4.0概念的提出,指出了将人工智能和传统工业相结合方向,随着机器学习技术的成熟和发展,势必会被传统行业所接受,届时将对行业发展产生不可估量的影响。