1 標準差
我們經常使用平均數來大致了解一組數據,例如平均成績、平均身高、平均壽命等等。但是如果只看平均數,不一定能充分了解整體情況。比如說你和某首富住同一個社區,你們社區平均每戶年收入兩千萬,那么你家是有錢還是沒錢?另外就是看到了平均工資,才知道自己“拖了后腿”——關于平均工資問題,在《機器學習數學基礎》中有專門討論,是否真的拖后腿了?通過統計學知識就能明了。
為了幫助我們更了解整體情況,需要更多統計量來進行描述。
其中一個統計量,就是用于描述數據的離散情況。換句話說,就是描述這組數據的所有數據,是很集中還是很分散。為了描述離散情況,首先想到的是:每一個數據離平均值有多遠?如果對于數據 XXX 里的每個數據 xix_ixi? ,我們都將它減去平均數 μX\mu_XμX? ,然后再全部加起來,得到
∑i=1n(xi?μX)=∑i=1nxi?∑i=1nμX=nμX?nμX=0
\sum_{i=1}^n (x_i - \mu_X) = \sum_{i=1}^n x_i - \sum_{i=1}^n \mu_X = n\mu_X - n\mu_X = 0
i=1∑n?(xi??μX?)=i=1∑n?xi??i=1∑n?μX?=nμX??nμX?=0
這就很有意思了,結果為 0。因為有些數據比平均值大,有些比平均值小,正負自然會相互抵消。為了避免這種情況,我們改為先取絕對值再相加
∑i=1n∣xi?μX∣
\sum_{i=1}^n |x_i - \mu_X|
i=1∑n?∣xi??μX?∣
這樣就沒有正負抵消的問題了。這個式子中的每一項,叫做離均差,意思是每個數據離平均值有多遠。然而這樣計算起來不太方便,大量絕對值相加是很難處理的。所以我們改為先把每個離均差都平方,然后再相加
∑i=1n(xi?μX)2
\sum_{i=1}^n (x_i - \mu_X)^2
i=1∑n?(xi??μX?)2
可是這個式子,如果數據的項數越多,加起來的結果豈不是越大嗎?比如說一個班的考試成績,如果隔壁班和本班有完全一樣的成績分布,兩班合并在一起計算,結果就會變成兩倍,但離散情況并沒有變化。為了消除數據數量 nnn 的影響,我們再除以 nnn ,變成計算離均差平方的平均
∑i=1n(xi?μX)2n
\frac{\sum_{i=1}^n (x_i - \mu_X)^2}{n}
n∑i=1n?(xi??μX?)2?
這個式子,適合用來描述離散情況,稱為方差(variance)。但因為我們先進行了平方運算,所以這樣算出的結果,單位會與原來的數據不一致。如果我們希望單位保持一致,就將方差再開根號:
∑i=1n(xi?μX)2n
\sqrt{\frac{\sum\limits_{i=1}^n (x_i - \mu_X)^2}{n}}
ni=1∑n?(xi??μX?)2??
離均差平方的平均再開根號,這稱為標準差(standard deviation)。為什么剛才說取絕對值相加比較不好算,平方后再相加卻反而好算呢?我們可以將標準差定義中平方的部分展開:
∑i=1n(xi?μX)2n=∑i=1n(xi2?2μXxi+μX2)n=∑i=1nxi2?∑i=1n2μXxi+∑i=1nμX2n=∑i=1nxi2?2μX∑i=1nxi+μX2∑i=1n1n與下標?i?無關的可提出=∑i=1nxi2?2μX(nμX)+μX2?nn=∑i=1nxi2?2nμX2+nμX2n=∑i=1nxi2?nμX2n=∑i=1nxi2n?μX2
\begin{split}
\sqrt{\frac{\sum\limits_{i=1}^n(x_i-\mu_X)^2}{n}}&=\sqrt{\frac{\sum\limits_{i=1}^n (x_i^2 - 2\mu_X x_i + \mu_X^2)}{n}}
\\&=\sqrt{\frac{\sum\limits_{i=1}^n x_i^2 - \sum\limits_{i=1}^n 2\mu_X x_i + \sum\limits_{i=1}^n \mu_X^2}{n}}
\\&= \sqrt{\frac{\sum\limits_{i=1}^n x_i^2 - 2\mu_X \sum\limits_{i=1}^n x_i + \mu_X^2 \sum\limits_{i=1}^n 1}{n}} \quad \text{與下標 i 無關的可提出}
\\&= \sqrt{\frac{\sum\limits_{i=1}^n x_i^2 - 2\mu_X (n\mu_X) + \mu_X^2 \cdot n}{n}}
\\&= \sqrt{\frac{\sum\limits_{i=1}^n x_i^2 - 2n\mu_X^2 + n\mu_X^2}{n}}
\\&= \sqrt{\frac{\sum\limits_{i=1}^n x_i^2 - n\mu_X^2}{n}} = \sqrt{\frac{\sum\limits_{i=1}^n x_i^2}{n} - \mu_X^2}
\end{split}
ni=1∑n?(xi??μX?)2???=ni=1∑n?(xi2??2μX?xi?+μX2?)??=ni=1∑n?xi2??i=1∑n?2μX?xi?+i=1∑n?μX2???=ni=1∑n?xi2??2μX?i=1∑n?xi?+μX2?i=1∑n?1??與下標?i?無關的可提出=ni=1∑n?xi2??2μX?(nμX?)+μX2??n??=ni=1∑n?xi2??2nμX2?+nμX2???=ni=1∑n?xi2??nμX2???=ni=1∑n?xi2???μX2???
這樣便得到標準差的另一種公式,當我們只知道數據的平方和而不知道每一組數據的詳細數值時,就可以使用這個公式。
注意
- 方差的符號可以寫成 Var\text{Var}Var 或 σ2\sigma^2σ2 ,其公式為:
σ2=∑i=1n(xi?μX)2n=∑i=1nxi2n?μX2 \sigma^2 = \frac{\sum\limits_{i=1}^n (x_i - \mu_X)^2}{n} = \frac{\sum\limits_{i=1}^n x_i^2}{n} - \mu_X^2 σ2=ni=1∑n?(xi??μX?)2?=ni=1∑n?xi2???μX2?
- 標準差的符號可以寫成 Var\sqrt{\text{Var}}Var? 或 σ\sigmaσ ,其公式為:
σ=∑i=1n(xi?μX)2n=∑i=1nxi2n?μX2 \sigma = \sqrt{\frac{\sum\limits_{i=1}^n (x_i - \mu_X)^2}{n}} = \sqrt{\frac{\sum\limits_{i=1}^n x_i^2}{n} - \mu_X^2} σ=ni=1∑n?(xi??μX?)2??=ni=1∑n?xi2???μX2??
- 方差可以理解為計算正方形面積的平均,如下圖所示。數據離平均值越遠,算出的正方形面積就越大,會使方差的結果更大。
- 數據的平移不影響標準差,但伸縮會有影響。設 Y=aX+bY = aX + bY=aX+b,則:
σY=∑i=1n(yi?μY)2n=∑i=1n[(axi+b)?(aμX+b)]2n=∑i=1n[a(xi?μX)]2n=a2∑i=1n(xi?μX)2n=a2?∑i=1n(xi?μX)2n=∣a∣?∑i=1n(xi?μX)2n=∣a∣σX \begin{split} \sigma_Y &= \sqrt{\frac{\sum\limits_{i=1}^n (y_i - \mu_Y)^2}{n}} \\&= \sqrt{\frac{\sum\limits_{i=1}^n \left[(ax_i + b) - (a\mu_X + b)\right]^2}{n}} \\&= \sqrt{\frac{\sum\limits_{i=1}^n \left[a(x_i - \mu_X)\right]^2}{n}} \\&= \sqrt{\frac{a^2 \sum\limits_{i=1}^n (x_i - \mu_X)^2}{n}} \\&= \sqrt{a^2 \cdot \frac{\sum\limits_{i=1}^n (x_i - \mu_X)^2}{n}} \\&= |a| \cdot \sqrt{\frac{\sum_{i=1}^n (x_i - \mu_X)^2}{n}} \\&= |a| \sigma_X \end{split} σY??=ni=1∑n?(yi??μY?)2??=ni=1∑n?[(axi?+b)?(aμX?+b)]2??=ni=1∑n?[a(xi??μX?)]2??=na2i=1∑n?(xi??μX?)2??=a2?ni=1∑n?(xi??μX?)2??=∣a∣?n∑i=1n?(xi??μX?)2??=∣a∣σX??
- 由方差的第二個式子移項,可得:
σ2+μX2=∑i=1nxi2n∑i=1nxi2=n(σX2+μX2) \begin{split} \sigma^2+\mu^2_X=\frac{\sum\limits_{i=1}^nx_i^2}{n} \\ \sum_{i=1}^n x_i^2 = n\left(\sigma_X^2 + \mu_X^2\right) \end{split} σ2+μX2?=ni=1∑n?xi2??i=1∑n?xi2?=n(σX2?+μX2?)?
這是一個實用的公式。
2 標準化
2 標準化
如果你上次數學考 70 分,這次考 50 分,那你是進步還是退步呢?當然,你的慈母很可能會不太高興,竟然退步了 20 分!正當要執行家法時,你急忙抗辯:“等一下!上次數學全班平均 60 分,這次考試比較難,班級平均只有 40 分!我這兩次都比平均高 10 分,應該不算退步吧!” 你的慈母聽了覺得挺有道理,正當你松了口氣時,一旁正在閱讀《機器學習數學基礎》(齊偉,電子工業出版社)的嚴父看不下去了:“這兩次我都看過你班上的成績單,上次標準差才 5 分,你比平均高兩個標準差。這次標準差 10 分,你只比平均高一個標準差而已,所以你還是退步了。” 于是你還是被執行家法,然后好好學數學。你正生氣覺得不理解,本來今天高高興興的,嚴父為什么要說這種話,這時剛好翻到《機器學習數學基礎》上講到數據的標準化,好像就和嚴父那番話有關系。
假設一種場景:小明身高 187 公分,家庭年收入 100 萬元。因為小明并不帥,顯然不是高富帥,但究竟說他高比較好,還是說他富比較好呢?身高和家庭年收入,顯然是兩種不同的數據,無法直接比較。但人性嘛,總想去比較,不能比也要比。于是采取相對比較的辦法:小明班上平均身高 175 公分,標準差 4 公分,所以小明的身高在班上比平均多出 3 個標準差;班上家庭年收入平均 80 萬元,標準差 20 萬元,所以小明家的年收入在班上比平均多出 1 個標準差。這樣看來,小明的 “富” 在班上似乎不是太突出,倒是身高相對來說在班上比較高。所以我們得出結論:小明(在這個班)是高而不是富!
為了方便計算比平均高幾個標準差,我們對數據進行轉換。使轉換后的新數據具有平均數為 0、標準差為 1 的特性,這樣只要一看新數據,就馬上知道是比平均高多少個標準差了。那該如何設定數據轉換呢?當然是這樣:
Z=X?μXσX
Z = \frac{X - \mu_X}{\sigma_X}
Z=σX?X?μX??
對于線性變換 Y=aX+bY = aX + bY=aX+b ,其平均數為:
μY=aμX+b
\mu_Y = a\mu_X + b
μY?=aμX?+b
直接將原平均數代入線性變換式子即可。所以 ZZZ 的平均數為:
μZ=μX?μXσX=0
\mu_Z = \frac{\mu_X - \mu_X}{\sigma_X} = 0
μZ?=σX?μX??μX??=0
又因為標準差與平移無關,且伸縮系數取絕對值,
σY=∣a∣σX
\sigma_Y=|a|\sigma_X
σY?=∣a∣σX?
所以 ZZZ 的標準差為:
σZ=∣1σX∣?σX=1
\sigma_Z = \left| \frac{1}{\sigma_X} \right| \cdot \sigma_X = 1
σZ?=?σX?1???σX?=1
定義:數據的標準化
對數據 XXX 進行線性變換:
Z=X?μXσX Z = \frac{X - \mu_X}{\sigma_X} Z=σX?X?μX??這稱為數據的標準化,數據 ZZZ 稱為標準化數據,標準化數據的值稱為 zzz 分數。
小明身高 187 厘米,進行標準化計算為:z=187?1754=3z = \frac{187 - 175}{4} = 3z=4187?175?=3 。
zzz 分數是 3,表示高出平均值 3 個標準差。小明的同學張三身高 173 厘米,進行標準化計算為:
z=173?1754=?0.5
z = \frac{173 - 175}{4} = -0.5
z=4173?175?=?0.5
zzz 分數是 - 0.5,表示比平均值低 0.5 個標準差。
標準化數據還有一個特性,就是無單位。比如小明班上的身高,標準差是 4 厘米。如果將身高單位改用米,那么每個人的數據都變為原來的百分之一,例如小明的身高是 1.87 米,班上身高的標準差是 0.04 米。而小明身高的 zzz 分數,無論原數據用 187 厘米還是 1.87 米,計算結果都是 3。
再介紹一個與標準化概念類似,但不直接使用 zzz 分數的例子。我們所說的 IQ,并不是智商測試后的原始分數。而是先將原始分數按不同年齡分類,同年齡組的全球平均分數設定為 IQ100,標準差設定為 15。如果你的原始成績比同年齡全球平均高 2 個標準差,那么你的智商就是 130;如果原始成績比同年齡全球平均低 1.2 個標準差,那么你的智商就是 82。因此,從你的智商分數中,可以知道自己在同年齡群體中的相對水平。假設你 8 歲時做了一次智商測試,12 歲時再做一次,期間你的智力既沒有進步也沒有衰退,你的智商應該會下降,因為同年齡群體的整體水平提升了。
有一個國際組織叫門薩(MENSA),是一個高智商俱樂部,其入會門檻為 IQ130。別以為這聽起來不高,這已經比平均值高 2 個標準差,符合條件的比例僅約為 2.5%!——對于這個數值,可以通過正態分布得到。
《機器學習數學基礎》在各大平臺有售,請認準作者和出版社