↑↑↑關注後" 星標 "Datawhale

每日干貨 &  每月組隊學習 ,不錯過

Datawhale乾貨 

作者:吳忠強,Datawhale優秀學習者

所謂機器學習和深度學習, 背後的邏輯都是數學, 所以數學基礎在這個領域非常關鍵, 而統計學又是重中之重, 機器學習從某種意義上來說就是一種統計學習。

今天是概率統計基礎的第二篇文章, 基於第一篇隨機變量與隨機事件進行整理, 首先理一理這裏面的邏輯,第一篇的內容蘊涵了大部分概率論的知識(除了大數定律和中心極限定理這種理論性的支持, 後期有機會會補上)。而今天的這篇內容是在概率論的基礎上往前一步, 屬於數理統計的內容。

概率論中, 我們研究隨機現象, 隨機變量, 但是我們是假設它們的分佈已知, 比如已知某一隨機變量服從什麼分佈, 在這個基礎上研究性質, 特點和規律(數字特徵啊, 隨機變量分佈啊等), 而數理統計中, 我們研究隨機變量的分佈未知或者一部分未知, 要去做的就是通過從未知分佈中抽取多個樣本, 對這些數據進行統計分析, 從而研究隨機變量的分佈等。

大綱如下:

  • 數理統計的基礎(基礎概念, 統計量與抽樣分佈, 常用統計量)

  • 描述性統計(數據集中趨勢和離散趨勢, 分佈特徵, 偏度與峯度)

數理統計基礎

前面已經分析了數理統計是基於是通過從未知分佈中抽取多個樣本, 對這些數據進行統計分析進而去分析隨機變量的規律和特點, 所以在這裏面依然會涉及到一些基本的概念。

基礎概念

這裏的基礎概念包括總體, 個體, 總體容量, 樣本, 簡單隨機樣本, 如果這些概念都知道, 就可以跳過了哈哈。

在數理統計中, 總體就是研究對象的全體, 通常用一個隨機變量表示, 組成總體的每個基本單元叫個體, 而總體中包含的個體總數就是總體容量。

我們研究的就是這個未知分佈的總體的統計規律, 所以我們需要從這裏面隨機抽取一部分個體進行統計,利用概率論的知識去分析推斷。所以從總體 中隨機抽取一部分個體 ,稱 爲取自 的容量爲 的樣本。來個栗子吧:

簡單隨機樣本:滿足以下兩個條件的隨機樣本 稱爲容量是 的簡單隨機樣本: 

  • 代表性:每個 同分布 

  • 獨立性: 是相互獨立的隨機變量。

樣本是具有兩重性,即當在一次具體地抽樣後它是一組確定的數值。但在一般敘述中樣本也是一組隨機變量,因爲抽樣是隨機的。

一般地,用, 表示隨機樣本,它們取到的值記爲稱爲樣本觀測值。一般情形下, 兩次觀測, 樣本值是不同的。

樣本作爲隨機變量,有一定的概率分佈,這個概率分佈稱爲樣本分佈。顯然,樣本分佈取決於總體的性質和樣本的性質。

統計量與抽樣分佈

數理統計的任務是採集和處理帶有隨機影響的數據,或者說收集樣本並對之進行加工,以此對所研究的問題作出一定的結論,這一過程稱爲統計推斷。從樣本中提取有用的信息來研究總體的分佈及各種特徵數就是構造統計量的過程, 因此,統計量是樣本的某種函數。

比如10個燈泡的平均壽命 是統計量。

常用的統計量

1. 樣本均值

設是總體 XXX 的一個簡單隨機樣本,稱

爲樣本均值。通常用樣本均值來估計總體分佈的均值和對有關總體分佈均值的假設作檢驗。均值這個numpy實現就是np.mean()

2. 樣本方差

設是總體的一個簡單隨機樣本,爲樣本均值,稱

爲樣本方差。通常用樣本方差來估計總體分佈的方差和對有關總體分佈均值或方差的假設作檢驗。numpy的話就是np.var()

3. k階樣本原點矩

設是總體的一個簡單隨機樣本,稱

爲樣本的階原點矩(可以看到時,相當於樣本均值),通常用樣本的無階原點矩來估計總體分佈的階原點矩。

4. k階樣本中心矩

設是總體的一個簡單隨機樣本,爲樣本均值,稱

爲樣本的階中心矩,通常用樣本的階中心矩來估計總體分佈的階中心矩。

5. 順序統計量

這個numpy的話就是np.max(), np.min()

三種重要的抽樣分佈

在使用統計量進行統計推斷的時候常常需要知道它的分佈, 統計量的分佈稱爲抽樣分佈, 有三個非常重要的統計量的分佈我們需要知道, 因爲在參數估計和檢驗假設等其實都有這三個分佈的影子或者依賴於這三個分佈, 這三個分佈就是分佈、分佈和分佈。

1. 分佈

設是來自總體的樣本, 則稱統計量

服從自由度爲的分佈, 記爲。自由度指的獨立變量的個數。概率密度函數長這樣:

2.  分佈

設,且相互獨立,則稱隨機變量

服從自由度爲的分佈。它的概率密度函數:

概率密度函數圖像如下:

3.  分佈

設且獨立,則稱隨機變量

的分佈, 記

上面這些分佈在參數估計的時候, 會用到。當然分佈本身可能比較複雜, 尤其是概率密度函數, 到時候會有表可查。

描述性統計

數據集中趨勢的度量

1. 平均數

是表示一組數據集中趨勢的量數,是指在一組數據中所有數據之和再除以這組數據的個數。

2. 中位數

是指在一組數據,按順序排列後,居於中間位置的數。中位數描述數據中心位置的數字特徵,對於對稱分佈的數據,均值與中位數比較接近;對於偏態分佈的數據,均值與中位數不同。中位數不受異常值的影響,具有穩健性。

3. 頻數

指同一觀測值在一組數據中出現的次數(擲骰子中,一共擲了20次,出現數字5的次數)

4. 衆數(mode)

就是一組數據中,出現次數最多的那個數(幾個數)。下圖爲均值 VS 中位數 VS 衆數

5. 百分位數

百分位數是中位數的推廣,將數據按 從小到大排列後,對於

它的 分位點定義爲

其中,表示的整數部分。所以,0.5分位數(第50百分位數)就是中位數。0.25分位數稱爲第一四分位數, 記爲, 0.75分位數稱爲第三四分位數, 記爲, 這三個分位數在統計中很有用的。

這個百分位數最常見的就是我們說的箱線圖了:

這個箱線圖可以看到數據的下面幾個性質:

  • 中心位 置:中位數所在的位置是數據集的中心

  • 散佈程度:全部數據落在 之內, 在區間 , , , 的數據個數各佔1/4。區間較短時表示落在該區間的點較爲集中, 反之較爲分散。

  • 對稱性:若中位數位於箱子的中間位置,則數據分佈較爲對稱。若 的距離較 的距離大,則表示數據分佈向左傾斜,反之數據右傾斜,且能看出分佈尾部的長短。

箱線圖特別適用於比價兩個或者兩個以上數據集的性質。當然箱線圖也可以幫助我們檢測是否存在異常值(不尋常的過大或者過小), 第一四分位數和第三四分位數之間的距離記爲IQR, 也就是四分位數間距, 若數據小於IQR或者數據大於IQR,就疑似異常

好了, 關於上面的這些內容,下面看一波python實現了。

首先是列表的元素求均值, 中位數, 衆數, 頻數:由於衆數numpy中沒有直接實現的函數, 所以可以調用scipy包的stats或者自己實現:

# 實現衆數 但這個不能返回多個衆數, 如果有多個衆數的話, 需要得到一個衆數的次數, 然後根據頻數返回多個。

def mode(lst):

if not lst:

return

return max(lst, key=lambda v: lst.count(v))


a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]

a_mean = np.mean(a) #均值

a_med = np.median(a) #中位數

a_mode = stats.mode(a)[0][0] # 衆數 也是隻能返回一個

a_mode1 = mode(a)

print("a的平均數:",a_mean)

print("a的中位數:",a_med)

print('a的衆數', a_mode, a_mode1)


# 頻數

b = {k: a.count(k) for k in set(a)}

b # {1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 43: 1, 12: 2, 11: 1, 52: 1, 22: 3, 23: 1}



# 基於頻數這個, 再寫一個求衆數的, 這個可以返回多個

def mode_duo(d):

if len(d) == 0:

return

max_values = max(d.values()) # 找到了衆數對應的次數

return [key for key in d if d[key]==max_values]

a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22, 1, 1]

b = {k: a.count(k) for k in set(a)}

mode_duo(b) # 1 22


## 當然還可以轉成Series然後求衆數, 有多個的話也可以都返回來, 這個是最簡單的方式

pd.Series(a).mode()

下面看看分位點的情況, 把a轉成Series, 用describe()函數就可以看到分位點:

pd.Series(a).describe()


## 結果:

count 16.000000

mean 14.750000

std 15.316658

min 1.000000

25% 2.750000

50% 11.500000

75% 22.000000

max 52.000000

dtype: float64


## 還可以藉助plt畫出箱型圖

import matplotlib.pyplot as plt

plt.boxplot(pd.Series(a))

下面我們再看看如何根據IQR去掉異常值:異常值可以截尾, 也可以直接去掉:

"""這裏包裝了一個異常值處理的代碼,可以隨便調用"""

def outliers_proc(data, col_name, scale=1.5):

"""

用於截尾異常值, 默認用box_plot(scale=1.5)進行清洗

param:

data:接收pandas數據格式

col_name: pandas列名

scale: 尺度

"""

data_col = data[col_name]

Q1 = data_col.quantile(0.25) # 0.25分位數

Q3 = data_col.quantile(0.75) # 0,75分位數

IQR = Q3 - Q1

data_col[data_col < Q1 - (scale * IQR)] = Q1 - (scale * IQR)

data_col[data_col > Q3 + (scale * IQR)] = Q3 + (scale * IQR)


return data[col_name]

num_data['power'] = outliers_proc(num_data, 'power')

上面是截尾異常值, 接收的是pandas的一列, 因爲有時候異常值多了的話暴力刪除可能不太好。當然下面的代碼直接刪除掉異常值, 接收的是一個DataFrame, 然後判斷有幾列都出現異常的時候才刪除這個樣本。

# 檢測異常值並將其捨棄,返回刪除的列

def detect_and_remove_outliers(df):

"""這個方法按列檢查異常值,並保存所在的行,如果某個行有兩個以上的異常值,就刪除該行"""

outliers = []

col = list(df)

#checking interquartile range IQR for all columns

for c in col:

Q1 = df[c].quantile(0.25) # 0.25分位數

Q3 = df[c].quantile(0.75)

IQR = Q3 - Q1

outliers.extend(df[(df[c] < Q1 - (1.5 * IQR)) | (df[c] > Q3 + (1.5 * IQR) )].index)

#returning keys for count of occurrences in the list outlier key value pairs

return list(k for k,v in Counter(outliers).items() if v >2)

remove_list = detect_and_remove_outliers(data)

data_remove = data.drop(remove_list, axis=0)

數據離散趨勢的度量

表示數據分散(離散,差異)程度的特徵量有方差,標準差,極差以及變異係數等。

1. 方差

用來計算每一個變量(觀察值)與總體均數之間的差異。實際工作中,總體均數難以得到時,應用樣本統計量代替總體參數,經校正後,樣本方差計算公式:

樣本方差的開平方成爲樣本標準差。

2. 極差

數據越分散,極差越大。

3. 變異係數

是刻畫數據相對分散性的一種度量。變異係數只在平均值不爲零時有定義,而且一般適用於平均值大於零的情況。變異係數也被稱爲標準離差率或單位風險。當需要比較兩組數據離散程度大小的時候,如果兩組數據的測量尺度相差太大,或者數據量綱的不同,變異係數可以消除測量尺度和量綱的影響。

4. 四分位數差

這個上面整理過了, 樣本上、下四分位數之差稱爲四分位差(或半極差)。

它也是度量樣本分散性的重要數字特徵,特別對於具有異常值的數據,它作爲分散性具有穩健性。

下面是方差, 標準差, 變異係數的numpy實現。

a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]

a_var = np.var(a) #方差

a_std1 = np.sqrt(a_var) #標準差

a_std2 = np.std(a) #標準差

a_mean = np.mean(a) #均值

a_cv = a_std2 /a_mean #變異係數

print("a的方差:",a_var)

print("a的方差:",a_std1)

print("a的方差:",a_std2)

print("a的變異係數:",a_cv)

5. 偏度與峯度

偏度(skewness) :也稱爲偏態,是統計數據分佈偏斜方向和程度的度量,是統計數據分佈非對稱程度的數字特徵。直觀看來就是密度函數曲線尾部的相對長度。偏度刻畫的是分佈函數(數據)的對稱性。關於均值對稱的數據其偏度係數爲0,右側更分散的數據偏度係數爲正,左側更分散的數據偏度係數爲負。樣本偏度係數如下:

  • 正態分佈的偏度爲0, 兩側尾部長度對稱。

  • 左偏

  • 右偏

峯度(peakedness;kurtosis): 說明的是分佈曲線在平均值處峯值高低的特徵數。直觀看來,峯度反映了峯部的尖度。樣本的峯度是和正態分佈相比較而言,如果峯度大於三,峯的形狀比較尖,比正態分佈峯要陡峭。反之亦然。峯度刻畫的是分佈函數的集中和分散程度。

峯度係數如下:

下面是一波python實現:

data = list(np.random.randn(10000)) #⽣生成標準正態分佈的隨機數(10000個)


plt.hist(data, 1000, facecolor='g', alpha=0.5) # alpha表示透明度

plt.show()


s = pd.Series(data) #將數組轉化爲序列列

print('偏度係數',s.skew()) # 0.0024936359680932723

print('峯度係數',s.kurt()) # -0.05970174780792892

結果如下:

寫到最後

數理統計是從抽樣統計的角度去估計樣本的總體分佈或未知的規律, 首先介紹了數理統計裏面的基本概念, 例如總體,個體, 樣本等, 然後是統計量與抽樣分佈, 介紹了常用的統計量像均值, 方差, 標準差,中心距,原點矩等。然後介紹了三個非常重要的抽樣分佈卡方, T和F。最後是描述性統計這塊,介紹了數據集中趨勢度量, 這裏麪包括平均數,中位數, 衆數, 頻數,百分位數等並給出了numpy實現, 然後是離散趨勢度量, 方差, 標準差, 極差,四分位點的內容, 然後是峯度和偏度的介紹。

本文電子版教程 後臺回覆 概率統計 獲取

“爲數學之美點

相關文章