學好機器學習必會的統計學知識(第一篇)

引言

在機器學習應用中,我們不可能離開數據。沒有了數據,機器學習算法就像沒有了靈魂。更好地理解數據,可以使我們把它更好地應用在機器學習上。在這篇文章中,我會介紹一些在統計學中,理解數據的一些重要概念,從而使大家更準確地操作數據,玩轉數據。

頻率(frequency)和相對頻率(relative frequency)

爲了更好地解釋這些數學概念,我用Iris數據集實例來說明頻率和相對頻率。如果大家不熟悉這個數據集沒有關係,下面我用具體的R代碼來看看這個數據集的細節。

> names(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
> str(iris)
'data.frame':   150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
> summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500                  

通過上面代碼我們可以看出,總共有150個observations,總共有3個物種,分別是:virginica、setosa、versicolor. 每個物種分別有50個observations. 每個observations有4個變量,分別是:”Sepal.Length” 、”Sepal.Width”、 “Petal.Length” 、”Petal.Width” “Species”

virginica的頻率爲50,setosa的頻率爲50,versicolor的頻率也爲50. 它們三個物種的相對頻率都爲50 / 150 = 1/3. 所有物種相對頻率的和爲1.

下面我用ggplot來畫出histogram(直方圖)和bar chart(條形圖)

library(ggplot2)
library(gridExtra)

p1 <- ggplot(data = iris, aes(x = Species, fill = Species)) + 
  geom_bar() + 
  labs(list(title = "頻率演示", x = "物種", y = "物種頻率"))

p2 <- ggplot(data = iris, aes(x = Species, y = 1 / length(iris$Species))) + 
  geom_bar(stat = "identity", aes(fill = Species)) + 
  labs(list(title = "相對頻率演示", x = "物種", y = "物種相對頻率"))

grid.arrange(p1, p2)

條形圖

ggplot(data = iris, aes(x = Petal.Length)) + 
  geom_histogram(aes(fill = Species)) +
  scale_x_continuous(limits = c(1, 7), breaks = seq(1, 7, 1))

直方圖

直方圖的x-axis是Numerical/Quantitative,我們可以從中看到某個變量的分佈情況。條形圖的x-axis是Categoriacla/Qualitative,我們可以看到某個類別的總數。如果你想了解更多的信息,請參考:histogram(直方圖)和bar chart(條形圖)

直方圖的區間(interval <=> bin <=> bucket)並不是一成不變的,我們可以根據具體的應用來調整。如果你想玩玩直方圖的區間,這有個交互式的網站,你可以玩玩。Interactivate Histogram

衆數(mode)、平均數(Mean)和中位數(Median)

衆數、平均數和中位數在某些情況下測量的都是數據的中心。下面,我們來具體看一下這三個統計學量。

假設我們從自然數population中取出2個samples,如下:

  • 2,1,1,10,12,9,7,6
  • 1,2,3,4,4,5,6,7,8

上面兩個samples的衆數分別是:1和4

  1. 如果我在上面兩個samples中分別加上一個自然數1999999999,衆數依然保持不變,它並沒有受到異常值影響。
  2. 從同一個population中取出的sample,衆數並不相接近
  3. 第2個sample的衆數代表着數據的中心,而第一個沒有

下面兩個公式分別計算的是sample和population的平均數。

x¯=ni=1xinμ=Ni=1xiN
# 從mean爲99,標準差爲1的正態分佈中取出5個samples
s1 = np.random.normal(99, 1, 100)
s2 = np.random.normal(99, 1, 100)
s3 = np.random.normal(99, 1, 100)
s4 = np.random.normal(99, 1, 100)
s5 = np.random.normal(99, 1, 100)

# 求出每個sample的mean,保留兩位小數
round(np.mean(s1), 2) # 99.07
round(np.mean(s2), 2) # 99.17
round(np.mean(s3), 2) # 99.06
round(np.mean(s4), 2) # 98.85
round(np.mean(s5), 2) # 98.93

# 在s1中加入異常值19999999
s1_outlier = np.append(s1, 19999999)
round(np.mean(s1), 2) # 198117.89

從上面的代碼中,我們可以總結以下幾點:

  1. 從同一個population中取出的sample,mean很接近,因此我們可以用sample平均數去推斷出population的平均數
  2. 異常值會對mean有非常大的影響
  3. 異常值會將mean拉向它,從而導致mean不能很好地代表數據中心

假設我們從自然數population中取出2個samples,如下:

  • 1,2,3,4,5
  • 1,2,3,4,5,6

上面兩個samples的中位數分別是:3和3.5

要想找出數據的中位數,我們首先要給數據排序。假設我們有n 個已經排好序的數,它們是x1,x2,x3,,xn 下面是找出它們中位數的公式:

xn+12nxn2+xn+122n

如果我在上面的sample中加入異常值,它並不會對median有多大的影響。因此在高度傾斜的分佈中,median是測量數據中心最好的方式。有一點我們應該注意,median並沒有考慮到所有的數據點。

Q1、Q3、IQR、方差和標準差

說到Q1、Q3和IQR,我們不能不提到Boxplot。請看下圖:

Boxplot

圖片來源:https://www.leansigmacorporation.com/wp/wp-content/uploads/2015/12/Box-Plot-MTB_01-1024x470.png

上圖中已經很明白地說明Q1、Q3和IQR各自的含義了。從上圖我們也看到了Q11.5IQRQ3+1.5IQR 是可能存在的異常值。在一些情況下,統計學家用這樣的方法去掉異常值。下面,我介紹一個找Q1、Q3的方法。

  1. 找到Q2,也就是數據集的Median,因此把數據集分成兩部分
  2. 找上半部分的Median,即Q3
  3. 找下半部分的Median,即Q1

方差和標準差度量的是數據的分散程度。計算方差和標準差的公式如下:

σ2=(Xμ)2Nσ=σ2

大家可能會想爲了去掉數據點與平均值差的負號,我們直接用絕對值不是更簡單明瞭嗎,它也可以度量數據的分散程度啊?爲什麼我們要費這麼大功夫去平方然後在開根號求標準差?

這是因爲在統計分析中,標準差有一些很Cool的性質。下面,是一張關於標準差在正態分佈中的一些性質。

標準差

圖片來源:http://www.stepbystep.com/wp-content/uploads/2013/02/How-to-Find-a-Sample-Standard-Deviation-with-Mean.gif

從上圖我們可以看出,在正態分佈中,有大約68%的數據落在距離平均值1個標準差的範圍內,有大約95%的數據落在距離平均值2個標準差的範圍內,等等。實際上,我們可以求出任意百分比的數據落在什麼樣的標準差範圍內。因此,求出標準差至關重要。如果你繼續看文章的後半部分,你就明白了。

下面我來說一下關於population和sample的標準差之間的關係。

如果我們的數據集是整個population,那麼求標準差的公式和我上面寫的一樣。但是如果我們的數據集僅僅是從population中抽取的sample,我們的公式如下:

s=(Xμ)2N1

我們把它叫做Sample standard deviation. 直觀上來講,population中數據大多數都分佈在中心,因此我們的Sample中的數據基本上都來自於中心,這樣所計算出的標準差要比真實的標準差要小,因爲它的數據分散程度要小。因此我們要用N - 1來求解(叫做Bessel’s Correction),這樣會使我們求出的標準差更加接近真實的標準差。Sample standard deviation也就是population標準差σ 的估算。

Z-Score

z-score表示一個元素與mean之間相差幾個標準差。它的計算公式如下:

z=Xμσ
  1. X 元素的值
  2. μ 平均值
  3. σ 標準差

    當我們standardization正態分佈時(即z-score過程),我們將得到一個標準的正態分佈,即平均值爲0,標準差爲1的正態分佈。

正態分佈

下圖是一張關於正態分佈的圖片:

正態分佈

圖片來源:https://www.mathsisfun.com/data/images/normal-distrubution-large.gif

在上圖中的正態分佈中,X軸上隨機選擇一個小於x的概率等於負無窮到x與曲線形成的面積。

你可以用微積分的知識求出任意兩點與曲線之間形成的面積。我們也可以用Z-Table來求出小於某個x值的面積。但是,在用Z-Table之前,我們必須要把正態分佈standardization,也就是求出對應x值的z-score。

Z-Table

比如,我想知道小於0.64的面積。Z-Table的行對應着0.6,列對應着0.04,因此我想得到的面積爲0.7389.

中心極限定理(Central limit theorem)

假設一個sample包含很多的observations,每個observation是隨機生成的並且它們之間是相互獨立的,計算這個sample的平均值。重複計算這樣sample的平均值,中心極限定理告訴我們這些平均值服從正態分佈。

在概率理論中,中心極限定理的定義爲:在特定的條件下,不管潛在的population分佈是什麼樣的,大量重複地計算獨立隨機變量的算術平均值,這些平均值將服從正態分佈。

抽樣分佈(Sampling Distribution)

維基百科上給出抽樣分佈的定義爲:In statistics, a sampling distribution or finite-sample distribution is the probability distribution of a given statistic based on a random sample.

舉個例子,假設我們有一個mean爲μ ,方差爲σ2 的正態分佈。我們重複地從這個population中取出samples,然後分別計算每個sample的平均值-這個統計方法叫做sample mean. 每個sample都有一個平均值,這些平均值的分佈叫做sampling distribution of the sample mean. 由於population的分佈是正態分佈,這個分佈也是正態分佈,它服從(μ,σ2n) ,這裏n爲sample size. 根據中心極限定理,即使population分佈不是正態的,sampling distribution也通常接近於正態分佈。

這是一個可以自由模擬sampling distribution的網站,大家自己玩玩吧。

http://onlinestatbook.com/stat_sim/sampling_dist/index.html

如果大家想更詳細地理解我上面的內容,這有個Udacity在線課程,希望能幫助到大家 。

https://www.udacity.com/course/ud827

結尾

在第二篇文章中,我會包含以下內容:

  1. 用sample統計分析去估算population的參數
  2. hypothesis testing 和自信區間(confidence intervals)
  3. t-tests and ANOVA
  4. 變量之間的相關性
  5. 卡方檢驗(chi-squared test)
發佈了106 篇原創文章 · 獲贊 213 · 訪問量 59萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章