数据挖掘-BIOS场景分类

数据挖掘实验-BIOS

1.数据预处理

1.1读取、合并数据集

分别读取四个数据集:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVW7wmi6-1622002762894)(media/c8833e9eafd074b555fa16ff44f82f0e.png)]

合并:

在这里插入图片描述

总的数据集为:14543*19,最后一列数据为场景类别species

1.2数据清洗

缺失值检查:用isnull().sum()判断数据集是否存在缺失值,同时统计缺失值的个数。

在这里插入图片描述

统计发现,所有数据集都存在,无缺失值。

异常值处理:数据集中存在某些不可控的因素,存在一些异常的数据

在进行异常值处理之前,我希望观察到各个数据的散点图,这样可以让我们更加合理地判断什么是异常值。比如用箱线图判断和用正态分布判断是不一样的。但是这样会比较困难,因为数据较多。
这里采用核密度估计图 Kernel Density Estimation plot来看每个类别数据的概率分布。

为了统计fio各个参数中每个值出现的频率,从直方图’bar’引申到核密度估计图’kde’。

在这里插入图片描述

绘制fio各个类别的和核密度图(kde):

在这里插入图片描述

在这里插入图片描述

通过数据集的各个类别的分布情况:

在这里插入图片描述

linpack,mlc,tpc数据集也进行同样操作。从核密度图中可以看出,数据基本都几种的分布,故可以用3倍标准差、去除极端值的方法进行清洗。

将异常值定义为各特征数据与该特征的平均值偏差超过三倍标准差的数据,逐一对每个场景的原始数据进行异常值检测。

数据平均值:

在这里插入图片描述

数据标准差:

在这里插入图片描述

fio去除极端值:当前值-平均值 > 3倍标准差
的数据中,将其值赋值为nan,然后通过dropna方法去掉。

在这里插入图片描述

fio去除异常值后的数据:(同时保存为’fio_removed.csv’文件)

在这里插入图片描述

linpack,mlc,tpc数据集也进行同样的清洗操作。

1.3数据集成

清洗后再次合并数据集:发现一共删除了1546条数据

在这里插入图片描述

参数间关系:画出热力图

在这里插入图片描述

高度相关的类别可以去掉,从而减少数据集的维度,方便后面的计算。

由热力图发现TasksTotal和Tasksleeping,MemFree,MemUsed,SwapAvail是线性关系。
MemFree和TasksTotal,MemUsed,SwapAvail是线性关 Sysint与SysCsw互为线性关系。

对上面热力图分析后,剔除TasksRuning, TsaksSleeping, MemFree, MemUsed, SwapAvail,
SysCsw,降维,对剩余12个类别进行热力图相关性分析。剔除后的数据集如下:只剩13维。

在这里插入图片描述

重新画出剔除后的数据集的热力图如下:

在这里插入图片描述

1.4数据转换

用箱型图反应10个场景下各特征的数值分布:并保存‘Average1_boxplot.png’

在这里插入图片描述

在这里插入图片描述

图中可以发现:各个特征数量数量级相差很大。

样本各特征的量纲和数量级不均衡,在使用梯度下降算法时,不同的特征对模型参数的影响程度就会不一样。数据变换让不同的特征具有相同的尺度,这样在进行训练时各特征就能公平的调整模型参数。

将数据集进行标准差标准化法:得到标准化后的数据集。

在这里插入图片描述

1.5数据均衡处理

观察数据集中4种场景分别的数据集的数量:

在这里插入图片描述

发现场景‘tpc’数量最多,大概为其他场景的两倍,其他场景分别比较均匀。

故可以对场景‘tpc’
进行随机采样,只对它进行一半数量的采样即可。我们采用随机欠采样方法,即对数量较多的一类进行随机删除。

采样后数据集如下:发现各个场景数据集比较均衡了。

在这里插入图片描述

由于后面的训练集和测试集遵从8:2的划分,所以要先对数据集进行打乱,防止测试集或者训练集的场景不统一。打乱顺序如下:

在这里插入图片描述

1.6数据准备

标签编码:

方法一:采样one-hot编码:

在这里插入图片描述

方法二:直接编码

在这里插入图片描述

由于只有4个场景,所以我们采用直接编码的方式。

到此数据预处理已经完成,保存数据如下:

在这里插入图片描述

2.分类建模

2.1设计分类模型

我们采用DNN分类模型:采用pytorch中的DNN网络。

设计方案如下:

采用2层隐层的DNN模型,含有20个节点,激活函数选择relu函数。优化器选择梯度下降优化器,学习率选择为0.001,损失函数为交叉熵。迭代次数为30次(由于迭代次数增多,准确率越来越高),每次迭代抽取500组数据(batch=500)。采用torch中的cuda进行加速训练。

部分代码如下:具体在jupyter文件中

在这里插入图片描述

该方案的结果如下:

在这里插入图片描述

可以看出,随着epoch的增加,准确率在提高。

同时对于测试集,其预测结果如下:

在这里插入图片描述

对应的识别准确率、精确率、召回率、F1值:

在这里插入图片描述

对应的混淆矩阵如下:

在这里插入图片描述

由实验结果可以看出,其DNN分类模型对着4个场景的分类效果很好。

2.2不同DNN分类模型参数的比较

在上面设计方案中只改变激活函数,对应的准确率如下:

激活函数sigmoidtanhreLu
准确率97.42%99.95%99.95%

激活函数选择relu,只改变学习率:

学习率0.10.010.001
准确率100%100%99.95%

激活函数选择rule,学习率选择0.001,只改变batch:

Batch_size2000500100
准确率99.03%99.95%100.00%

激活函数选择relu,学习率选择0.001,batch选择2000,只改变隐藏节点的数量:

Hidden_nodes502052
准确率98.88%98.95%99.78%99.90%

注:以上的结果均为epoch=30的情况下进行,如果epoch减小,则准确率会相应的减小。

最终实验结果:

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值