簡介
Z-Score標準化是數據處理的一種經常使用方法。經過它可以將不一樣量級的數據轉化爲統一量度的Z-Score分值進行比較。數據庫
一句話解釋版本:網絡
Z-Score經過(x-μ)/σ將兩組或多組數據轉化爲無單位的Z-Score分值,使得數據標準統一化,提升了數據可比性,削弱了數據解釋性。框架
數據分析與挖掘體系位置
Z-Score標準化是數據處理的方法之一。在數據標準化中,常見的方法有以下三種:dom
Z-Score 標準化
最大最小標準化
小數定標法
本篇主要介紹第一種數據標準化的方法,Z-Score標準化。ide
此方法在整個數據分析與挖掘體系中的位置以下圖所示。spa
Z-Score的定義
Z-Score處理方法處於整個框架中的數據準備階段。也就是說,在源數據經過網絡爬蟲、接口或其餘方式進入數據庫中後,下一步就要進行的數據預處理階段中的重要步驟。.net
數據分析與挖掘中,不少方法須要樣本符合必定的標準,若是須要分析的諸多自變量不是同一個量級,就會給分析工做形成困難,甚至影響後期建模的精準度。code
舉例來講,假設咱們要比較A與B的考試成績,A的考卷滿分是100分(及格60分),B的考卷滿分是700分(及格420分)。很顯然,A考出的70分與B考出的70分表明着徹底不一樣的意義。可是從數值來說,A與B在數據表中都是用數字70表明各自的成績。orm
那麼如何可以用一個同等的標準來比較A與B的成績呢?Z-Score就能夠解決這一問題。blog
下圖描述了Z-Score的定義以及各類特徵。
Z-Score的目的
如上圖所示,Z-Score的主要目的就是將不一樣量級的數據統一轉化爲同一個量級,統一用計算出的Z-Score值衡量,以保證數據之間的可比性。
Z-Score的理解與計算
在對數據進行Z-Score標準化以前,咱們須要獲得以下信息:
1)整體數據的均值(μ)
在上面的例子中,整體能夠是整個班級的平均分,也能夠是全市、全國的平均分。
2)整體數據的標準差(σ)
這個整體要與1)中的整體在同一個量級。
3)個體的觀測值(x)
在上面的例子中,即A與B各自的成績。
經過將以上三個值代入Z-Score的公式,即:
咱們就可以將不一樣的數據轉換到相同的量級上,實現標準化。
從新回到前面的例子,假設:A班級的平均分是80,標準差是10,A考了90分;B班的平均分是400,標準差是100,B考了600分。
經過上面的公式,咱們能夠計算得出,A的Z-Score是1((90-80)/10),B的Z-Socre是2((600-400)/100)。所以B的成績更爲優異。
反之,若A考了60分,B考了300分,A的Z-Score是-2,B的Z-Score是-1。所以A的成績更差。
所以,能夠看出來,經過Z-Score能夠有效的把數據轉換爲統一的標準,可是須要注意,並進行比較。Z-Score自己沒有實際意義,它的現實意義須要在比較中得以實現,這也是Z-Score的缺點之一。
Z-Score的優缺點
Z-Score最大的優勢就是簡單,容易計算,在R中,不須要加載包,僅僅憑藉最簡單的數學公式就可以計算出Z-Score並進行比較。此外,Z-Score可以應用於數值型的數據,而且不受數據量級的影響,由於它自己的做用就是消除量級給分析帶來的不便。
可是Z-Score應用也有風險。首先,估算Z-Score須要整體的平均值與方差,可是這一值在真實的分析與挖掘中很可貴到,大多數狀況下是用樣本的均值與標準差替代。其次,Z-Score對於數據的分佈有必定的要求,正態分佈是最有利於Z-Score計算的。最後,Z-Score消除了數據具備的實際意義,A的Z-Score與B的Z-Score與他們各自的分數再也不有關係,所以Z-Score的結果只能用於比較數據間的結果,數據的真實意義還須要還原原值。
Z-Score在R中的實現
以下例子是我用R軟件寫出的Z-Score計算方法。
# define dataset data_A <- rnorm(100, 80, 10) # randomly create population dataset data_B <- rnorm(100, 400, 100) # randomly create population dataset hist(data_A) #histogram hist(data_B) #histogram #Calculate population mean and standard deviation A_data_std <- sd(data_A)*sqrt((length(data_A)-1)/(length(data_A))) A_data_mean <- mean(data_A) B_data_std <- sd(data_B)*sqrt((length(data_B)-1)/(length(data_B))) B_data_mean <- mean(data_B) # Provided that A got 92 and B got 610 A_obs <- 92 B_obs <- 610 A_Z_score <- (A_obs - A_data_mean) / A_data_std B_Z_score <- (B_obs - B_data_mean) / B_data_std
原文:https://blog.csdn.net/Orange_Spotty_Cat/article/details/80312154