基于数据驱动的空调结霜程度检测方法研究
摘要:
在我国的夏热冬冷地区,由于没有集中供暖,在冬季使用空调制热进行供暖是一种很常见的方式,但该地区冬季空气相对湿度较高并且环境温度低,空调的室外换热器表面很容易出现结霜现象,导致空调制热效率的降低以及能源的浪费。如何及时准确地对空调的结霜程度进行检测,从而适时地启动除霜程序,避免结霜程度过高引起的一系列问题,具有尤为重要的意义。
本文使用来自某公司的空调结霜实验数据,针对该原始结霜数据中存在的重复数据过多会大大延长检测时间、降低检测准确率的问题,使用近邻排序算法对其中的重复数据进行数据清理。另外该原始结霜数据包含的18个特征属性中有若干个属性的值始终不变或变化较小,针对这种情况,采用递归特征消除方法对去重后的数据进行了特征选择,找出了与空调结霜程度相关性较高的12个特征属性。
在对原始空调结霜数据进行数据清洗与特征选择的基础上,使用了XGBoost算法对结霜程度进行检测,并通过三组对比实验分析了特征维数对检测准确率的影响。另外采用粒子群算法对XGBoost的参数进行优化,并与GBDT、LightGBM等算法的检测效果进行对比,实验结果表明粒子群优化的XGBoost(PSO-XGBoost)在空调的结霜程度检测上具有比较好的效果。
主题词:结霜程度检测 数据清洗 特征提取 粒子群优化 XGBoost
1 引言
1.1 项目目标
随着国家经济的发展、人民生活水平的稳步提升以及极端寒冷天气的增加,在冬季人们对于室内环境舒适性的要求也在逐渐升高,冬季供暖需要的增加导致了建筑能耗的大大增加。而在我国的夏热冬冷地区,空调具有夏季制冷冬季制热的明显优势,在冬季是该地区广泛使用的取暖方式,但该地区的冬季一般比较寒冷潮湿,用来供暖的空调、空气源热泵等设备很容易出现结霜现象,导致制热效果不理想、能源大大浪费、有时甚至会毁坏设备。如何对结霜的程度进行准确地检测并提前采取除霜措施具有非常重要的意义,近些年来数据驱动以及人工智能技术的发展为结霜程度的检测提供了一个新的方向。本文对基于数据驱动的空调结霜程度检测方法进行了研究,重点围绕如何对原始空调结霜数据进行数据清洗、结霜程度检测方法的准确率如何提高这两个问题展开研究。
1.2 项目主要内容
1.2.1 数据清洗
空调的结霜过程很容易受到类似温度、空气湿度等因素的影响,因而通常具有非常明显的时变性和非线性特征。本文使用的原始空调结霜数据来自于某公司的空调结霜实验,其中一共包含39万多条数据。如果直接使用这些原始数据来对空调的结霜程度进行检测,不仅训练算法模型的耗时很长,而且结霜程度的检测准确率也不高,容易受到重复数据的影响。为了保证用于对后续算法模型进行训练的数据以及特征属性的合理性,本文使用近邻排序算法对原始结霜数据中的重复数据进行数据清洗。
1.2.2 特征选择
本文使用的原始空调结霜数据中一共包含24个特征,其中6个为状态变量,另外18个为数据变量,这24个特征中有若干个可能与结霜程度的相关性不高,如何从中选择出与结霜程度相关性较高的特征,以用于对后续的检测模型进行训练,具有很重要的意义。本文使用递归特征消除方法从原始的18个特征属性中选出了与结霜程度相关性较高的12个特征属性,从而实现特征选择。
1.2.3 空调结霜程度检测方法适用性
由于不同检测方法在该空调结霜数据上的检测效果有一定差异,需要从中找出检测效果最佳的方法,为此本文比较了一些常用的的机器学习算法在结霜程度检测上的效果,如: XGBoost、LightGBM等。针对表现较好的XGBoost算法,本文分析了XGBoost参数对检测结果的影响,并采用粒子群算法对XGBoost的参数进行优化,以得到最好的综合检测效果。
1.3 论文结构安排
本文对空调结霜程度检测中的数据清洗方法、特征选择方法以及结霜程度检测算法进行了研究,所用的原始空调结霜数据来自于某公司的空调结霜实验。在数据预处理部分,针对所用的原始数据中数据量过大、重复数据过多以及无关特征属性较多的特点,首先使用近邻排序算法对重复数据进行查找与清洗,而后使用递归特征消除方法选择出与结霜程度相关性较高的特征属性,并且在后续的结霜程度检测中验证了该特征选择方法的效果。在结霜程度检测部分,通过XGBoost算法对结霜数据进行分类,进而实现了对结霜程度进行检测的目的,并且使用粒子群算法对XGBoost的参数进行优化,找到了使得检测准确率最高的参数。
图 1本文组织结构
本文的组织结构如图1所示,各节内容安排如下:
第1节先介绍课题背景,并给出本文的项目目标以及项目主要内容。
第2节介绍本项目软件结构和软件实现方法。
第3节介绍本项目所使用的数据集,并对空调结霜数据进行数据清洗与特征选择。
第4节介绍基于数据驱动的空调结霜程度检测方法——XGBoost算法,分析了各个参数对检测结果的影响,针对该算法参数如何选取的问题,采用粒子群算法对XGBoost参数进行优化,最后将粒子群算法优化的XGBoost算法与原始XGBoost、GBDT、LightGBM等方法的检测结果进行对比分析,验证了粒子群算法优化的XGBoost算法在空调结霜程度检测上具有比较好的效果。
第5节对本项目的源代码进行说明。
第6节对相关实验结果展示并说明。
最后对本文的研究内容最后总结。
2 软件结构和软件实现方法
2.1 空调结霜程度检测软件结构
本文采用的原始结霜数据来自于某公司的空调结霜实验,在对该原始数据进行相关处理的基础上,用来对空调结霜程度检测的方法进行测试和验证。使用XGBoost算法进行空调结霜程度检测的模型结构如图2所示。
图2 XGBoost空调结霜程度检测结构图
(1) 数据预处理,使用近邻排序算法对原始空调结霜数据进行去重复,再使用递归特征消除方法进行特征选择;
(2) 数据集划分,依据一定的比例将去重以及特征选择后的数据划分成训练集和测试集;
(3) XGBoost模型训练,设定对XGBoost算法效果有较大影响的参数,通过训练集数据对XGBoost模型进行训练;
(4) 模型评估,将测试集数据输入训练后的XGBoost模型,得到该模型在测试集上的准确率,从而对其进行评价。
2.2 空调结霜程度检测软件实现方法
本次项目的开发包括:原始结霜数据的数据清洗、特征提取、基于粒子群算法优化的XGBoost空调结霜厚度预测,以及将粒子群算法优化的XGBoost算法与原始XGBoost、GBDT、LightGBM等方法的检测结果进行对比分析。本项目的整个开发过程使用Python语言实现,其版本为Python3.6.3,使用的开发环境为Windows10+PyCharm。
Python是一种面向对象的解释型编程语言,由荷兰计算机程序员Guido van Rossum开发,具有学习简单、功能强大的特点,丰富的Python模块包含了IT行业最前沿的开发功能,在大数据、机器学习、自然语言、人脸识别、游戏开发、字体设计等领域都有广泛使用。
3 2 空调结霜数据的数据清洗与特征选择
本文的空调结霜程度检测方法是以空调结霜数据作为基础的,但是由于本文所采用的原始空调结霜数据中包含过多的重复数据,并且该原始数据中记录的18个数据变量中有若干个变量在整个结霜过程中保持不变或变化较小。为了减小重复数据以及与结霜程度相关性较低的特征变量对最终检测结果的影响,需要采用数据清洗方法对重复数据进行过滤,并采用特征选择方法找出与结霜程度相关性高的特征变量。下面对原始的空调结霜数据、数据清洗方法以及特征选择方法进行介绍。
3.1 原始空调结霜数据分析
本文采用的原始结霜数据来自于某公司的空调结霜实验,在对该原始数据进行相关处理的基础上,用来对空调结霜程度检测的方法进行测试和验证。该原始数据是在不同的室内外环境下,将空调保持在制热模式,然后每隔1秒钟进行一次数据采集,每次采集的数据包含6个状态变量以及18个数据变量。其中6个状态变量分别是空调运行状态(正常运行和结霜过程两种)、压缩机状态(开)、设定模式(制热)、外机AC电流降频状态(正常)、外机AC电流保护状态(正常)以及结霜程度,18个数据变量则包含压缩机运行转速、压缩机运行功率、室外排气温度、室外环境温度、室内环境温度、室内蒸发器中间温度等。
在两个月中先后进行了85次不同的实验,将采集到的数据进行汇总最终得到了85张数据表格,对这些数据表格进行分析后发现:其中3张表格数据异常,每张表格中的数据量均少于20条;另外还有11张表格中的数据量较少,均少于500条。这14张表格中数据的变化情况比较单一,为了提高最终空调结霜程度检测的准确性,首先将这14张表格进行了剔除,将剩余的71张表格用于后续的研究中。
对这71张表格中的数据进行统计与分析后发现,数据总量为392986条,结霜程度从0至12一共划分为13个等级,其中程度0表示未结霜,数值越大则表示结霜情况越严重。绘制出这些数据中结霜程度等级的频数和频率分布如图3-1所示,从中可以看出结霜程度为0的数据多达173351条,所占比例高达44%。另外从保留的71张数据表格中随机选取4张绘制出结霜程度的变化情况如图3-2所示,压缩机运行转速、外风机转速等18个数据变量的变化情况如图3-3所示。
图3-1 原始数据中结霜程度等级的频数与频率分布
图3-2 随机4张表格中结霜程度变化情况
(a) 原始数据中压缩机运行转速等6个变量的变化情况
(b) 原始数据中室外排气温度等6个变量的变化情况
(c) 原始数据中室内环境温度等6个变量的变化情况
图3-3 原始数据中18个数据变量的变化情况
从图3-2中随机选取的四张表格中的结霜程度变化情况可以看出,结霜程度的变化不是一个均匀的过程,随着时间的延长,结霜程度一般会不断升高,但是在某些情况下结霜程度可能变化得非常缓慢,有些情况下甚至不会出现结霜现象。
图3-3展示了原始39万多条数据中18个数据变量的变化情况,可以看到其中液阀感温包温度、气阀感温包温度、室外冷凝器入管温度、室外冷凝出管温度这4个变量在整个原始数据中均未发生变化,始终保持同一个值;而外风机1转速、外风机2转速、室内设定温度、补偿温度值等变量主要在几个固定数值上变化。
为了减少重复数据对结霜程度检测的影响,并且寻找出这18个数据变量中与结霜程度相关性较高的变量作为训练与测试的特征,从而提高结霜程度检测的准确性,接下来依次对原始空调结霜数据进行数据清洗以及特征选择。
3.2 基于近邻排序算法的空调结霜数据清洗
关于数据清洗的研究最早出现在美国[1],顾名思义,数据清洗就是对“脏”数据即不满足使用要求的数据进行检测与分析,并将其转化为符合要求的干净数据的过程[2]。数据清洗的目的是检测并修正数据中的干扰噪声,以便将这些噪声对数据分析结果的干扰减小到最低,常见的数据噪声包括:数据缺失、数据冲突、数据错误、数据重复冗余等[3]。
3.2.1 近邻排序算法
在上一小节中,分析了原始39万多条空调结霜数据中结霜程度的频数、频率分布情况,其中结霜程度为0的数据多达173351条,所占比例高达44%,其余结霜程度在1至12之间的数据分布相对比较均匀。如果直接将这39万多条数据用于对空调结霜程度检测方法进行训练与测试,首先数据量过多会大大增加算法运行的时间,另外其中大量的重复数据会降低结霜程度检测的准确性。
为了减小原始39万多条数据中重复数据对空调结霜程度检测方法准确性的干扰,本文采用近邻排序(Sorted Neighborhood Method,SNM)算法对原始结霜数据中的重复数据进行查找与处理,基本思路是先从结霜数据的18个特征属性中指定一个作为关键字对整个数据集进行排序,在本文中指定该排序关键字为结霜程度。在对原始结霜数据进行排序后,指定一个长度为100的滑动窗口,每次比较这个窗口内的数据样本,查看是否有重复数据[4-6]。使用近邻排序算法对原始空调结霜数据中的重复数据进行处理的具体步骤如下:
(1)确定排序关键字,在本文中针对空调结霜数据的特点,选择空调的结霜程度作为排序关键字,因为结霜程度从0至12一共有13个等级,如果是重复的数据样本,那么它们的结霜程度必定相同,这样可以最大可能地将重复的数据样本排列在一起,而另外的18个特征属性的变化的特点不明显,作为排序关键字的优势不突出;
(2)依据上一步确定的排序关键字——结霜程度对整个原始结霜数据集进行排序,按照结霜程度从小到大的顺序最大可能地将重复数据排列在邻近的位置;
(3)对重复数据进行检测,在对结霜数据进行排序后,取一个长度为100的滑动窗口,每次滑动时,将排在窗口首位的数据样本移出,再将新的待比较的数据样本移入这个滑动窗口的末尾,将新进入的数据样本与原来窗口内的数据样本逐一进行比较,进而实现对重复数据样本的检测,如果出现重复的情况,则把新进入的排在末尾的数据样本剔除。按照这样的步骤重复下去,直到完成对整个原始数据集中重复数据的清洗。
使用近邻排序算法进行重复数据清洗的流程如图4所示,使用滑动窗口对排序后的空调结霜数据集进行扫描的示意图如图5所示。
图4 近邻排序算法流程图
图5 滑动窗口扫描排序结霜数据集示意图
3.2.2 数据清洗后结果分析
采用近邻排序算法将原始39万多条数据中的重复数据进行了删除后,数据量由392986条减少到92145条,可知重复数据占据原始数据的比例高达76.6%。去除掉重复数据后结霜程度的频数、频率分布情况如图6所示,其中结霜程度为0的数据有46442条,仍然占据了去重后数据的50.4%,高达一半以上。
为了减少结霜程度为0的数据量过多对其余1至12个等级的结霜程度检测的影响,在对重复数据进行数据清洗后,从结霜程度为0的数据中随机选取了八分之一用于后续的研究,筛选后的数据总量为51508条。对原始39万多条数据中的重复数据进行数据清洗,并对结霜程度为0的数据进行随机筛选后,结霜程度的频数与频率分布如图7所示,18个数据变量的变化情况如图8所示。
图6 去除重复数据后结霜程度的频数与频率分布
图7 去除重复数据并对程度0随机筛选后结霜程度的频数与频率分布
(a) 去重并对程度0筛选后压缩机运行转速等6个变量的变化情况
(b) 去重并对程度0筛选后室外排气温度等6个变量的变化情况
(c) 去重并对程度0筛选后室内环境温度等6个变量的变化情况
图8 去除重复数据并对程度0随机筛选后18个数据变量的变化情况
图7展示了去除重复数据并对结霜程度为0的数据随机筛选后结霜程度的频数与频率分布,从中可以看出,各个结霜程度的分布情况相较于原始39万多条数据中的分布更为均匀,并且各个结霜程度的数据量也大大减少,这为后续的空调结霜程度检测方法的研究提供了良好的基础。
图8展示了去除重复数据并对结霜程度为0的数据随机筛选后18个数据变量的变化情况,由于数据量由原始的392986条减少到了51508条,各个数据变量的变化情况得到了更加详细地展现。其中液阀感温包温度、气阀感温包温度、室外冷凝器入管温度、室外冷凝器出管温度这4个变量的数值一直没有发生变化,外风机1转速、外风机2转速、室内设定温度、补偿温度值等变量的数值分布更为细密,均在一个固定范围内波动,其余几个变量的取值范围比较广并且取值的数目更多。
3.2.3 基于递归特征消除的特征选择
在上一小节中使用基于近邻排序的数据清洗方法对原始39万多条数据中的重复数据进行了删除,使数据量由原始的392986条减少到51508条,并且绘制了去除重复数据并对结霜程度为0数据随机筛选后的结霜程度分布情况以及18个数据变量的变化情况。其中有4个变量在整个数据集中从未发生过变化,还有几个变量的取值只在几个数值之间变化。为了减少与结霜程度相关性较低的变量对结霜程度检测准确性的影响,本小节采用递归特征消除方法对去除重复数据并随机筛选结霜程度为0后的数据进行特征选择。
递归特征消除(Recursive feature elimination,RFE)属于特征选择中的包装式方法,即设定一个评分标准后,每次从原始特征集中选取若干个需要的特征或者排除掉若干个不需要的特征[7-8]。递归特征消除的主要思想是指定一个外部的评估模型,然后通过迭代来反复构建模型,每次迭代中删除一个相关性较低的特征,直到选出需要数目的若干个相关性最高的特征[9-10]。使用递归特征消除方法进行特征选择流程如图9所示。
图9 递归特征消除方法的流程图
具体步骤如下所示:
(1)训练一个外部评估模型,在本文中使用核函数为线性的支持向量机作为评估模型;
(2)使用步骤(1)中的外部评估模型计算每个特征的重要性;
(3)消除与结霜程度相关性最弱的特征,从而得到下一轮的训练数据;
(4)如果消除后的特征数目依旧超过需要的特征数目,则返回步骤(1)继续迭代,否则输出选择的特征。
在本文中,指定外部评估模型为线性的支持向量机,通过若干次迭代后消除了液阀感温包温度、气阀感温包温度等6个与结霜程度相关性较低的特征属性,最终选择出压缩机运行转速、外风机2转速、压缩机运行功率、电子阀步数、室外环境温度、室外排气温度等12个数据变量作为训练特征,而后将去重以及对结霜程度为0的数据随机筛选后的数据按照7:3的比例划分为训练集和测试集,用于后续对空调结霜检测方法进行训练与测试。
4 基于粒子群优化的XGBoost空调结霜程度检测
4.1 XGBoost理论基础
4.1.1 Boosting算法
Boosting算法在1990年由Schapire第一次提出,起源于PAC (Probably Approximately Correct)学习框架[11],采用序列化的方法生成集成学习中的个体学习器,与上一章中的Bagging算法有所不同。Boosting算法的基本思想是基于重赋权法,在每轮训练中,根据样本的分布情况改变训练样本所占的权重,降低那些被前一轮的弱学习器正确分类的样本所占的权重,而提高错误分类的样本的权重,再将调整后的样本用于训练出下一个弱学习器,最终将所有的弱学习器按各自的权重进行组合,从而得到所需的强化学习器[12]。
假定原始训练样本集中为转存失败重新上传取消,其中一共有
转存失败重新上传取消个样本,总共需要训练出
转存失败重新上传取消个弱学习器,Boosting算法的具体步骤如下:
(2)使用具有权重分布转存失败重新上传取消的训练数据集对弱学习器
转存失败重新上传取消进行训练,其中
转存失败重新上传取消表示第
转存失败重新上传取消个弱学习器,取值范围为
转存失败重新上传取消;
(3)计算转存失败重新上传取消在当前训练数据集上的分类错误率,计算公式为:
其中转存失败重新上传取消表示类别数,如果
转存失败重新上传取消则表示二元分类;
(5)对训练数据集的权重分布进行重新赋值,计算公式为:
(6)按照各个弱学习器的权重进行组合得到最终的强化分类器。
上面Boosting算法的步骤中有几个需要注意的地方:
(1)在每一轮训练的过程中,都需要对训练集中的每个样本重新赋予一个权重;
(2)如果当前生成的基学习器的分类效果比随机猜测的结果还差时,说明当前的基学习器效果不理想,需要将当前的基学习器丢弃,而后重新对训练样本进行采样,以避免出现基学习器分类效果不如随机猜测的情况后训练过程太早停止的问题。
(3)Boosting算法在迭代过程中一直在加强被错误分类的样本的学习比重,它关注的重点是降低偏差。
4.1.2 GBDT算法
GBDT的英文全称为Gradient Boosting Decision Tree,中文名为梯度提升决策树,梯度提升的概念最早在2001年由Friedman提出[13],属于有监督的机器学习算法。与上一节中的Boosting算法通过更新被错误分类的样本的权重来实现迭代过程相似,GBDT算法也是通过迭代最终得到强化的学习器,但GBDT的迭代方式和上一小节中的Boosting算法有所不同。
在GBDT的迭代过程中,假设前一轮得到的组合强学习器为转存失败重新上传取消,记该强学习器的预测值与实际值之间的差异为其对应的损失函数,表达式为
转存失败重新上传取消。那么在下一轮的迭代中,需要找到一个弱学习器
转存失败重新上传取消使得它的损失函数
转存失败重新上传取消达到最小。梯度提升方法就是通过最速下降的近似方法,拟合出一个回归树。第
转存失败重新上传取消轮的第
转存失败重新上传取消个样本的负梯度计算公式如下:
GBDT算法的具体步骤如下:
(1)初始化弱学习器转存失败重新上传取消,它可以使损失函数极小化为一个常数值,这时回归树中仅有一个根节点,表达式为:
(2)对于第转存失败重新上传取消轮迭代,计算当前弱学习器的损失函数的负梯度,并将其作为残差的估计,计算公式与公式(4-6)相同,不同的损失函数具有不同的负梯度值;
(3)使用计算得到的转存失败重新上传取消拟合出一棵CART回归树,将其作为第
转存失败重新上传取消轮迭代的回归树,它所对应的叶子节点的区域记为
转存失败重新上传取消,其中
转存失败重新上传取消表示第
转存失败重新上传取消棵决策树的叶子节点的个数;
(3)对于转存失败重新上传取消,计算每个叶子节点区域的损失函数的值,并从中找出最小的损失函数值,计算公式为:
(4)更新第第转存失败重新上传取消轮迭代得到组合强学习器
转存失败重新上传取消,更新公式为:
(5)当迭代次数达到设定的迭代阈值后,终止迭代,得到最终的强学习器,计算公式为:
从上述步骤中可以发现GBDT算法是通过迭代回归树,并将每棵树的结果进行组合作为最终的结果,迭代时每棵树都在学习前一棵树的残差或梯度下降值,是一个不断优化的过程。
4.1.3 XGBoost算法
XGBoost(extreme gradient boosting,极端梯度提升),是一种基于梯度提升的集成学习算法,在2016年由华盛顿大学的陈天奇博士提出[14],它是以上一节中的GBDT算法为基础,进行了部分改进后的一种分布式梯度增强算法。相比于GBDT算法,XGBoost主要有以下几个方面的改进:
(1)在支持以CART作为基学习器的基础上,还支持线性基学习器;
(2)XGBoost将代价函数进行了二阶泰勒展开,同时使用了一阶导数和二阶导数,并且代价函数可以自定义,只需该自定义代价函数满足一阶可导和二阶可导,而GBDT在迭代优化的过程中只使用了损失函数的一阶导数(梯度)信息;
(3)XGBoost的代价函数在损失函数的基础上增加了正则项部分,用来对模型的复杂度进行控制,避免出现过拟合的情况;
(4)XGBoost在完成一次迭代后,会将叶子节点的权重乘上一个名为缩减(shrinkage)的系数,用以降低本轮迭代生成的基学习器对后续迭代过程的影响;
(5)XGBoost还参考了随机森林的实现方法,支持列抽样操作,能够明显地减少计算量,并且还可以降低过拟合出现的概率;
(6)对于原始训练样本集中特征值出现缺失的样本,XGBoost可以自主地对它的分裂方向进行学习;
(7)虽然XGBoost的迭代过程是顺序进行的,但是它在开始训练之前,就已经对原始训练数据进行了排序并保存为block结构,从而在计算每个特征的增益时可以以并行的方式进行。
4.2 XGBoost空调结霜程度检测参数影响
XGBoost算法的效率和性能受到很多参数的影响,对于本章的XGBoost空调结霜程度检测而言,主要的影响参数有基学习器的数目转存失败重新上传取消、树的最大深度
转存失败重新上传取消以及学习率
转存失败重新上传取消。基学习器的数目
转存失败重新上传取消越大,意味着最终的XGBoost的模型由越多的树强化学习得到,对训练样本的学习更加充分,可以提高分类器的泛化能力,但是相应地也会增加算法的运行时间,
转存失败重新上传取消如果太小,则对训练样本的学习不充分,分类的准确率也会下降。树的最大深度
转存失败重新上传取消越大,每棵树的结构会变得更复杂,最终XGBoost的模型也更复杂,容易出现过拟合的情况;
转存失败重新上传取消如果太小则树的结构又会过于简单,对样本的特征的学习不充分,导致分类准确率的降低;学习率
转存失败重新上传取消用于在每轮迭代提升之后,获得新特征的权重,将其适当缩小可以防止出现过拟合的情况,如果太小则又可能出现欠拟合的问题。
对于模型参数的进行调整通常有经验法与实验法两种方式,即根据数据样本与算法参数之间的经验公式,或通过训练样本与测试样本的分类效果来逐步调节算法模型的参数。但使用这两种方法确定算法的参数后,一般便不会再对其进行修改,适用范围比较窄。针对这个问题,下一节将使用粒子群算法来自适应地优化XGBoost算法的参数。
4.3 粒子群算法优化XGBoost参数
上一节对影响XGBoost算法的几个主要参数进行了介绍,为了能够自动地寻找到使分类准确率最高的参数组合,本章使用粒子群算法对XGBoost的参数进行优化。
4.3.1 粒子群优化算法
粒子群优化算法(Particle Swarm Optimization,PSO)起源于对鸟群捕食行为的研究[15],假设有这样一个场景:在一块区域中只有一块食物,有一群鸟在该区域中随机地对这块食物进行寻找,但是每只鸟都不知道这块食物的在哪里,不过它们可以感知自己当前的位置与食物之间距离的大小。为了找到这块食物,这个种群中的鸟会共享信息,逐渐向着这块食物移动,直到最终找到这块食物。粒子群算法的基本思路就是通过搜索当前距离食物最近的鸟的周围区域,直到找到食物,每只鸟都相当于一个“粒子”。
用数学模型对粒子群算法进行表述就是:在一个转存失败重新上传取消维空间中有
转存失败重新上传取消个粒子,适应函数为
转存失败重新上传取消,其中第
转存失败重新上传取消个粒子的位置为
转存失败重新上传取消、速度为
转存失败重新上传取消、适应度为
转存失败重新上传取消,它所经过的最好位置为
转存失败重新上传取消,整个种群所经过的最好位置为
转存失败重新上传取消,使用如下公式对第
转存失败重新上传取消个粒子第
转存失败重新上传取消维的速度分量和位置分量进行更新:
其中,转存失败重新上传取消代表第
转存失败重新上传取消次迭代中粒子
转存失败重新上传取消在第
转存失败重新上传取消维上的速度分量,
转存失败重新上传取消表示
转存失败重新上传取消次迭代中粒子
转存失败重新上传取消在第
转存失败重新上传取消维上的位置分量,
转存失败重新上传取消和
转存失败重新上传取消表示加速度常数,用来调节学习的最大步长,
转存失败重新上传取消和
转存失败重新上传取消是两个取值范围为
转存失败重新上传取消的随机数,
转存失败重新上传取消表示惯性权重,用于调节对解空间的搜索范围。
粒子群算法具体步骤如下:
(1)种群初始化,确定种群规模以及迭代次数;
(2)根据适应函数得出适应度,通常适应度越大,对应的粒子位置越好;
(3)对于每个粒子,比较它当前位置的适应度和它历史最佳位置(转存失败重新上传取消)处的适应度大小,如果当前位置的适应度更大,则将当前位置更新为其新的历史最佳位置(
转存失败重新上传取消);
(4)对于每个粒子,比较它当前位置的适应度和整个种群历史最佳位置(转存失败重新上传取消)处的适应度大小,如果该粒子当前位置的适应度更大,则将当前位置更新整个种群新的历史最佳位置(
转存失败重新上传取消);
(5)根据公式(4-11)计算各个粒子的新信息;
(6)判断算法的运行次数是否大于设定的最大值,如果是则停止迭代,否则回到第(2)步再次运行。
4.3.2 PSO-XGBoost算法流程
使用粒子群算法对XGBoost的基学习器的数目转存失败重新上传取消、树的最大深度
转存失败重新上传取消以及学习率
转存失败重新上传取消这三个参数进行优化,以空间向量
转存失败重新上传取消作为粒子群算法中的粒子,通过若干次迭代找到使得结霜程度检测准确率最高的粒子,该粒子的
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消值即代表了XGBoost算法在空调结霜数据下的最优参数,PSO-XGBoost算法的流程如图4-2所示。
具体步骤如下:
(1)种群初始化,确定种群规模即粒子的个数转存失败重新上传取消,最大迭代次数
转存失败重新上传取消,随机生成每个粒子的位置和速度,粒子
转存失败重新上传取消的位置为
转存失败重新上传取消,其中
转存失败重新上传取消代表基学习器的数目、
转存失败重新上传取消代表树的最大深度、
转存失败重新上传取消代表学习率,粒子
转存失败重新上传取消的速度为
转存失败重新上传取消,并且每个粒子位置和速度的限定范围为
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消和
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消;
(2)将粒子转存失败重新上传取消的位置
转存失败重新上传取消作为参数来训练XGBoost模型,将分类的准确率作为适应度值;
(3)将粒子转存失败重新上传取消当前位置的适应度与它的
转存失败重新上传取消处的适应度做对比,如果当前位置处的适应度更大,则对
转存失败重新上传取消进行更新。其中
转存失败重新上传取消,表示各粒子的个体历史最佳位置;
(4)将粒子转存失败重新上传取消当前位置的适应度与整个种群历史最佳位置
转存失败重新上传取消处的适应度进行比较,如果粒子
转存失败重新上传取消当前位置的适应度更大,则将粒子
转存失败重新上传取消的当前位置更新作为新的种群最佳位置
转存失败重新上传取消;
(5)根据公式(4-12)和公式(4-13)分别更新粒子的速度和位置,如果计算出的粒子速度和位置超出了设定的范围,则用边界值对粒子的速度和位置进行更新;
其中,转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消分别表示第
转存失败重新上传取消次迭代中,粒子
转存失败重新上传取消的基学习器数目
转存失败重新上传取消分量、树的最大深度
转存失败重新上传取消分量以及学习率
转存失败重新上传取消分量上的飞行速度矢量;
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消分别表示第
转存失败重新上传取消次迭代中,粒子
转存失败重新上传取消的基学习器数目
转存失败重新上传取消分量、树的最大深度
转存失败重新上传取消分量以及学习率
转存失败重新上传取消分量上的位置矢;
转存失败重新上传取消表示惯性权重,本文中取值为0.8;
转存失败重新上传取消和
转存失败重新上传取消表示加速度常数,本文中取值均为1.5,
转存失败重新上传取消和
转存失败重新上传取消是两个取值范围为
转存失败重新上传取消的随机数,
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消表示粒子
转存失败重新上传取消经过的历史最佳位置
转存失败重新上传取消中的三个分量,
转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消表示种群最佳位置
转存失败重新上传取消中的三个分量;
(6)判断迭代次数转存失败重新上传取消是否达到最大迭代次数
转存失败重新上传取消,如果达到则终止迭代输出最优解,否则返回步骤(2)继续迭代。
图10 PSO-XGBoost算法流程
5 源代码与数据集说明
本次项目开发过程中涉及到的源代码文件主要分为如下4个Python文件,如图11所示:
图11 项目主要源代码文件
如文件名所示,1-8的.py文件分别用来划分训练集和测试集并保存;对原始39万条数据进行去重,分析各属性变化情况;分析结霜程度频数和频率的分布;选择4张表格绘制结霜程度变化情况;进行特征选择;使用常规算法(GBDT、XGBoost、LightGBM)对数据进行处理以及对比分析;使用粒子群优化XGBoost算法,对数据进行处理分析;绘制实验结果图。
本文主要数据文件如图所示:
图12 主要数据文件
6 实验结果与分析
将几种以Boosting方式对基学习器进行组合的算法应用在空调结霜程度的检测上,主要包括梯度提升决策树(GBDT)、极端梯度提升(XGBoost)和轻量级梯度提升(LightGBM)这四种算法,并使用粒子群算法对XGBoost的参数进行了优化。一共做了三组对比实验来分析包含6个特征、12个特征和18个特征的数据,在对这几种算法的模型进行训练与测试时的差别,进而分析第二章中基于递归特征消除的特征选择在Boosting方式的算法上是否仍旧有效。
这四种算法在空调结霜程度检测上的表现效果如表1和图13所示,其中使用6个特征、12个特征和18个特征参与粒子群优化XGBoost模型的训练,得到的XGBoost的三组最佳参数分别为转存失败重新上传取消、
转存失败重新上传取消、
转存失败重新上传取消。
表4-1 不同算法在空调结霜数据的性能比较
算法 效果 | GBDT | LightGBM | XGBoost | PSO-XGBoost | |
正确率 | 6个特征 | 0.7365 | 0.8263 | 0.8157 | 0.8732 |
12个特征 | 0.8476 | 0.9326 | 0.9358 | 0.9479 | |
18个特征 | 0.8436 | 0.9320 | 0.9344 | 0.9488 | |
单样本检测时间(ms) | 6个特征 | 0.7807 | 1.9811 | 1.1482 | 1.8714 |
12个特征 | 0.7985 | 1.3657 | 1.3879 | 2.7465 | |
18个特征 | 0.9481 | 1.8268 | 1.3073 | 2.4442 |
图13 包含12个特征数据在不同Boosting算法下的检测准确率
从表4-1和图4-3中可以看出,在空调结霜数据上,虽然GBDT对单个样本的检测时间较短,但它的分类准确率最低,而LightGBM算法和XGBoost算法在空调结霜程度的检测上均具有比较好的效果,并且在使用粒子群算法对XGBoost的参数进行迭代优化后,对结霜程度检测的准确率又有了一定的提升。并且12个特征和18特征下的结霜程度检测准确率相差不大,而6个特征下的检测准确率相比之下则小很多,可以得知由递归特征消除选择出的12个特征在Boosting方式的算法上仍旧有效,与结霜程度的相关性较高,而被剔除掉的6个变化较小的特征对结霜程度的影响较小。
由于通过粒子群算法迭代得到的三组XGBoost的最优参数组合转存失败重新上传取消中,基学习器的数目
转存失败重新上传取消较大,意味着XGBoost中需要进行很多次迭代才能得到最终的结果,所以粒子群优化的XGBoost(PSO-XGBoost)的单样本检测时间最长,但这个时长远低于1s,对于实际的检测影响不大,因而以检测准确率作为衡量标准来看PSO-XGBoost算法的综合效果最好。
总结
本文采用的基于数据驱动的空调结霜程度检测方法很好地对这些传感器测量的值进行了利用,通过对空调结霜实验采集到的数据进行分析与挖掘,实现了对空调结霜程度的检测。本论文的主要工作内容如下:
(1)针对采集到的原始空调结霜实验数据存在的数据量过大的问题,论文首先研究了基于近邻排序算法的数据清洗方法,对原始数据中的大量重复数据进行了剔除。另外在对原始数据进行去重以后,通过绘制各个特征属性的变化曲线,发现有若干个属性的值始终保持不变或变化很小。针对这一现象,为了减小无关属性对最终检测准确率以及效率的影响,使用基于递归特征消除的方法进行了特征选择,找出了与结霜程度相关性较高的12个属性。
(2)研究了XGBoost算法的基本原理与实现,分析了它在空调结霜程度检测上的效果,并将XGBoost与AdaBoost、GBDT等基于Boosting方式的算法进行了比较,发现XGBoost算法在空调结霜程度检测上的综合效果最好,之后使用粒子群算法自动对XGBoost的最优参数组合进行寻找,发现粒子群算法对XGBoost空调结霜程度检测的准确率有一定提升。
参考文献
- Galhardas H , Florescu D , Shasha D , et al. An Extensible Framework for Data Cleaning[J]. Icde, 2000:312-312.
- 邹旺. 基于聚类的数据清洗算法的研究[D].哈尔滨工程大学,2015.
- 郝爽,李国良,冯建华,王宁.结构化数据清洗技术综述[J].清华大学学报(自然科学版),2018,58(12):1037-1050.
- 李军.基本近邻排序算法的改进与应用[J].宁夏师范学院学报,2017,38(03):72-77.
- 刘雪琼. 林业WEB黄页信息整合中数据去重关键技术研究[D].北京林业大学,2013.
- 叶焕倬,吴迪.相似重复记录清理方法研究综述[J].现代图书情报技术,2010(09):56-66.
- Weston J , Mukherjee S , Chapelle O , et al. Feature selection for SVMs[C]// Advances in Neural Information Processing Systems 13, Papers from Neural Information Processing Systems (NIPS) 2000, Denver, CO, USA. 2000.
- 曹晋,张莉,李凡长.一种基于支持向量数据描述的特征选择算法[J].智能系统学报,2015,10(02):215-220.
- 吴辰文,梁靖涵,王伟,李长生.基于递归特征消除方法的随机森林算法[J].统计与决策,2017(21):60-63.
- 叶小泉,吴云峰.基于支持向量机递归特征消除和特征聚类的致癌基因选择方法[J].厦门大学学报(自然科学版),2018,57(05):702-707.
- 张圆圆,侯艳,李康.多分类研究中的boosting算法[J].中国卫生统计,2018,35(01):142-145.
- 王玲娣. Adaptive Boosting算法及组合分类器的构建研究[D].江南大学,2018.
- 连克强. 基于Boosting的集成树算法研究与分析[D].中国地质大学(北京),2018.
- Chen Tianqi,Guestrin Carlos.XGBoost: A scalable tree boosting system[C]//Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.2016:785-794.
- Kennedy J . Particle Swarm Optimization[J]. Proc. of 1995 IEEE Int. Conf. Neural Networks, (Perth, Australia), Nov. 27-Dec.