目錄
- 概率抽樣技術(shù)
- 1.隨機(jī)抽樣(Random Sampling)
- 2.分層抽樣(Stratified Sampling)
- 3.聚類抽樣(Cluster Sampling)
- 4.系統(tǒng)抽樣(Systematic Sampling)
- 5.多級(jí)采樣(Multistage sampling)
- 非概率抽樣技術(shù)
- 1.簡(jiǎn)單采樣(convenience sampling)
- 2.自愿抽樣(Voluntary Sampling)
- 3.雪球抽樣(Snowball Sampling)
- 總結(jié)
今天來(lái)和大家聊聊抽樣的幾種常用方法,以及在Python
中是如何實(shí)現(xiàn)的。
抽樣是統(tǒng)計(jì)學(xué)、機(jī)器學(xué)習(xí)中非常重要,也是經(jīng)常用到的方法,因?yàn)榇蠖鄷r(shí)候使用全量數(shù)據(jù)是不現(xiàn)實(shí)的,或者根本無(wú)法取到。所以我們需要抽樣,比如在推斷性統(tǒng)計(jì)中,我們會(huì)經(jīng)常通過采樣的樣本數(shù)據(jù)來(lái)推斷估計(jì)總體的樣本。
上面所說的都是以概率為基礎(chǔ)的,實(shí)際上還有一類非概率的抽樣方法,因此總體上歸納為兩大種類:
概率抽樣:根據(jù)概率理論選擇樣本,每個(gè)樣本有相同的概率被選中。
非概率抽樣:根據(jù)非隨機(jī)的標(biāo)準(zhǔn)選擇樣本,并不是每個(gè)樣本都有機(jī)會(huì)被選中。
概率抽樣技術(shù)
1.隨機(jī)抽樣(Random Sampling)
這也是最簡(jiǎn)單暴力的一種抽樣了,就是直接隨機(jī)抽取,不考慮任何因素,完全看概率。并且在隨機(jī)抽樣下,總體中的每條樣本被選中的概率相等。
比如,現(xiàn)有10000條樣本,且各自有序號(hào)對(duì)應(yīng)的,假如抽樣數(shù)量為1000,那我就直接從1-10000的數(shù)字中隨機(jī)抽取1000個(gè),被選中序號(hào)所對(duì)應(yīng)的樣本就被選出來(lái)了。
在Python
中,我們可以用random
函數(shù)隨機(jī)生成數(shù)字。下面就是從100個(gè)人中隨機(jī)選出5個(gè)。
import random
population = 100
data = range(population)
print(random.sample(data,5))
> 4, 19, 82, 45, 41
2.分層抽樣(Stratified Sampling)
分層抽樣其實(shí)也是隨機(jī)抽取,不過要加上一個(gè)前提條件了。在分層抽樣下,會(huì)根據(jù)一些共同屬性將帶抽樣樣本分組,然后從這些分組中單獨(dú)再隨機(jī)抽樣。
因此,可以說分層抽樣是更精細(xì)化的隨機(jī)抽樣,它要保持與總體群體中相同的比例。 比如,機(jī)器學(xué)習(xí)分類標(biāo)簽中的類標(biāo)簽0和1,比例為3:7,為保持原有比例,那就可以分層抽樣,按照每個(gè)分組單獨(dú)隨機(jī)抽樣。
Python
中我們通過train_test_split
設(shè)置stratify
參數(shù)即可完成分層操作。
from sklearn.model_selection import train_test_split
stratified_sample, _ = train_test_split(population, test_size=0.9, stratify=population[['label']])
print (stratified_sample)
3.聚類抽樣(Cluster Sampling)
聚類抽樣,也叫整群抽樣。它的意思是,先將整個(gè)總體劃分為多個(gè)子群體,這些子群體中的每一個(gè)都具有與總體相似的特征。也就是說它不對(duì)個(gè)體進(jìn)行抽樣,而是隨機(jī)選擇整個(gè)子群體。
用Python
可以先給聚類的群體分配聚類ID,然后隨機(jī)抽取兩個(gè)子群體,再找到相對(duì)應(yīng)的樣本值即可,如下。
import numpy as np
clusters=5
pop_size = 100
sample_clusters=2
# 間隔為 20, 從 1 到 5 依次分配集群100個(gè)樣本的聚類 ID,這一步已經(jīng)假設(shè)聚類完成
cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)
# 隨機(jī)選出兩個(gè)聚類的 ID
cluster_to_select = random.sample(set(cluster_ids), sample_clusters)
# 提取聚類 ID 對(duì)應(yīng)的樣本
indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]
# 提取樣本序號(hào)對(duì)應(yīng)的樣本值
cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]
print (cluster_associated_elements)
4.系統(tǒng)抽樣(Systematic Sampling)
系統(tǒng)抽樣是以預(yù)定的規(guī)則間隔(基本上是固定的和周期性的間隔)從總體中抽樣。比如,每 9 個(gè)元素抽取一下。一般來(lái)說,這種抽樣方法往往比普通隨機(jī)抽樣方法更有效。
下圖是按順序?qū)γ?9 個(gè)元素進(jìn)行一次采樣,然后重復(fù)下去。
用Python
實(shí)現(xiàn)的話可以直接在循環(huán)體中設(shè)置step
即可。
population = 100
step = 5
sample = [element for element in range(1, population, step)]
print (sample)
5.多級(jí)采樣(Multistage sampling)
在多階段采樣下,我們將多個(gè)采樣方法一個(gè)接一個(gè)地連接在一起。比如,在第一階段,可以使用聚類抽樣從總體中選擇集群,然后第二階段再進(jìn)行隨機(jī)抽樣,從每個(gè)集群中選擇元素以形成最終集合。
Python
代碼復(fù)用了上面聚類抽樣,只是在最后一步再進(jìn)行隨機(jī)抽樣即可。
import numpy as np
clusters=5
pop_size = 100
sample_clusters=2
sample_size=5
# 間隔為 20, 從 1 到 5 依次分配集群100個(gè)樣本的聚類 ID,這一步已經(jīng)假設(shè)聚類完成
cluster_ids = np.repeat([range(1,clusters+1)], pop_size/clusters)
# 隨機(jī)選出兩個(gè)聚類的 ID
cluster_to_select = random.sample(set(cluster_ids), sample_clusters)
# 提取聚類 ID 對(duì)應(yīng)的樣本
indexes = [i for i, x in enumerate(cluster_ids) if x in cluster_to_select]
# 提取樣本序號(hào)對(duì)應(yīng)的樣本值
cluster_associated_elements = [el for idx, el in enumerate(range(1, 101)) if idx in indexes]
# 再?gòu)木垲悩颖纠镫S機(jī)抽取樣本
print (random.sample(cluster_associated_elements, sample_size))
非概率抽樣技術(shù)
非概率抽樣,毫無(wú)疑問就是不考慮概率的方式了,很多情況下是有條件的選擇。因此,對(duì)于無(wú)隨機(jī)性我們是無(wú)法通過統(tǒng)計(jì)概率和編程來(lái)實(shí)現(xiàn)的。這里也介紹3種方法。
1.簡(jiǎn)單采樣(convenience sampling)
簡(jiǎn)單采樣,其實(shí)就是研究人員只選擇最容易參與和最有機(jī)會(huì)參與研究的個(gè)體。比如下面的圖中,藍(lán)點(diǎn)是研究人員,橙色點(diǎn)則是藍(lán)色點(diǎn)附近最容易接近的人群。
2.自愿抽樣(Voluntary Sampling)
自愿抽樣下,感興趣的人通常通過填寫某種調(diào)查表格形式自行參與的。所以,這種情況中,調(diào)查的研究人員是沒有權(quán)利選擇任何個(gè)體的,全憑群體的自愿報(bào)名。比如下圖中藍(lán)點(diǎn)是研究人員,橙色的是自愿同意參與研究的個(gè)體。
3.雪球抽樣(Snowball Sampling)
雪球抽樣是說,最終集合是通過其他參與者選擇的,即研究人員要求其他已知聯(lián)系人尋找愿意參與研究的人。比如下圖中藍(lán)點(diǎn)是研究人員,橙色的是已知聯(lián)系人,黃色是是橙色點(diǎn)周圍的其它聯(lián)系人。
總結(jié)
以上就是8種常用抽樣方法,平時(shí)工作中比較常用的還是概率類抽樣方法,因?yàn)闆]有隨機(jī)性我們是無(wú)法通過統(tǒng)計(jì)學(xué)和編程完成自動(dòng)化操作的。
比如在信貸的風(fēng)控樣本設(shè)計(jì)時(shí),就需要從樣本窗口通過概率進(jìn)行抽樣。因?yàn)椴蓸拥馁|(zhì)量基本就決定了你模型的上限了,所以在抽樣時(shí)會(huì)考慮很多問題,如樣本數(shù)量、是否有顯著性、樣本穿越等等。在這時(shí),一個(gè)良好的抽樣方法是至關(guān)重要的。
到此這篇關(guān)于Python實(shí)現(xiàn)8種常用抽樣方法的文章就介紹到這了,更多相關(guān)Python 抽樣方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python使用pandas抽樣訓(xùn)練數(shù)據(jù)中某個(gè)類別實(shí)例
- python實(shí)現(xiàn)的分層隨機(jī)抽樣案例
- python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)抽樣解析
- 基于python進(jìn)行抽樣分布描述及實(shí)踐詳解
- python Pandas如何對(duì)數(shù)據(jù)集隨機(jī)抽樣