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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

發布時間:2025/1/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀目錄

  • 目錄
  • 1 算法的基本描述
  • 2 算法的應用場景。
  • 3算法的優點和缺點
  • 4 算法的輸入數據、中間結果以及輸出結果
  • 5 算法的代碼參考
  • 6 共享

相關與回歸:我的線條如何?

作者 白寧超
2015年10月25日22:16:07

摘要:程序員眼中的統計學系列是作者和團隊共同學習筆記的整理。首先提到統計學,很多人認為是經濟學或者數學的專利,與計算機并沒有交集。誠然在傳統學科中,其在以上學科發揮作用很大。然而隨著科學技術的發展和機器智能的普及,統計學在機器智能中的作用越來越重要。本系列統計學的學習基于《深入淺出統計學》一書(偏向代碼實現,需要讀者有一定基礎,可以參見后面PPT學習)。正如(吳軍)先生在《數學之美》一書中闡述的,基于統計和數學模型對機器智能發揮重大的作用。諸如:語音識別、詞性分析、機器翻譯等世界級的難題也是從統計中找到開啟成功之門鑰匙的。尤其是在自然語言處理方面更顯得重要,因此,對統計和數學建模的學習是尤為重要的。最后感謝團隊所有人的參與。( 本文原創,轉載注明出處:相關與回歸:我的線條如何? )

回到頂部

目錄


【程序員眼中的統計學(1)】 信息圖形化:第一印象

【程序員眼中的統計學(2)】集中趨勢度量:分散性、變異性、強大的距

【程序員眼中的統計學(3)】概率計算:把握機會

【程序員眼中的統計學(4)】離散概率分布的運用:善用期望

【程序員眼中的統計學(5)】排列組合:排序、排位、排

【程序員眼中的統計學(6)】幾何分布、二項分布及泊松分布:堅持離散

【程序員眼中的統計學(7)】正態分布的運用:正態之美

【程序員眼中的統計學(8)】統計抽樣的運用:抽取樣本

【程序員眼中的統計學(9)】總體和樣本的估計:進行預測

【程序員眼中的統計學(10)】假設檢驗的運用:研究證據

【程序員眼中的統計學(11)】卡方分布的應用

【程序員眼中的統計學(12)】相關與回歸:我的線條如何?

回到頂部

1 算法的基本描述

1.1 算法描述

為了了解兩個變量(自變量和因變量)之間的相關關系,利用線性回歸法對二變量數據進行分析,得出最佳擬合線和相關系數,從而通過一個變量的值,估計推測另一個變量的值。

1.2 定義

假如有一個二變量數據分布如下:

X

x1

x2

x3

x4

……

xn-2

xn-1

xn

Y

y1

y2

y3

y4

……

yn-2

yn-1

yn

變量X與Y的取值一一對應且呈現線性相關的關系。

1.3 符號解釋

X:表示自變量
Y:表示因變量
xi:表示自變量的取值

yi:表示因變量的取值

1.4 計算方法

1、假設最佳擬合線的方程為:y=ax+b

2、計算自變量X和因變量Y的均值:,

3、利用最小二乘法回歸法求最佳擬合線的斜率:

4、計算最佳擬合線的切距:

5、由求得的斜率和切距得出最佳擬合線的方程:

6、計算自變量X和因變量Y的標準差:,

7、計算相關系數:

8、通過相關系數判斷所求最佳擬合線與數據的擬合度,規則如下:

(1)如果相關系數的絕對值越接近1,則所求最佳擬合線的擬合度越高,可用于數據預測。

(2)如果相關系數的絕對值越接近0,則所求最佳擬合線的擬合度越低,不推薦用于進行預測(預測的結果可能不準確)。

回到頂部

2 算法的應用場景。

2.1 該場景下算法描述

案例描述:有一個不同場次的預計天晴時數和音樂會聽眾人數的關系數據樣本,利用這些數據,如何基于音樂會當天預計天晴時數(小時)來估計出票情況。

2.2 該場景下算法定義

案例定義:有一個二變量數據同時給出預計天晴時數和音樂會聽眾人數,如下所示:

天晴時數(小時)

1.9

2.5

3.2

3.8

4.7

5.5

5.9

7.2

音樂會聽眾人數(百人)

22

33

30

42

38

39

42

55

如果音樂會當天預計天晴時數可能為4.3小時,請問音樂會聽眾人數可能會有多少人?

2.3 該場景下算法中符號解釋

天晴時數:表示自變量

聽眾人數:表示因變量

2.4 該場景下算法計算方法

1、假設最佳擬合線的方程為:y=ax+b

2、計算天晴時數和聽眾人數的均值:

3、利用最小二乘法回歸法求最佳擬合線的斜率:

4、計算最佳擬合線的切距:

5、由求得的斜率和切距得出最佳擬合線的方程:

6、計算天晴時數和聽眾人數的標準差:

7、計算相關系數:

8、通過相關系數判斷所求最佳擬合線與數據的擬合度并得出預測結果:

由于r接近1,說明音樂會聽眾人數和預計天晴時數之間有很強的正相關。換句話說,根據已有的數據,利用最佳擬合線根據預計天晴時數給出了期望音樂會聽總人數的合理的良好估計。

當音樂會當天預計天晴時數可能為4.3小時,利用最佳擬合線方程,那么就可估計當天音樂會聽眾人數大約會是3868人。

回到頂部

3算法的優點和缺點

3.1 本算法優點

優點:發掘變量數據間的線性相關模式,并能為預測提出意見和結果。

3.2 本算法缺點

缺點: 只適用于對已有的數據信息進行估計,不一定適用于數據限制以外的范圍。以音樂會為例,當音樂會當天預計天晴時數可能為8小時,就不一定能良好估計聽眾人數可能會有多少人。

3.3 本算法適應場景

呈因果關系的變量之間,由原因因素值估計預測結果因素值。如光照時長與水稻產量。

3.4 本算法不適應場景

無因果關系的變量之間,例如,人的體重與身高。

3.5 本算法適用的數據類型

本算法適用于double數據類型,默認保留三位小數,可以自行設定保留位數。

回到頂部

4 算法的輸入數據、中間結果以及輸出結果

4.1 本算法輸入數據

?
1 2 3 4 5 * @param twoVarData double[][[],表示樣本數據 * @param testiVar double,因變量測試值 * @param fraDigits int,結果保留幾位小數

4.2 本算法中間結果

?
1 2 3 4 5 6 7 8 9 10 11 * @param iVarAvg double,表示自變量的均值 * @param dVarAvg double,表示因變量的均值 * @param slope double,表示最佳擬合線的斜率 * @param tangentDistance double,表示切距 * @param Sx double,表示自變量的標準差 * @param Sy double,表示因變量的標準差

?

4.3 本算法輸出結果

?
1 2 3 * @return result String[4],包含{斜率,切距,最佳擬合線方程,相關系數}結果字符型數值 * @return estValue double,因變量估計值

?

回到頂部

5 算法的代碼參考

5.1 類和方法基本描述

類源碼:見源程序:Statistics.src.CorrelationAndRegression

利用相關與回歸原理計算二變量[自變量和因變量]數據的最佳擬合線,并通過最佳擬合線[y=a+bx]來挖掘二變量[自變量和因變量]數據之間的線性關系,從而通過自變量的值預測估計因變量的值。

5.2 類和方法調用接口

見源程序:Statistics.src.CorrelationAndRegression

CorrelationAndRegression.java 下包含如下方法:

calculateAvgValue(double[] varData,int fraDigits)//計算變量的均值

calculateSlope(double[][] twoVarData,int fraDigits) //計算最佳擬合線的斜率

calculateTangentDistance(double slope,double iVarAvg,double dVarAvg,int fraDigits) //計算最佳擬合線的切距

calculateStandardDeviation(double[] varData,int fraDigits)//計算變量的標準差

calculateCorrelationCoefficient(double slope,double Sx,double Sy,int fraDigits) //計算相關系數

calculateEstimatedValue(double slope,double tangentDistance,double testiVar,int fraDigits) //計算因變量的估計值

analyze(double[][] twoVarData,int fraDigits) //回歸分析并得出結果

調用封裝方法:Statistics.src.utils.ScoreUtil

ScoreUtil.java中的方法:

getFractionDigits(double, int) //對數值保留幾位小數

5.3 源碼

import utils.ScoreUtil;/*** 相關與回歸* @description 利用相關與回歸原理計算二變量[自變量和因變量]數據的最佳擬合線,* 并通過最佳擬合線[y=a+bx]來挖掘二變量[自變量和因變量]數據之間的關系,從而通過自變量的值預測估計因變量的值。* 應用場景:例如,通過天氣狀態預測演唱會到場的人數;或者通過光照時長來估計植物的生長情況。* 局限性:只能根據已有的數據信息進行估計,不一定適用于數據限制意外的范圍。* 例如,現有2000年到2010年的數據信息,就不能預測估計2010年以后的數據。* @author candymoon* @2015-8-13下午4:19:57*/ public class CorrelationAndRegression {/*** 求變量值的平均值(公式:平均值=總和/總數)* @param varData 變量數據值* @param fraDigits 結果保留位數* @return 平均值*/public static double calculateAvgValue(double[] varData,int fraDigits){double avgValue = 0;int len = varData.length;//數組長度for (int i = 0; i < varData.length; i++) {avgValue += varData[i];}//計算均值avgValue = avgValue/len;//并將結果保留3位小數(四舍五入)String avgValue_String = ScoreUtil.getFractionDigits(avgValue, fraDigits);avgValue = Double.valueOf(avgValue_String);return avgValue;} /*** 計算最佳擬合線(y=a+bx)的斜率b* @description 最佳擬合線(y=a+bx)的斜率b的計算公式為:b=∑((x-xAvg)(y-yAvg))/∑(x-xAvg)2* ,其中x為自變量,xAvg為自變量均值,y為因變量,yAvg為因變量均值。* @param twoVarData 二變量數據* @param fraDigits 結果保留位數* @return 斜率*/public static double calculateSlope(double[][] twoVarData,int fraDigits){double slope = 0;//斜率double iVarAvg = 0;//自變量均值double dVarAvg = 0;//因變量均值//計算自變量均值和因變量均值iVarAvg = calculateAvgValue(twoVarData[0],fraDigits);dVarAvg = calculateAvgValue(twoVarData[1],fraDigits);int iVarLen = twoVarData[0].length;double numerator = 0;//分子 double denominator = 0;//分母//計算公式的分子和分母for (int i = 0; i < iVarLen; i++) {double x = twoVarData[0][i];double y = twoVarData[1][i];numerator += (x-iVarAvg)*(y-dVarAvg);denominator += (x-iVarAvg)*(x-iVarAvg);}//計算斜率slope = numerator/denominator;//并將結果保留幾位小數(四舍五入)String slope_String = ScoreUtil.getFractionDigits(slope, fraDigits);slope = Double.valueOf(slope_String);return slope;}/*** 計算最佳擬合線(y=a+bx)的切距a* @description 因為最佳擬合線要經過點(自變量均值,因變量均值),所以其計算公式為:* a=dVarAvg-b*iVarAvg* @param slope 斜率* @param iVarAvg 自變量* @param dVarAvg 因變量* @param fraDigits 結果保留位數* @return 切距*/public static double calculateTangentDistance(double slope,double iVarAvg,double dVarAvg,int fraDigits){double tanDis = 0;//切距//計算切距tanDis = dVarAvg-(slope*iVarAvg);//并將結果保留3位小數(四舍五入)String tanDis_String = ScoreUtil.getFractionDigits(tanDis, fraDigits);tanDis = Double.valueOf(tanDis_String);return tanDis;}/*** 計算變量數據的標準差* @description 標準差計算公式為:標準差 =((var-varAvg)2/(n-1))^2* @param varData 變量數據* @param fraDigits 結果保留位數* @return 標準差*/public static double calculateStandardDeviation(double[] varData,int fraDigits){double standardDev = 0;//標準差double varAvg = 0;//變量均值double denominator = 0;//分母//計算變量均值varAvg = calculateAvgValue(varData,fraDigits);int varDataLen = varData.length;for (int i = 0; i < varDataLen; i++) {double var = varData[i];denominator += (var-varAvg)*(var-varAvg);}//計算標準差standardDev = Math.pow(denominator/(varDataLen-1),0.5);//并將結果保留3位小數(四舍五入)String standardDev_String = ScoreUtil.getFractionDigits(standardDev, fraDigits);standardDev = Double.valueOf(standardDev_String);return standardDev;}/*** 計算相關系數* @description 相關系數表示最佳擬合線與二變量數據的擬合程度,相關系數計算公式為:r = (b*Sx)/Sy;* r的取值范圍為[-1,1],當|r|越接近1,則表示擬合程度越高;當|r|越接近0,則表示擬合程度越低* (1)當r=-1時,表示完全負相關;(2)當r=1時,表示完全正相關;(3)當r=0時,表示不相關。* @param slope 斜率* @param Sx 自變量的標準差* @param Sy 因變量的標準差* @param fraDigits 結果保留位數* @return 相關系數*/public static double calculateCorrelationCoefficient(double slope,double Sx,double Sy,int fraDigits){double r = 0;//相關系數r = (slope*Sx)/Sy;//并將結果保留3位小數(四舍五入)String r_String = ScoreUtil.getFractionDigits(r, fraDigits);r = Double.valueOf(r_String);return r;}/*** 計算因變量的估計值* @description 利用最佳擬合線方程y=a+bx求解* @param slope 最佳擬合線的斜率* @param tangentDistance 最佳擬合線的切距* @param testiVar 測試自變量值* @param fraDigits 結果保留幾位小數* @return 因變量的估計值*/public static double calculateEstimatedValue(double slope,double tangentDistance,double testiVar,int fraDigits){double estValue = 0;//估計值//利用最佳擬合線方程y=a+bx求解estValue = tangentDistance+(slope*testiVar);//并將結果保留3位小數(四舍五入)String estValue_String = ScoreUtil.getFractionDigits(estValue, fraDigits);estValue = Double.valueOf(estValue_String);return estValue;}/*** 求斜率、切距、最佳擬合線、相關系數* @param twoVarData 二變量數據* @param testiVar 測試值* @param fraDigits 結果保留幾位小數* @return 字符串結果數組{斜率、切距、最佳擬合線、相關系數}*/public static String[] analyze(double[][] twoVarData,int fraDigits){String[] result = new String[4];//字符串結果數組String bestFittingLine = "";double iVarAvg = 0;//自變量均值double dVarAvg = 0;//因變量均值double b = 0;//斜率double a = 0;//切距double r = 0;//相關系數double Sx = 0;//自變量的標準差double Sy = 0;//因變量的標準差//計算自變量和因變量的均值iVarAvg = calculateAvgValue(twoVarData[0],fraDigits);dVarAvg = calculateAvgValue(twoVarData[1],fraDigits);//計算斜率b = calculateSlope(twoVarData,fraDigits);//計算切距a = calculateTangentDistance(b,iVarAvg,dVarAvg,fraDigits);//計算自變量和因變量的標準差Sx = calculateStandardDeviation(twoVarData[0],fraDigits);Sy = calculateStandardDeviation(twoVarData[1],fraDigits);//計算相關系數r = calculateCorrelationCoefficient(b,Sx,Sy,fraDigits);//組合最佳擬合線方程bestFittingLine = "y="+a+"+"+b+"x";//將結果加入到結果數組result[0]= b+"";result[1]= a+"";result[2]= bestFittingLine+"";result[3]= r+"";return result;}/*** @param args*/public static void main(String[] args) {/** iVar是independent variable(自變量)的縮寫* dVar是dependent variable(因變量)的縮寫*/double[] iVar = {1.9,2.5,3.2,3.8,4.7,5.5,5.9,7.2};//自變量值double[] dVar = {22,33,30,42,38,49,42,55};//因變量值double[][] twoVarData = new double[][]{iVar,dVar};//二變量數據int fraDigits = 3;//結果保留幾位小數數 double testiVar = 4.3;//測試自變量值String[] result = analyze(twoVarData,fraDigits);double estValue = 0;//估計值System.out.println("-------------輸出結果---------------");System.out.println(" 斜率:"+result[0]+" 切距:"+result[1]);System.out.println(" 最佳擬合線:"+result[2]);System.out.println(" 相關系數:"+result[3]);estValue = calculateEstimatedValue(Double.valueOf(result[0]),Double.valueOf(result[1]),testiVar,fraDigits);System.out.println(" 測試自變量值:"+testiVar);System.out.println(" 因變量估計值:"+estValue);System.out.println("----------------------------------");}}

?

回到頂部

6 共享

PPT:http://yunpan.cn/cFWAwExCtkmEd 訪問密碼 291e

開源代碼:http://yunpan.cn/cFWAFPNrvn6PV 訪問密碼 8208

http://www.cnblogs.com/baiboy

轉載于:https://www.cnblogs.com/softidea/p/5225969.html

總結

以上是生活随笔為你收集整理的【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)的全部內容,希望文章能夠幫你解決所遇到的問題。

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