越看越爽,此后统计学习不再是路人!
?【加薪必備】全套零基礎學AI資料免費領!
作者:賈勝杰,碩士,退役軍人,電氣工程專業,現成功轉行K12領域數據挖掘工程師,不僅在數據清理、分析和預測方向,而且在自制力和高效學習方面都有豐富經驗。?
編輯:王老濕
Hi,各位同學,專欄關于修煉技法的部分已經發布了 7 篇:
通過這些文章,我們學習了Numpy的基本操作、數據分析的基本流程、Pandas在數據分析各個過程中的應用以及Matplotlib&Pandas的可視化基礎,也就是說,你們已經算是掌握了基礎的數據分析技能啦!撒花!但是在統計學理論和預測方面仍有欠缺,那么在本階段我們就來補上!
我們分兩篇文章來介紹數據分析相關的基礎概率論與統計學知識:
上篇:描述統計學、概率與貝葉斯法則、常見概率分布
下篇:推論統計學、置信區間、假設檢驗、線性回歸、邏輯回歸
描述統計學基礎
描述統計分析就是通過數字或可視化的方法,對數據集進行整理、分析,并對數據的分布狀態、數字特征和隨機變量之間的關系進行估計和描述。其簡要可以分為集中趨勢分析、離散程度分析以及相關分析三大部分。
數據類型
數據類型是基礎,尤其是之后在進行回歸預測時,針對不同的數據類型可以選擇不同的算法,所以必須掌握。
數據類型可以分為兩大類:數值和分類;進而分為四小類:連續、離散、定序和定類。
| 數值: | 連續 | 離散 |
| 身高、年齡、收入 | 書中的頁數、院子里的樹、咖啡店里的狗 | |
| 分類: | 定序 | 定類 |
| 字母成績等級、調查評級 | 性別、婚姻狀況、早餐食品 |
描述統計的量
| 數值: | 集中趨勢 | 均值 | |
| 中位數 | 偶數個時取中間兩值均數 | ||
| 眾數 | 存在沒有或多個的可能 | ||
| 離散程度 | 極差 | max - min | |
| 四分位差(IQR) | 75%數 - 25%數 | ||
| 方差 | 每個觀察值與均值之差平方和的平均數 | ||
| 標準差 | 方差的平方根 | ||
| 數據形狀 | 左偏態 | 均值小于中位數(普遍但不絕對,下同) | |
| (需做直方圖) | 右偏態 | 均值大于中位數 | |
| 對稱分布(通常是正態分布) | 均值等于中位數 | ||
| 異常值 | 一般為上下超過1.5倍四分位差 | 處理方式見下面【異常值的處理】 | |
| 分類: | 分類計量個數或比例 |
偏態分布示意圖
其他相關概念:
五數概括描述法:利用最小值、第一四分位數(25%處)、第二四分位數(中位數)、第三四分位數(75%處)和最大值五個數對數值型變量的離散程度進行描述的方法。
當我們的數據遵循正態分布時,我們可以使用均值和標準差描述我們的數據集。
但是,如果我們的數據集是偏態分布,五數概括法(和關聯的集中趨勢度量)更適用于概括數據。
除直方圖外,你還可以使用箱線圖進行統計描述,箱線圖其實是五數概括法的可視化。
異常值的處理:
1. 注意到它們的存在并確定對統計的影響,可以通過繪制直方圖或箱線圖的方法直觀觀察,也可以使用五數概括法(對應于Pandas中的describe函數)
2. 如果是輸入錯誤 — 刪除或改正
3. 理解它們為何存在,以及對我們關注數據問題的影響。
4. 當有異常值時,使用五數概括法的值通常能比均值和標準差等度量更好地體現異常值的存在。
辛普森悖論
我們先舉個例子?,如下所示是我編的院校錄取數據。
| A | 800 | 400 | 50% | 200 | 150 | 75% |
| B | 200 | 20 | 10% | 800 | 160 | 20% |
| 合集 | 1000 | 420 | 42% | 1000 | 310 | 31% |
從上表中我們很明顯能看出,如果只比較A專業或者B專業的話,女生的錄取率均高于男生,說明女生更受青睞嗎?如果我們看整個院校兩專業合計的話,男生的錄取率又比女生高了,那這又說明男生更受青睞嗎?辛普森悖論,辛普森悖論是在某個條件下的兩組變量,分別討論時都會滿足某種性質,可是一旦合并考慮,卻可能導致相反的結論。混雜因素,混雜因素就是一個與核心研究無關的變量,它會隨著變量的改變而改變,就比如說在如上的例子中,不同專業的總人數就有很大差異,它會隨著專業的改變而改變,正是由于改變量的變化才導致了悖論的出現。以多種方式去觀察數據。在之后處理類似問題時就要進行多變量分析,查看是否存在潛在因素,這樣才能幫助我們認清事件的本質。
概率
概率與統計的關系
在介紹概率之前,我們先來看下概率與統計之間的關系:
(圖像來源:Udacity)
概率是由模型(MODEL)去預測數據(DATA),而統計是由數據去建立模型(進而再去做預測)。
基礎知識
概率,是一種幾率、可能性,描述是事件發生的可能性度量量。隨機事件,指一個被賦予機率的事件集合,針對的是事件在樣本空間的一個子集。事件A發生的概率,用符號P(A)表示 。
任何事件的發生概率在 0 和 1 之間,其中包括 0 和 1。(0表示不可能發生,1表示必然發生)
獨立事件:事件A與事件B是否發生/發生的結果沒有任何關系,就可以說事件A與B互為獨立事件。比如說,第一次擲骰子的結果與第二次的結果
互斥事件:不可能在同一次實驗中出現的倆事件。比如說,擲骰子實驗中的1和6
對立事件:是一種特殊的互斥事件,即試驗中只有倆種可能A和B,那么事情的發生非A即B。可以表示為
如擲硬幣的正面和反面。
加法原理:若兩種方法均能完成此事,則此事發生的概率為P(A) + P(B)
乘法原理:若兩個步驟分別不能完成此事,則此事發生的概率為P(A)·P(B)
兩種常見的離散型分布
二項分布
也叫伯努利分布,指n個獨立的事件A發生的概率分布。設每次試驗中事件A發生的概率為p,則進行n次試驗,A發生k次的概率為:
如檢查某產品,有n個產品合格的概率。
泊松分布
如果某事件以固定強度隨機且獨立的出現,該事件在單位時間/單位面積內出現的次數(個數)就可以看作是泊松分布。它的表達式為:
條件概率
在現實中,我們處理的事情并不像骰子和硬幣那樣簡單,有些時間的結果往往依賴于其他的事情,比如說晨練的概率跟這個人是不是夜貓子有關等等。那么,這就引出了條件概率,即在事件B發生的條件下,事件A發生的概率為:
其中,表示同時發生的概率。
我們可以使用文氏圖來幫助我們理解事件之間的關系,如下圖中,AB同時發生的概率可以表示為兩個圓的交集,那么B已經發生的條件下A發生的概率就是這個交集(橙色部分)占整個B圓的比例。
之前講過獨立事件,那么用公式的方式可以表達為:P(A) = P(A|B)。根據條件概率公式可以推導出,當P(AB) = P(A)P(B)時,則可說明A事件與B事件相互獨立。
全概率公式
也就是A發生的概率為在互斥的多個事件(B1,B2…)已發生的條件下的條件概率之和。公式可以表示為:
貝葉斯法則
貝葉斯法則是概率推理的黃金法則,是利用先驗概率計算后驗概率的方法。
我們還是通過一個例子來闡述,假設某醫院新研究了一種檢驗患者是否患癌的技術,臨床測試數據如下:該技術具有5%的假陽性及3%的假陰性,現已知某一群體的患癌率為0.005,問該技術是否可以應用于普查。
我們設事件Pos={檢查結果為陽性},事件C={檢查者患癌},那么如上的臨床數據可以寫成:
而我們的目的是確認該技術是否可以用于普查,也就是檢查結果為陽性時的患癌率(真陽性),也就是,這個值越高,該檢查就越適合普查.
由已知條件,可以計算出:
?那如果群體的患癌率比較高,約為90%,那么檢查結果為陽性的患癌率有多少呢?這又說明了什么?
在這個例子中:
癌癥發生的概率P(C)為先驗概率,即在我們進行檢查之前就對患癌概率的一個判斷;陽性結果下為癌癥的概率P(C|Pos)為后驗概率(陽性下非癌癥、陰性癌癥、陰性非癌癥都是),這些是在檢查發生之后,我們對患癌概率這件事的重新評估。
這就是貝葉斯法則的含義。我們先預估一個"先驗概率",然后加入實驗結果,由此得到更接近事實的"后驗概率"。
如果感覺理解困難,可以看一下白話版的貝葉斯講解:怎樣用非數學語言講解貝葉斯定理(Bayes's theorem)
Python在概率中的應用
前面我們了解了概率的基本知識,本節就是利用Python去實施,應用的第三方包為NumPy和Pandas。
均勻隨機取整
使用的函數為numpy.random.randint(low, high=None, size=None, dtype='l'):
low:當沒有high參數輸入時,作為取值范圍的最大值+1;當有high參數輸入時,則作為取值范圍的最小值;
high:取值范圍的最大值+1,默認為無輸入;
size:輸入數字則表示取值的數量,輸入元組則表示取值矩陣的行和列;
dtype:數據類型,默認為np.int;
函數的輸出為int或者是由int數據類型組成的ndarray。
函數的具體用法如下:
import?numpy?as?np#?未定義high參數,取值范圍是是0到1(即low?-?1) >>>?np.random.randint(2,?size=10) array([1,?0,?0,?0,?1,?1,?0,?0,?1,?0]) #?定義了high參數,取值范圍是2(即low)到4(即high?-?1) >>>?np.random.randint(2,5,size?=?10) array([2,?2,?3,?3,?4,?2,?3,?2,?2,?4]) #?定義一個2x4的矩陣,取值范圍是0到4 >>>?np.random.randint(5,?size=(2,?4)) array([[4,?0,?2,?1],[3,?2,?2,?0]])不均勻隨機取數
使用的函數為numpy.random.choice(a, size=None, replace=True, p=None):
a:輸入列表時,取數就從該列表中取;若輸入為數字時,取值范圍為0到該數字 - 1;
size:輸入數字則表示取值的數量,輸入元組則表示取值矩陣的行和列;
replace:布爾值,默認為True,若設置為False表示取數不會重復;(以從袋子中取球為例,True是取完放回再取,而False則是取了不放回,繼續取)
p:表示概率,與a的輸入值一一對應。
函數的輸出為int或者是由int數據類型組成的ndarray。
函數的具體用法如下:
#輸入數字時取數 >>>?np.random.choice(5,?3) array([0,?3,?4]) #輸入列表時取數 >>>?np.random.choice([0,1],?3) array([0,?1,?1]) #設置replace參數 >>>?np.random.choice(5,?3,?replace=False) array([3,1,0]) #設置概率 >>>?np.random.choice(5,?3,?replace=False,?p=[0.1,?0,?0.3,?0.6,?0]) array([2,?3,?0])二項分布
使用的函數為numpy.random.binomial(n, p, size=None),參數也很好解釋。
參數中的n即為每次試驗中取值的次數,p則為試驗中的某一種事件成功的概率,size則是試驗的次數。
條件概率與貝葉斯規則測試
這里主要是一些Pandas函數的應用,經過上一階段的學習應該已經很熟練了。
主要涉及的函數是分組和統計計數類的函數,比如說groupby,query,count等,如果忘記的話,自己查官方文檔或者之前的筆記,這里不再贅述。
正態分布
在相同條件下,我們隨機地對某一測試對象(拋硬幣20次,其中正面的次數)進行多次測試(拋很多次20次)時,測得的數值在一定范圍內波動(從0到20),其中接近平均值的數據(10左右)占多數,遠離平均值的占少數。具有這種分布規律的隨機變量的分布就稱作正態分布。
大概長這樣兒:
它的概率密度函數可以表示為:
其中為均值,為標準差。
假設檢驗是基于正態分布的
許多社會和經濟現象對應的隨機變量分布,都可以用正態分布來描述
中心極限定理
先回顧下推論統計的幾個概念:
總體 —— 我們想要研究的整個群體。
參數 —— 描述總體的數值摘要
樣本 —— 總體的子集
統計量 —— 描述樣本的數值摘要
依然舉個例子先:我們想了解國內在校大學生關注AI派的比例,但因為大學生數量龐大,我們沒辦法去一個一個的做調查,所以我們隨機的從大學生中抽出一部分群體,然后調查抽出部分的關注率,以此來估計全國大學生的關注率。
那例中的所有在校大學生就叫做總體,總體的關注率就是參數;我們隨機抽出的那部分就叫做樣本,其中包含的學生數量就叫做樣本容量,在抽出的每組樣本中我們還統計了關注率,這就是統計量。
一般的,樣本數≥30即可稱為大樣本。大樣本條件下,抽樣平均數的分布接近正態分布。
但必要抽樣數目的確定是有相關公式計算的,這里就不給出了,感興趣的話可以去搜搜看。
現在我們利用Python去模擬如上的抽樣過程,看看會發生什么。
#假設總體數量為十萬,關注率為0.3,用1表示關注,可以模擬出總體的分布如下 >>>population?=?np.random.choice([0,1],size=100000,p=[0.7,0.3]) >>>print(f'Mean:{population.mean()},?Std:{population.std()}')Mean:0.30114,?Std:0.4587534200417475為了方便后面調用,這里我們寫了一個隨機抽樣&可視化的函數如下所示:
#抽樣&繪圖 def?sample_plot(sample_size):#隨機抽樣一萬次,計算關注率rate_list?=?[]for?_?in?range(10000):sample?=?np.random.choice(population,sample_size)rate?=?sample.mean()rate_list.append(rate)#可視化結果sns.distplot(rate_list)print(f'Mean:{np.mean(rate_list)},?Std:{np.std(rate_list)}')我們先取樣本容量為5,查看其關注率的分布情況如下:
#樣本容量為5時的結果 >>>sample_plot(5)(完全看不出這是個什么分布)
將樣本容量改為20,我們再來看下結果:
(已經有正態分布的樣子了)
最后我們把樣本容量改為50:
想比上一幅圖,這幅可視化更接近正態分布。
?除了直方圖外,觀察下三次實驗的均值與標準差和總體的均值與標準差,它們之間有什么關系呢?
上面我們的這個模擬過程就是中心極限定理的含義,隨著樣本容量的逐漸增大,比例的抽樣分布越接近正態分布(但也不一定必須要很大很大才能近似于正態分布),同樣這也適用于求和,平均數等,但不適用于所有的統計量,比如說最大值,方差等等。
上述模擬過程中的抽樣方法叫做自助法(Bootstrap),是一種從給定數據集中有放回的均勻抽樣。
中心極限定理的妙處就在于,我們可以從任意的亂七八糟的分布取任意數量的樣本值,然后計算樣本的均值(或者和),不斷得取值求均,最終做他們頻率的可視化,你會發現這是一個非常完美的正態分布。
現實生活中有很多的隨機過程,有的分布就是亂七八糟,但是你可以通過中心極限定理,得到他們均值或者和的正態分布,這也是為什么正態分布在統計中如此常用的原因之一。
如果感覺理解起來還是有點兒困難的話,你可以戳在線抽樣分布模擬器(http://1t.click/aAQ9),自己動手試一試。
大數定理
大數定理表達的是隨著樣本容量增加,樣本平均數越來越接近總體平均數,字面上的意思很好理解,但這里有一點要注意,我們舉例來說明一下:
比如說,我現在有100枚硬幣,放在一個盒子里,隨便搖一下盒子,打開,對正面朝上的硬幣進行計數(當然,我們知道期望為100 x 0.5 = 50):
第一次實驗的結果是55;第二次是60;第三次是70,三次實驗的均值為((55+60+70)/3 ≈62),那你覺得,下次實驗的結果是更有可能小于50還是大于50呢?
你有可能這樣想,根據大數定理,隨著我們試驗次數的不斷增加,均值肯定是不斷趨向于50的,前三次的實驗中每次都超過50,那么下次的實驗會有更大的可能小于50,來糾正前三次實驗的偏差。
如果你真的這樣想,你就陷入了賭徒悖論。大數定理不關心前面發生的有限次實驗,因為后面還有無限次的實驗,而這無限次實驗的期望值是50。這個例子可能比較隨意,但這就是大數定理的含義。
最后
本周主要對描述統計學和概率的基礎知識進行了總結,這部分偏理論一些,如果覺得理解起來有點吃力,可以去網上搜集一些資料或者找一些教科書去查閱,要求是:不一定要完全掌握其原理,但求理解和會用。
如果在學習數據分析(專欄)的過程中有遇到問題,歡迎加入我們的學習群來交流,我們作者在群里已等候多時。還沒有加入的同學可以掃描下方的微信二維碼,添加微信好友,之后統一邀請你加入交流群。添加好友時一定要備注:數據分析。?額外參考資料:
【課程】可汗學院-概率論與統計(http://1t.click/aAQ3)
【教材】機會的數學-陳希孺(http://1t.click/aAQ4)
【公式總結】條件概率及全概率公式及貝葉斯公式(http://1t.click/aAQ5)
【教材】statistics for data science(http://1t.click/aAQ8)
(完)
?【升職加薪必備】全套零基礎學AI資料免費領!
?關注“Python與人工智能社區”
近期專欄推薦?(點擊下方標題即可跳轉)
1.?
2.?
3.?
4.?
點下「在看」,給文章蓋個戳吧!?
總結
以上是生活随笔為你收集整理的越看越爽,此后统计学习不再是路人!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 量子计算机未来猜想,太厉害了吧?这台量子
- 下一篇: 从「模拟」理解零知识证明:平行宇宙与时光