本帖最后由 zwlbeyond 于 2020-5-19 14:30 编辑
数据集使用了PHM08挑战数据集,是涡轮风扇发动机退化模拟数据集。
训练数据包含218个运行到故障模拟。这组测量被称为“集合”。
每个集合成员都是一个包含26列的表。 这些列包含有关机器ID,时间戳,3个操作条件和21个传感器测量值的数据。
PHM-2008数据是NASA在2008年公开的飞机发动机全寿命性能仿真数据,仿真平台为大型飞机涡扇发动机仿真软件C-MAPSS,模拟的是一个90000磅推力级的发动机模型。
MATLAB 进行预测性维护 2020.05.09-------夜莺与玫瑰1、案例描述(导入数据)
%%Data import
t = readtable('train.txt');
t(:,end) = []; %Discard last column of loaded data as all are empty ''
% Add variable names to the table
VarNames = {...
'id', 'time', 'op_setting_1', 'op_setting_2', 'op_setting_3', ...
'sensor_1', 'sensor_2', 'sensor_3', 'sensor_4', 'sensor_5', ...
'sensor_6', 'sensor_7', 'sensor_8', 'sensor_9', 'sensor_10', ...
'sensor_11', 'sensor_12', 'sensor_13', 'sensor_14', 'sensor_15', ...
'sensor_16', 'sensor_17', 'sensor_18', 'sensor_19', 'sensor_20', ...
'sensor_21'};
t.Properties.VariableNames = VarNames;
IDs = t{:,1}; %提取出ID,第一列数据
nID = unique(IDs); %不同编号,代表不同的发动机
degradationData = cell(numel(nID),1); %退化数据初始化
%将每一组发动机下的数据提取出来
for ct=1:numel(nID)
idx = IDs == nID(ct);
degradationData{ct} = t(idx,:);
end
degradationData(1:5)
head(degradationData{2}) %返回表的前8行复制代码
退化数据都被加载到了degradationData变量中,从图1中可以看出,每组退化数据都包含26列数据,再从图2中看出,26列数据中包括了机器ID,时间戳,3个操作条件和21个传感器测量值的数据。
2、划分训练数据集和验证数据集通过查看工作区,发现退化数据degradationData总共有218组,通常我们需要将这些数据分为训练数据集和验证数据集。为了更充分地使用所有数据,我们将所有数据平分为k份,然后每一份都做一次验证数据集(其余数据做训练集),这样我们就一共有了k对训练-验证数据,这种方法叫做k折交叉验证。代码实现方法如下:
rng('default') % 生成随机数,使用"default"是为了使用特定的随机数,这样大家的运行结果就都一样了
numEnsemble = length(degradationData);
numFold = 5; %交叉验证分区数,即k的值
cv = cvpartition(numEnsemble, 'KFold', numFold); %为数据创建交叉验证分区,K-折交叉验证
trainData = degradationData(training(cv, 1)); %读取第1组训练数据集
validationData = degradationData(test(cv, 1)); %读取第1组验证数据