数据集的基本统计计算是应用数学,以及统计应用中最常用的功能。如计算数据集的均值,方差,标准差,最大值,最小值,熵等等。Math.NET中的MathNet.Numerics.Statistics命名空间就包括了大量的这些统计计算的函数。今天就为大家介绍的是使用Math.NET计算相关系数的类:Correlation。

1.Math.NET计算相关系数的类

Correlation类在Math.NET在MathNet.Numerics.Statistics的命名空间下:

Correlation,静态类,计算2个数据集的相关度,如皮尔逊积差相关系数,加权皮尔逊积差相关系数,皮尔逊积差相关矩阵等;

相关系数的定义如下:

相关系数,或称线性相关系数、皮氏积矩相关系数(Pearson product-moment correlation coefficient, PPCC)等,是衡量两个随机变量之间线性相关程度的指标。它由卡尔·皮尔森(Karl Pearson)在1880年代提出[1],现已广泛地应用于科学的各个领域。 相关系数计算公式中,取值范围为[-1,1],r>0表示正相关,r<0表示负相关,|r|表示了变量之间相关程度的高低。特殊地,r=1称为完全正相关,r=-1称为完全负相关,r=0称为不相关。通常|r|大于0.8时,认为两个变量有很强的线性相关性。

Correlation类中的相关系数类型,如加权皮尔逊积差相关系数,皮尔逊积差相关矩阵的含义大家自己进行百度或者根据需要选择阅读。

2.Correlation的实现

在介绍其使用之前,还是介绍一下Correlation类型的实现和源码。该类型是静态类,其中的静态方法都是每一个类型的相关系数的计算,因此在使用的时候,根据需要进行调用即可。其包含的内容如下,为了方便大家观看,已经将其中的注释翻译为英文了,也相对于说明吧。

/// 2个数据集的相关度计算类

public static classCorrelation

{

/// 计算皮尔逊积差相关系数

/// 数据样本A.

/// 数据样本B.

/// 返回皮尔逊积差相关系数.

public static double Pearson(IEnumerable dataA, IEnumerabledataB)

{

int n = 0;

double r = 0.0;

double meanA = 0;

double meanB = 0;

double varA = 0;

double varB = 0;

using (IEnumerator ieA =dataA.GetEnumerator())

using (IEnumerator ieB =dataB.GetEnumerator())

{

while(ieA.MoveNext())

{

if (!ieB.MoveNext())

{

throw new ArgumentOutOfRangeException("dataB", Resources.ArgumentArraysSameLength);

}

double currentA =ieA.Current;

double currentB =ieB.Current;

double deltaA = currentA -meanA;

double scaleDeltaA = deltaA/++n;

double deltaB = currentB -meanB;

double scaleDeltaB = deltaB/n;

meanA +=scaleDeltaA;

meanB +=scaleDeltaB;

varA += scaleDeltaA*deltaA*(n - 1);

varB += scaleDeltaB*deltaB*(n - 1);

r += (deltaA*deltaB*(n - 1))/n;

}

if(ieB.MoveNext())

{

throw new ArgumentOutOfRangeException("dataA", Resources.ArgumentArraysSameLength);

}

}

return r/Math.Sqrt(varA*varB);

}

/// 计算加权皮尔逊积差相关系数.

/// 数据样本A.

/// 数据样本B.

/// 数据权重.

/// 加权皮尔逊积差相关系数.

public static double WeightedPearson(IEnumerable dataA, IEnumerable dataB, IEnumerableweights)

{

int n = 0;

double meanA = 0;

double meanB = 0;

double varA = 0;

double varB = 0;

double sumWeight = 0;

double covariance = 0;

using (IEnumerator ieA =dataA.GetEnumerator())

using (IEnumerator ieB =dataB.GetEnumerator())

using (IEnumerator ieW =weights.GetEnumerator())

{

while(ieA.MoveNext())

{

if (!ieB.MoveNext())

{

throw new ArgumentOutOfRangeException("dataB", Resources.ArgumentArraysSameLength);

}

if (!ieW.MoveNext())

{

throw new ArgumentOutOfRangeException("weights", Resources.ArgumentArraysSameLength);

}

++n;

double xi =ieA.Current;

double yi =ieB.Current;

double wi =ieW.Current;

double temp = sumWeight +wi;

double deltaX = xi -meanA;

double rX = deltaX*wi/temp;

meanA +=rX;

varA += sumWeight*deltaX*rX;

double deltaY = yi -meanB;

double rY = deltaY*wi/temp;

meanB +=rY;

varB += sumWeight*deltaY*rY;

sumWeight =temp;

covariance += deltaX*deltaY*(n - 1)*wi/n;

}

if(ieB.MoveNext())

{

throw new ArgumentOutOfRangeException("dataB", Resources.ArgumentArraysSameLength);

}

if(ieW.MoveNext())

{

throw new ArgumentOutOfRangeException("weights", Resources.ArgumentArraysSameLength);

}

}

return covariance/Math.Sqrt(varA*varB);

}

/// 计算皮尔逊积差相关矩阵

/// 数据矩阵

/// 皮尔逊积差相关矩阵.

public static Matrix PearsonMatrix(params double[][] vectors)

{

var m = Matrix.Build.DenseIdentity(vectors.Length);

for (int i = 0; i < vectors.Length; i++)

{

for (int j = i + 1; j < vectors.Length; j++)

{

var c =Pearson(vectors[i], vectors[j]);

m.At(i, j, c);

m.At(j, i, c);

}

}

returnm;

}

/// 计算皮尔逊积差相关矩阵

基于c#的相关性分析_开源Math.NET基础数学类库使用(11)C#计算相关系数相关推荐

  1. 开源Math.NET基础数学类库使用(11)C#计算相关系数

    阅读目录 前言 1.Math.NET计算相关系数的类 2.Correlation的实现 3.使用案例 4.资源                本博客所有文章分类的总目录:[总目录]本博客博文总目录-实 ...

  2. 开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

    原文:[原创]开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式 开源Math.NET基础数学类库使用系列文章总目录:   1.开源.NET基础数学计算组件Math. ...

  3. 【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  4. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  5. 【原创】开源Math.NET基础数学类库使用(06)直接求解线性方程组

    阅读目录 前言 1.数值分析与线性方程 2.Math.NET解线性方程源码分析 3.Math.NET求解线性方程的实例 4.资源                本博客所有文章分类的总目录:[总目录]本 ...

  6. 【原创】开源Math.NET基础数学类库使用(14)C#生成安全的随机数

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  7. 【原创】开源Math.NET基础数学类库使用(05)C#解析Delimited Formats数据格式

                   本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新  开源Math.NET基础数学类库使用总目录:[目录]开源Math.NET基础数学类库使用总目录 前言 ...

  8. 开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式

    开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式 原文:[原创]开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式 开源Math.NET基础数学类 ...

  9. 基于c#的相关性分析_基于数字高程模型的城市地貌与地名相关性分析——以兰州市为例...

    江西地名研究 基于数字高程模型的城市地貌与地名 相关性分析--以兰州市为例 文/张鹏丽,李育 提要:以兰州市为例,使用 ASTER 30米分辨率的数字高程模型DEM并提取了兰州市周边所有地名信息:通过 ...

最新文章

  1. MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql
  2. iOS安全攻防(十七):Fishhook
  3. python信息管理系统统计功能_用Python实现职工信息管理系统
  4. 首届CCF真题5-任务调度
  5. CSU 1120 病毒
  6. 页面滚动事件无效小记
  7. 元素跟随鼠标旋转,未待完续。。。。
  8. MATLAB脚本显示滤波器系数
  9. linux中搭建java开发环境
  10. face_recognition库的安装以及学习
  11. 诚之和:太平鸟难渡“抄袭劫”?
  12. 匿名游走 Anonymous Walk
  13. 程序员孔乙己!一个愤世嫉俗,脱离低级趣味的人!
  14. 规则引擎 Drools
  15. 大数据导论答案_2020高校邦《数据科学与大数据技术导论》课后作业答案
  16. 浏览器清理缓存快捷键
  17. SSL应用系列之三:CA证书颁发机构(中心)安装图文详解
  18. 《缠中说禅108课》84:本 ID 理论一些必须注意的问题
  19. 面向高维稀疏数据场景,阿里妈妈宣布开源XDL深度学习框架
  20. 收集一些英文MTV的网站

热门文章

  1. websphere日志出现乱码
  2. 计算机软件基础-(软件开发过程管理)
  3. NetworkX系列教程(10)-算法之三:关键路径问题
  4. XMLHttpRequest 对象
  5. shell 调试 2例
  6. 理解并取证:以太通道的动态协商机制的工作原理
  7. collection的iterator()方法
  8. 对tableView三种计算动态行高方法的分析
  9. NGUI UIRoot原理分析
  10. 【备忘录】物料分类账的启用配置