阅读目录

  • 前言
  • 1.Math.NET计算相关系数的类
  • 2.Correlation的实现
  • 3.使用案例
  • 4.资源

               本博客所有文章分类的总目录:【总目录】本博客博文总目录-实时更新 

开源Math.NET基础数学类库使用总目录:【目录】开源Math.NET基础数学类库使用总目录

回到目录

前言

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

  如果本文资源或者显示有问题,请参考 本文原文地址:http://www.cnblogs.com/asxinyu/p/4301519.html

回到目录

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

/// <summary>2个数据集的相关度计算类</summary>
public static class Correlation { /// <summary>计算皮尔逊积差相关系数</summary> /// <param name="dataA">数据样本A.</param> /// <param name="dataB">数据样本B.</param> /// <returns>返回皮尔逊积差相关系数.</returns> public static double Pearson(IEnumerable<double> dataA, IEnumerable<double> dataB) { int n = 0; double r = 0.0; double meanA = 0; double meanB = 0; double varA = 0; double varB = 0; using (IEnumerator<double> ieA = dataA.GetEnumerator()) using (IEnumerator<double> 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); } /// <summary>计算加权皮尔逊积差相关系数.</summary> /// <param name="dataA">数据样本A.</param> /// <param name="dataB">数据样本B.</param> /// <param name="weights">数据权重.</param> /// <returns>加权皮尔逊积差相关系数.</returns> public static double WeightedPearson(IEnumerable<double> dataA, IEnumerable<double> dataB, IEnumerable<double> weights) { int n = 0; double meanA = 0; double meanB = 0; double varA = 0; double varB = 0; double sumWeight = 0; double covariance = 0; using (IEnumerator<double> ieA = dataA.GetEnumerator()) using (IEnumerator<double> ieB = dataB.GetEnumerator()) using (IEnumerator<double> 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); } /// <summary>计算皮尔逊积差相关矩阵</summary> /// <param name="vectors">数据矩阵</param> /// <returns>皮尔逊积差相关矩阵.</returns> public static Matrix<double> PearsonMatrix(params double[][] vectors) { var m = Matrix<double>.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); } } return m; } /// <summary> 计算皮尔逊积差相关矩阵</summary> 

转载于:https://www.cnblogs.com/chen110xi/p/4635698.html

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

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

    数据集的基本统计计算是应用数学,以及统计应用中最常用的功能.如计算数据集的均值,方差,标准差,最大值,最小值,熵等等.Math.NET中的MathNet.Numerics.Statistics命名空间 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. 开源Math.NET基础数学类库使用(01)综合介绍

    该文章为转载文章,原文文章地址,请点击此处. 前言 几年前接触这个组件的时候,只需要在.NET平台进行一些常规的微积分计算,功能还比较少,只限于常规的数值计算,现在已经功能越来越多了,应该是目前最好的 ...

最新文章

  1. 如何高效地爬取链家的房源信息(一)
  2. ubuntu下面搭建SolrCloud集群
  3. 刚在虚拟机上装的Linux系统,ifconfig后IP地址怎么成了127.0.0.1了
  4. $(function(){}) 与(function(){})()在执行时的优先级
  5. java中iterator_如何在Java中读取CSV文件-Iterator和Decorator的案例研究
  6. 课后作业-阅读任务-阅读笔记4
  7. 机器学习十大经典算法之朴素贝叶斯分类
  8. tomcat 错误页面html,Nginx整合Tomcat后配置友好错误界面
  9. 简单易懂的Android ROM定制与修改教程
  10. SQL:postgresql查询某个字段最大值行的其他字段值
  11. 又出现*_limited.sof的问题了,还有另一个奇怪的现象!
  12. 自动生成_橙瓜码字小说自动生成器,对话描写,景物描写,外貌描写自动生成...
  13. 5安卓输入法键盘显示 搜索_手机输入法谁更黑科技?讯飞搜狗百度大PK
  14. 云服务器网卡mac地址修改,服务器mac地址修改教程
  15. 微信扫码登陆 无需开放平台实现方案
  16. SHN-PEG2000-Pyrene,Pyrene-PEG2000-NHS
  17. 《互联网周刊》发布2019快时尚品牌排行榜
  18. hr面试性格测试30题_HR性格测试题.doc
  19. SubShader中的LOD
  20. 在1705年第一个电灯泡是如何被发明的?

热门文章

  1. python项目归纳总结-python项目总结
  2. python官方网站地址-哪里能找到 Python 视频教程地址?
  3. python开发工程师面试题-2019超实用Python开发工程师面试题分享
  4. python流程图-python中的图表渲染(流程图可视化)
  5. 精通python爬虫框架-精通Python爬虫框架Scrapy.pdf
  6. python之禅中文-「翻译」Python之禅
  7. python3项目-终于找到python3项目实战教程
  8. 爬虫好学吗python-爬虫Python入门好学吗?学什么?
  9. 怎样看python源代码-如何直接从IDE读取Python源代码
  10. python编程if语法-讲解Python中if语句的嵌套用法