笔者在机器学习、神经网络、SVM、二分类等相关的文章中经常看见利用声呐(岩石/水雷)数据集。都是拿它来跑程序看看算法性能,但没探究过这里面的特征究竟代表什么,甚至有人说60个特征代表不同方向返回的声音强度(如果直接根据声音强度能识别出水雷就太好了呢🙂)。前段时间探究了一下,这里简单谈谈。数据集在一些网站可以下载,完整数据和解释说明以及想应的学习资料都在文末链接里面。中小型数据集,适合做二分类,初学神经网络的同学拿去练练手挺好的
除部分明显粗糙图像来自论文“Analysis of Hidden Units in a Layered Network Trained to Classify Sonar Targets”的截图,此文其他内容完全是本人所写(公式显示不正常 所以截图发上来)研究方向相关,因为没什么厉害的发现,写出来给同仁参考一下。
导师说:“学术要适当往回走,不能只是会用特征搞个黑匣子,得清楚特征提取怎么做的!”
根据论文中对实验过程的描述,绘制的过程图如下:
上述论文中提到:
数据是声纳从沙质海床上的金属圆柱体和圆柱状岩石收集的。两个目标的长度约为5英尺,在10米的范围内检测圆柱体根据反射的强度(4.0到15.0dB信噪比),从一组1200次反射中选出208次(111次圆柱反射和97次岩石反射)。
数据集共208行,61列,最后一列是标签,R代表岩石,M代表水雷。
上图显示的是从岩石和圆柱体返回的样本时域图像。原始信号的预处理是首先对时域信号进行滤波,提取频谱信息
上图是根据STFT时频谱图像的大小设置的一个窗,含有60个连续的有距离的划分空间,在时间轴上自t_0起,每隔δ_t截取一段时间间隔∆t。同时在频率轴上自v_0起,每隔δ_f截取一段频率间隔∆v,且∆v=δ_f,
第η个孔径面积覆盖的频率为f_η∈[v_0+(η-1) δ_f,v_0+(η-1)δ_f+∆v],覆盖的时间范围为t_η∈[v_0+(η-1) δ_t,v_0+(η-1)δ_t+∆t]
各板块的局部能量归一化后映射到频率轴,散点连成曲线,构成局部能量谱随频率变化的光谱包络线。最后根据包络线继续做特征提取,进一步分析
特征是0~1的小数,每个数字代表特定频带内的能量,在特定时间段内积分。
STFT中spectrogram返回的PSD功率谱密度p,表征单位频率上信号的能量,
功率谱定义为P=dw(t)/dt,故p时频域上求面积积分为局部的能量谱
P_(t_0,v_0 ) (η)=E_η=∫▒〖∫▒pdtdf=pS_η 〗
其中S_η是PSD图像覆盖第η个孔径的面积,
笔者猜测的完整处理过程如下:
对每一个局部能量谱拿出来做简单二分类,结果遍历阈值求各自的最高正确率,由下图可见正确率高的就这么几个。说明如果拿数据集中60个归一化后的局部能量谱当作真正的特征,则过于冗余
看到这里各位同学应该懂了吧,所谓的60个特征其实本质上只提供了一个真正的特征–能量谱!之前看到有人讲解SVM支持向量机的时候用了这个数据集,但分类的正确率不算很高,原因就在这里了:特征太单一!
实际做起声呐图像或者回波信号的分类,能量谱最多只是候选特征之一。
SVM解决二分类问题,含水雷-岩石分类数据集并对四种核函数做调参
笔者使用过的岩石-水雷分类相关资料打包如下,适合机器学习初学者
sonar数据集、个人解释、根据《Python机器学习–预测分析核心算法》一书 用Python做分类的过程记录及对应代码
论文Analysis of hidden units in a layered network trained to classify sonar targets