天天看點

pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用

pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用
pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用

1、相關系數和假設校驗概述

相關系數和假設檢驗是數理統計中的基本概念和統計工具,對于機器學習模型的設定和優化政策有很大幫助。

1.1 相關系數

相關系數是反映兩變量間線性相關性關系的統計名額,是一種反映變量之間相關關系密切程度的統計名額,在現實中一般用于對于兩組資料的拟合和相似程度進行定量化分析,第用的般是皮爾遜相關系數( pearson),MLlib中預設的相關系數求法也是皮爾遜相關系數法,另還支援斯皮爾曼等級相關系數( spearman)。皮爾遜相關系的值是一個1≤ρxy≤1的數,用以判定兩個變量變化是同向還是反向,以便觀察這兩個變量是呈現正相關還是負相關,甚至為0時的”互相獨立”,其數學公式為:

pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用

即兩變量的協方差除以其标準差,極大程度上規避了單用協方差無法展現相關性的劣勢。

斯皮爾曼等級相關系數的公式如下:

pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用

該相關系數沒有皮爾遜那麼嚴格。

皮爾遜相關系數代表随着資料量的増加,兩組資料的差别将増大,而斯皮爾曼相關系數更注重兩組資料的拟合程度,即兩組資料随着資料量的増加而増長曲線不變。

1.2 假設校驗

假設檢驗是一種依據一定假設條件計算樣本某種并判斷是否符合總體規律,或判斷兩個樣本之間是否存在獨立性的統計學理論。假設檢驗的基本思想是小機率反證法思想,小機率思想認為小機率事件在一次實驗中基本不可能發生,是以在假設檢驗中,我們通常先假定一個假設Ho,然後選擇它的相反項為螽擇假設H1,通常以α=005作為小機率事件的界定線,稱之為顯著性水準,通過我們的樣本資料計算出一個機率值p,如果p≤0.05,那麼認為H0是會發生的,也就是說H0的發生是小機率事件,也就是認為當p ≤ 0.05時,否定原假設H0

常用的假設檢驗法有T檢驗,z檢驗,卡方檢驗和F檢驗。

卡方檢驗的一種常用的假設檢驗方法, Spark MLlib目前支援皮爾遜卡方檢測,包括“适配度檢定”( Goodness of fit)和“獨立性檢定"( independence)。其中适配度檢定是指樣本的發生次數(實際值)配置設定是否服從母體的次數配置設定(期望),獨立性檢定偏向于兩類變量之間的關系是否居于相關性。

适配度檢定舉例:全世界上千萬人統計人類出生時男孩和女孩的幾率是一樣的,某醫院對2018年100名新生嬰兒的性别做了統計,男孩56個,女孩44個,以此判定這個樣本是否符合母體的配置設定規律。

獨立性檢定舉例:性别和習慣用左右手是否有關。

2、調用方式

2.1 相關系數

依據我們輸入的類型不同,則其對應的輸出類型也不同,如果我們輸入的是兩個 JavaRDD,則輸出的是 double的值,這個值便是相關性系數;如果我們輸入的是 RDD(需通過 JavaRDD.rdd()進行轉換),則輸出的結果是一個相關系數矩陣。相關系數矩陣是計算各列相關系數而生成的一個矩陣,相關系數矩陣第第列生成的值就是原資料中第列和第列生成的相關系數。API是 Statistics(org. apache. spark. mllib. stat. Statistics)的corr()方法。

生成pearson相關系數:

//輸入的seriesX,seriesY是兩組JavaRDD類型的資料,代表兩個不同的變量//輸出的類型是doubleStatistics.corr(seriesX, seriesY,”pearson”);生成spearman相關系數://輸入的seriesX,seriesY是兩組JavaRDD類型的資料,代表兩個不同的變量//輸出的類型是doubleStatistics.corr(seriesX, seriesY,”spearman”);生成pearson相關系數矩陣和spearman相關系數矩陣://輸入的類型為RDDStatistics.corr(data,”pearson”);Statistics.corr(data,” spearman”);
           

2.2 假設檢驗

做适配度檢定和獨立性檢定時,需要輸入的參數關型不同,适配度檢定要求輸入的是 Vector.獨立性檢定要求輸入的是Matrix。調用的API是 Statistics.chiSqTest();

配度檢定:這裡依舊引用上例,新生嬰兒的性别是否符合母體規律,(樣本為2018年100名新生妥兒的性别做了統計,男孩56個,女孩44個)

Vector v = Vectors.dense(new double[]{56,44});ChiSqTestResult result = Statistics.chiSqTest(v);
           

獨立性檢定

原始資料表達:

pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用

//這裡要注意矩陣是按列優先填充的,故資料要以列的形式寫入

Matrix matrix = Matrixs.dense(2,2,new double[]{43.0,9.0,44.0,4.0});Statistics.chiSqTest(matrix);
           

3、 Spark中的實踐應用

3.1 相關系數的應用

原始檔案内容:(檔案名為: correlations txt,存放在 src/main/resources),第一列是凝血酶濃度(機關升),第二列是凝血時間(秒),下面探究這兩者之間的相性如何?

1.1 14

1.2 13

1.0 15

0.9 15

1.2 13

1.1 14

0.9 16

0.9 15

1.0 14

0.9 16

1.1 15

0.9 16

1.0 15

1.1 14

0.8 17

相關系數代碼實作:

Sparkconf conf = new SparkConf().setMaster("local").setAppName("Correlations");JavasparkContext jsc = new JavaSparkContext(conf);JavaRDD lines = jsc.textFile("src/main/resources/correlations.txt");//将源檔案讀取進來的第一列作為第一個變量JavaRDD seriesX =lines.map(x ->x split(" ")).map(x->Double.parseDouble(x[0]));//将源檔案讀取進來的第二列作為第二個變量JavaRDD seriesY =lines.map(x ->x split(" ")).map(x->Double.parseDouble(x[1]));//調用Statistics包下的corr()即可得到皮爾遜相關系數double corr = Statistics.corr(seriesX,seriesY,"pearson");//結果是-0.907,表名兩個變量呈現負相關趨勢,即一方增高一方降低System.out.println(corr);//擷取斯皮爾相關系數double corr2 = Statistics.corr(seriesX,seriesY,"spearman");//結果是-0.894System.out.println(corr);
           

相關系數矩代碼實作:

Sparkconf conf = new SparkConf().setMaster("local").setAppName("Correlations");JavasparkContext jsc = new JavaSparkContext(conf);JavaRDD lines = jsc.textFile("src/main/resources/correlations.txt");JavaRDD data =lines.map(x->x split(" ")).map(x ->Vectors. dense(Double. parseDouble(x[0]), Double. parseDouble(x[1])));//将JavaRDD轉化為RDDRDD data2 = data.rdd();//調用Statistics包下的corr()得到皮爾遜相關系數矩陣Matrix corr = Statistics.corr(data2,"pearson");//結果是//1.0 -0.9069678578088085//-0.9069678578088085 1.0/擷取斯皮爾曼相關系數矩陣Matrix corr = Statistics.corr(data2,"spearman");//結果是://1.0 -0.8942857152857139// -0.8942857152857139 1.0
           

3.2 假設檢驗的應用

3.2.1 适合度檢驗

背景:隻要是品質合格的骰子擲出1~6的幾率就應該是相同的,現在有一枚骰子擲出600次,統計出1~6的次數如下:90,85,123,91,86,125,判定該骰子是否有質

原假設Ho:骰子沒有問題

顯著性水準:a=0.05

代碼實作:(如果做适配度檢驗, Statistics. chiSqTest(v)需要輸入的是一個向量)

Sparkconf conf = new SparkConf().setMaster("local").setAppName("GoodnessOfFit");JavasparkContext jsc = new JavaSparkContext(conf);//做适配度檢定是需要的參數是一個VectorVector v = Vectors. dense(new double[] {90, 85, 123, 91, 86, 125});ChiSqTestResult result = Statistics.chiSqTest(v);System.out.println(result);
           

結果顯示:

Chi squared test summary:

method: pearson

degrees of freedom = 5

statistic = 17.56

pvalue=0.0035515235818343554

每一個值的輸出含義:

method:使用的方法,用的是皮爾遜卡方檢驗法

degrees of freedom:自由度,一般為樣本個數減1

statistic:檢驗統計量,一個用來決定是否可以拒絕原假設的證據,該值越大表示可以絕句原假設的理由越充分

pValue:根據顯著性檢驗方法得到的一個機率p值,該值<=0.05為顯著,通常這個值小于等于0.05,便認為有充足理由可以拒絕原假設

這裡的pValue = 0.00355 <= 0.05,則拒絕原假設,說明該骰子有問題。

3.2.2 獨立性檢定

顯著性水準:α = 0.05

代碼實作:(如果做獨立性檢驗, Statistics. chiSqTest()需要輸入的是一個矩陣)

Matrix m = Matrixs.dense(2,2,new double[]{43.0,9.0,44.0,4.0});//做獨立性檢驗時需要的參數為MatrixSystem.out.println(Statistics.chiSqTest(m));結果為:Chi squared test summary:method: pearsondegrees of freedom = 1statistic = 1.7774150400145103pvalue=0.1824670652605519裡 pvalue=0.182>0.05,表明可以接受原假設,即說明性别和慣用左右手沒有關系。
           
pearson相關系數_Spark機器學習-Java版(二)-相關系數和假設檢驗1、相關系數和假設校驗概述2、調用方式3、 Spark中的實踐應用