libsvm使用——毕设最终版

在这里插入图片描述


在这里插入图片描述

最终版:
每个工况下4组不同故障类型的数据,每组1048576个
提取特征时按照1310个为一组提取时域、频域、时频域特征,1048576/1310取整为800组

1、首先对第一种故障类型的数据进行分组,为后续提取特征做准备
x.real=0; %定义结构体,感觉这样比较方便
i=0;
for n=1:800
    x(n).real=data1(i+1:1310+i,1); %data为数据
    i=i+1310;    
end
2、提取特征(时域、频域、时频域)
for ii=1:800
    timestruct1(ii)= timeDomainFeatures(x(ii).real );%时域特征
end
for ii=1:800
    frequencystruct1 (ii)= frequencyDomainFeatures( x(ii).real,40960);%频域特征(信号采样频率是40960Hz)
end
for ii=1:800
   waveletstruct1(ii)  =  waveletFeatures(x(ii).real );   %时频域特征
end

然后把 timestruct1、frequencystruct1 、waveletstruct1拼接在一起

3、特征选择

这里我采用relieff算法
官方实例:https://ww2.mathworks.cn/help/stats/relieff.html

load fisheriris
[idx,weights] = relieff(meas,species,10)

数据格式自己运行 load fisheriris 就可以看到了
其中species为元胞数组,里面分为三类
故构建元胞数组:

for i=1:600
    species_2{i}='a';
end
>> for i =601:1200
 species_2{i}='b';
end
for i =1201:1800
 species_2{i}='c';
end
for i =1801:2400
 species_2{i}='d';
end

进行特征选择:

[idx,weights] = relieff(instance,species_2,10)

运行结果:
idx =

1 至 15 列

10    23     1     6     7    19     9    25    24     8    17    26     2     4    18

16 至 26 列

 5    20    13    22    21     3    12    16    15    14    11

weights =

1 至 9 列

0.6057    0.3795    0.1760    0.3795    0.3514    0.6041    0.5961    0.4766    0.5447

10 至 18 列

0.6178    0.0416    0.1150    0.3267    0.0588    0.0739    0.0866    0.4539    0.3721

19 至 26 列

0.5856    0.3397    0.2437    0.3110    0.6125    0.5262    0.5311    0.4056

权重从高到低画图:

bar(weights(idx))
xlabel('Predictor rank')
ylabel('Predictor importance weight')

图像:
在这里插入图片描述




选用了前12个特征参数(觉得12很好听 所以选了12个)
分别是10:RMS 1: averageAmplitude 6:mean 7:rootAmplitude 19:mean(平均频率)
23:E6 、 9:std 、 25:E8 、 17:clearanceFactor 、 24:E7 、2: min 4:Var



![在这里插入图片描述](https://img-blog.csdnimg.cn/20200508231115917.png) #### 4、交叉验证 这里我只使用了训练集数据,因为之前好像看过:如果交叉验证时使用全部数据,那么对测试集的预测准确率会偏高(虚高)

准备测试数据集:

x1.real=0; %定义结构体,感觉这样比较方便
i=737280;
for n=1:20
    x1(n).real=a1(i+1:12288+i,1); %data为数据
    i=i+12288;    
end
x2.real=0; %定义结构体,感觉这样比较方便
i=737280;
for n=1:20
    x2(n).real=a2(i+1:12288+i,1); %data为数据
    i=i+12288;    
end
x3.real=0; %定义结构体,感觉这样比较方便
i=737280;
for n=1:20
    x3(n).real=a3(i+1:12288+i,1); %data为数据
    i=i+12288;    
end
x4.real=0; %定义结构体,感觉这样比较方便
i=737280;
for n=1:20
    x4(n).real=a4(i+1:12288+i,1); %data为数据
    i=i+12288;    
end

工况二

idx =

1 至 15 列

10    23     1     6     7    19     9    24    25     2     4     8    17    18     5

16 至 26 列

20    26    22    13    21     3    11    16    15    12    14

weights =

1 至 9 列

0.6009    0.4929    0.1755    0.4929    0.3958    0.5999    0.5951    0.4915    0.5533

10 至 18 列

0.6093    0.1286    0.0909    0.3094    0.0749    0.0991    0.1169    0.4819    0.4096

19 至 26 列

0.5921    0.3853    0.2585    0.3347    0.6057    0.5150    0.4961    0.3840
[label_test,instance_test]=libsvmread('test_12features.scaled');
[predictlabel]=svmpredict(label_test, instance_test,model);
plotResult(label_test,predictlabel)

Accuracy = 96.25% (77/80) (classification)
label_test,predictlabel

工况三

idx =

1 至 15 列

24     7     1    23    25     6    10     9    19    20    21    18    26     8    17

16 至 26 列

 5     3     2     4    22    13    14    15    16    11    12

weights =

1 至 9 列

0.4565    0.2622    0.2706    0.2618    0.2892    0.4424    0.4611    0.3835    0.4226

10 至 18 列

0.4411    0.0563    0.0509    0.1194    0.0852    0.0807    0.0794    0.3244    0.4011

19 至 26 列

0.4079    0.4073    0.4019    0.1933    0.4519    0.4693    0.4470    0.3995
```
[label_test, instance_test] = libsvmread('test_12features.scaled');
>> [predictlabel]=svmpredict(label_test, instance_test,model);
```

Accuracy = 100% (80/80) (classification)

>> plotResult(predictlabel,label_test)

label_test,predictlabel

工况四

idx =

1 至 15 列

23    24    25     7    21     1     6    20    26    10    18    19     9    17     8

16 至 26 列

 3     5     4     2    22    13    14    15    16    11    12

weights =

1 至 9 列

0.4199    0.1844    0.1971    0.1844    0.1939    0.4128    0.4223    0.3076    0.3639

10 至 18 列

0.3996    0.0406    0.0241    0.1587    0.0709    0.0660    0.0648    0.3261    0.3947

19 至 26 列

0.3872    0.4107    0.4204    0.1765    0.4685    0.4596    0.4319    0.4075
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值