日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2025/3/20 C# 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于c#的相关性分析_开源Math.NET基础数学类库使用(11)C#计算相关系数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據集的基本統計計算是應用數學,以及統計應用中最常用的功能。如計算數據集的均值,方差,標準差,最大值,最小值,熵等等。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#计算相关系数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。