如何用matlab计算皮尔逊相关系数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用matlab计算皮尔逊相关系数相关的知识,希望对你有一定的参考价值。
function coeff = myPearson(X , Y)% 本函数实现了皮尔逊相关系数的计算操作
%
% 输入:
% X:输入的数值序列
% Y:输入的数值序列
%
% 输出:
% coeff:两个输入数值序列X,Y的相关系数
%
if length(X) ~= length(Y)
error('两个数值数列的维数不相等');
return;
end
fenzi = sum(X .* Y) - (sum(X) * sum(Y)) / length(X);
fenmu = sqrt((sum(X .^2) - sum(X)^2 / length(X)) * (sum(Y .^2) - sum(Y)^2 / length(X)));
coeff = fenzi / fenmu;
end %函数myPearson结束
放进matlab
然后
??? function coeff = myPearson(X , Y)
|
Error: Function definitions are not permitted at the prompt or in scripts. 参考技术A 1、相关系数就用命令corrcoef
min(min(corrcoef(x1, x2))) 就是x1,x2之间的相关系数。
比如
t = (1:0.1:100)';
w = 2*pi;
x1=sin(w*t)+randn(size(t));
x2=cos(w*t)+randn(size(t));
x3=sin(w*t)+randn(size(t));
x1_x2 = min(min(corrcoef(x1, x2)))
x1_x3 = min(min(corrcoef(x1, x3)))
2、用corrcoef函数
设a1,b1,c1,d1 ,a2,b2,c2,d2 分别为f(x)和g(x)的系数
x=[a1,b1,c1,d1];
y=[a2,b2,c2,d2];
z=corrcoef(x,y)
机器学习中如何用筛选器检测冗余?
筛选器试图在特征丛林中进行清洗,它独立于后续使用的任何机器学习方法。它基于统计方法找出冗余或无关特征。一般来讲,筛选器的工作流所图:
通过使用相关性,很容易看到特征之间的线性关系。这种关系可以用一条直线来拟合。在下面这些图中,我们可以看到不同程度的相关性,以及一个用红色虚线描绘出的潜在线性依赖关系(一个拟合的一维多项式)。每幅图上方的相关系数Cor(X1,X2)是用皮尔逊相关系数计算出来的(皮尔逊r值),采用的是scipy.stat里的rearsonr()函数。
给定两个大小相等的数据序列,它会返回相关系数值和p值所组成的元组。p值是该序列产生于一个不相关系统的概率。换句话说,p值越高,我们越不能信任这个相关系数:
在第一种情况下,知道这两个序列是相关的。而在第二种情况下,我们仍然有一个非零的r值。
然而,p值基本上告诉这个系数是什么样的,不应对它过多关注。
在前三个具有高相关系数的情形中,我们可能要把X1或X2扔掉,因为它们似乎传递了相似的信息。
然而在最后一种情况中,我们应该所两个特征都保留。在应用中,这种决策当然是由p值驱动的。
尽管这种方法在前面这个例子中工作得不错,但在实际应用中却并不好。基于相关性的特征选择方法的一个最大缺点就是,它只能检测出线性关系(可以用一条直线拟合的关系)。如果在非线性数据中使用相关性,就有问题了。
除右下图以外的所有图中,尽管人的眼睛可以立即看到X1或X2之间的关系,却没法发现相关系数。很明显,相关性在检测线性关系中是很有用的,但对于其他关系就不行了。而对于非线性关系,可以用互信息。
以上是关于如何用matlab计算皮尔逊相关系数的主要内容,如果未能解决你的问题,请参考以下文章