OpenCV系列教程(四) 计算 N 维数据关系
一、 计算 N 维数据关系
统计学里最基本的概念就是样本的均值、方差、标准差、协方差等,下面我们给定一个包含 n个样本的集合,分别进行分析。
1 均值
未经分组的均值计算公式:
2 方差
均值描述的是样本集合的中间点,它告诉我们的信息是有限的,而方差给我们描述的是样本集合的各个样本点到均值之间的平均距离。单一正态总体方差计算公式:
3 标准差
方差对平均距离计算了平方,为了还原回原来的数量级,就有了标准差,标准差是对方差开根号,计算公式:
标准差描述各个点与均值距离的平均值,值越小表示数据越集中,例如:[0,8,12,20]和[8, 9,11,12],两个集合的均值都是 10,但显然两个集合各个值差别是很大的,计算两者的标准差, 前者是 8.3,后者是 1.8,显然后者较为集中。
4 协方差
如果有另一个样本集合,也就是两个以上的样本集合,那么这两个样本集合间的各个点在时间 或空间上有什么关系,其中一个样本中的点会不会像另一个样本中的点保持着一样的变化趋势,均值、方差、标准差都是解决一维内部各数据间的相关性问题(我们村的贫富差距问题)。当出现多维集合时,各个维度间的数据有无关联,可以参照一维的方法,首先将每个维度样本集合中每一个点的数据值减去该维度的平均值,再乘以另外一个维度的同样的差值,最后除以 n-1 就是协方差(n就是每个维度样本个数,各维度一样),这个协方差就可以反映两个维度间各数据的相关性,计算公式:
协方差的结果有什么意义?如果结果为正值,则说明两者是正相关的,如果结果为负值,则说 明两者是负相关的,如果结果为 0,则表示两者之间没有关系。协方差只是说明了线性相关的方向问题,即从正无穷到负无穷,不能说明相关的程度,因为这个值可能很大也可能很小,所以还引出了相关系数=两个维度的协方差/(两个维度的标准差),其值始终在-1 到 1 之间变化。
当出现多维数据时,若要对多维数据的相关性进行分析,那么就要用到协方差矩阵
通过 opencv 接口完成计算的例子:
#include
#include
using namespace std;
using namespace cv;
int main(int argc, char const *argv[])
{
Mat samples = (Mat_(5, 3) << 90, 60, 90, 90, 90, 30, 60, 60, 60, 60, 60, 90, 30, 30, 30);
Mat cov, mu; //mu:保存均值 //cov:保存协方差
calcCovarMatrix(samples, cov, mu, CV_COVAR_NORMAL | CV_COVAR_ROWS);//CV_COVAR_COLS
cout << "means : "<< endl;
cout << mu << endl;
cout << cov << endl;
cout << "cov : " << endl;
cout << cov/5 << endl;
waitKey(0);
return 0;
}
执行结果
猜你喜欢LIKE
相关推荐HOT
更多>>javabean是什么?
在Java中,JavaBean是一种符合特定规范的普通Java类,用于封装数据和提供操作数据的方法。JavaBean是一种重要的设计模式,用于实现面向对象编程...详情>>
2023-06-06 16:27:20java零基础入门到精通怎么学?
Java是一门广泛应用于企业级开发和大型应用程序的编程语言。要从零基础入门到精通Java,需要以下步骤和建议:1.学习基础知识:开始学习Java编程...详情>>
2023-06-05 17:02:00token是什么意思
Token是“令牌”的意思,它通常被用于身份验证和授权。在计算机系统中,当用户通过身份验证后,系统会颁发一个Token给用户,用于标识用户身份和...详情>>
2023-04-20 10:57:41虚函数的作用和实现原理
在父类中声明虚函数:在父类中通过在函数声明前加上 virtual 关键字来声明一个虚函数。需要注意的是,虚函数的使用需要谨慎,因为虚函数的调用...详情>>
2023-04-14 14:20:27