【算法】-001 数据处理-均值、方差、协方差、相关系数
最近在项目中需要对数据进行简单处理,要求计算数据的均值、方差、相关系数等数据关系。
1、 均值
这里数据的均值只的是数据的算术均值(Arithmetic Mean),只所有数据之和再除以数据的个数,反应的是数据集中趋势的一个指标。
对于
n
n
个数据的数据集,算数平均值计算公式如下:
C++计算代码如下:
double CalculateArithmeticMean(std::vector<double> vData)
{
double dMean = 0;
if (vData.size() == 0)
{
return 0;
}
for (int i = 0; i < vData.size(); i++)
{
dMean += vData[i];
}
dMean = dMean / vData.size();
return dMean;
}
2、 方差
在统计学与概率论中,方差用于横向数据的集中程度。分为总体方差和样本方差。在统计描述中,方差用来计算每一个变量(观察值)与总体均数之间的差异。为避免出现离均差总和为零,离均差平方和受样本含量的影响,统计学采用平均离均差平方和来描述变量的变异程度。总体方差计算公式:
σ2 σ 2 为总体方差, X X 为样本数据,为总体均值, N N 为样本数目。
实际工作中,总体均数难以得到时,应用样本统计量代替总体参数,经校正后,样本方差计算公式:
其中 S2 S 2 为样本方差, X¯¯¯¯ X ¯ 为样本均值, n n 为样本例数。
C++计算代码如下:
double CalculateVariance(std::vector<double> vData)
{
if (vData.size() <= 1)
{
return 0;
}
double dMean = CalculateArithmeticMean(vData);
double dDiff = 0;
for (int i = 0; i < vData.size(); i++)
{
dDiff += (vData[i] - dMean)*(vData[i] - dMean);
}
dDiff = dDiff / (vData.size()-1);
return dDiff;
}
3、 标准差
标准差是方差的平方根。
double CalculateStandardDeviation(std::vector<double> vData)
{
if (vData.size() <= 1)
{
return 0;
}
double dSD = 0;
dSD = CalculateVariance(vData);
dSD = sqrt(dSD);
return dSD;
}
4、 协方差
协协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
C++计算方法如下:
bool CalculateCovariance(std::vector<double> vX, std::vector<double> vY,double& dCor)
{
if (vX.size() <=1 || vY.size() <=1 || vX.size() != vY.size())
{
return false;
}
double dMeanX = CalculateArithmeticMean(vX);
double dMeanY = CalculateArithmeticMean(vY);
double dCorvariance = 0;
for (int i = 0; i <vX.size(); i++)
{
dCorvariance += ((vX[i] - dMeanX)*(vY[i] - dMeanY));
}
dCorvariance /= (vX.size() - 1);
dCor = dCorvariance;
return true;
}
5、 相关系数
相关关系是一种非确定性的关系,相关系数是研究变量之间线性相关程度的量。又叫相关系数或线性相关系数,一般用字母
r
r
表示,用来度量两个变量间的线性关系。
相关系数的计算公式如下:
其中 Cov(X,Y) C o v ( X , Y ) 表示数据 X X 和的协方差, Var(X) V a r ( X ) 与 Var(Y) V a r ( Y ) 表示数据 X X 和的方差。
C++的实现方式如下:
bool CalculateCorrelationCoefficient(std::vector<double> vX, std::vector<double> vY, double& dCorCoe)
{
if (vX.size() <= 1 || vY.size() <= 1 || vX.size() != vY.size())
{
return false;
}
double dCor = 0;
bool hr = CalculateCovariance(vX, vY, dCor);
if (!hr)
{
return false;
}
double dVarianceX = CalculateVariance(vX);
if (dVarianceX == 0)
{
return false;
}
double dVarianceY = CalculateVariance(vY);
if (dVarianceY == 0)
{
return false;
}
double dCorrelationCoefficient = 0;
dCorrelationCoefficient = dCor / sqrt(dVarianceX*dVarianceY);
dCorCoe = dCorrelationCoefficient;
return true;
}