
借用知乎上某大佬[yetwanng]的一句话:paper又发不了,就是写这种东西,才能维持的了生活这样子。
今天我们来讲讲如何计算两个向量或者两个信号的相似性算例。
1.数学基础知识部分:
设有两个向量:
则用于度量两个向量的相似性可参考如下方法:
(1)Euclidean Distance
欧几里德距离、欧氏距离:值越小越相似。
(2)Manhattan Distance
曼哈顿距离:值越小越相似。
(3)Pearson Correlation Coefficient
皮尔森相关系数:值越大越相关。
(4)Cosine Similarity
余弦相似度:值越大越相似。
2. matlab函数基础部分
a=[2 0 0];
b=dot(a,a); % 向量的内积
c=sqrt(b); % 间接求向量的模
d=norm(a); % MATLAB提供的函数直接求向量a的模
i=-1;abs(i); %求i的绝对值
3. 案例计算
(1)技术路线
在做实验过程中不可避免的因为噪声影响而导致测量的数据与理想状态差别较大。噪声即是不可避免的,我们能做的就是在试验后如何选用合适的降噪方法对其进行降噪。
具体思路:使用了comsol多物理仿真软件模拟注水试验或抽水试验,将其水头数据作为标准信号,然后对此信号添加噪声,再进行降噪,最后求标准信号与降噪信号的相关性。
(2)Matlab参考代码
%%
%如何判断两个向量的相似性
clc;
clear;
format long g
%读取数据
%使用时只需要将path后面的字符串改成数据文件所在的文件夹路径即可
path='我是一个文件夹路径';
data=xlsread([path '水头.xlsx']);
for i=1:3
s_standard=data(:,i+1);
%添加均值为0,方差为0.3的高斯白噪声
WhiteNoise=sqrt(0.3).*randn(length(s_standard),1);
s_addN=s_standard+WhiteNoise;
s=wden(s_addN,'minimaxi','s','one',5,'sym8');
%绘图
figure(i)
subplot(1,3,1)
plot(s_standard);
title('原始光滑曲线');
subplot(1,3,2)
plot(s_addN);
title('加噪后的曲线');
subplot(1,3,3)
plot(s);
title('降噪后的曲线');
%(1)Euclidean Distance(欧几里德距离、欧氏距离)
d1(i)=sqrt(sum((s_standard-s).^2));
%(2)Manhattan Distance(曼哈顿距离)
d2(i)=sum(abs(s_standard-s));
%(3)Pearson Correlation Coefficient(皮尔森相关系数)
r(i)=corr(s_standard,s,'type','Pearson');
%(4)Cosine Similarity(余弦相似度):值越大越相似。
S(i)=dot(s_standard,s)/(norm(s_standard)*norm(s));
end
disp '相应的计算结果如下:'
[d1;d2;r;S]
%%
4.计算结果
本次计算是用了三组水头数据分别进行了加噪、降噪、求相关系数,因此结果第1~4行分别对应不同的相关系数,第1~3行分别对应1~3组水头数据。
5.绘图结果
data1:
data2:
data3:
从上图看,降噪方法有待进一步研究,但是基本趋势和原始曲线基本一样,而且从广泛认可的皮尔森相关系数上看,相关性在99.9%以上,还是可以的。
好啦,以上就是本期全部内容。想要代码'*.m'文件以及水头数据练习的可以公众号后台回复[相关性系数计算]即可自动获取。
写的这么认真,都不关注一下吗