一、randomsample的作用
在數據分析與機器學習領域,一般需要從整個數據集中抽取一部分樣本進行建模、研究、驗證等操作。randomsample函數正是解決這種問題的工具。它可以在一個給定的序列中,以指定的樣本數量或比例,隨機抽取樣本。
二、randomsample的語法
randomsample函數的語法如下:
random.sample(sequence, k) random.sample(sequence, k, *, counts=None)
其中:
sequence:必須是一個可迭代的對象,比如列表(list)、元組(tuple)、字元串(string)等。
k:從原序列中隨機抽取的元素個數。
counts:是一個與sequence等長的可迭代對象,用於指定每個元素的被抽取次數,如果不指定,則每個元素都只會被抽取一次。
三、randomsample的使用方法
1. 抽樣樣本數量和比例
randomsample函數可以通過指定抽樣元素的數量或佔比,實現從序列中進行抽樣的操作:
#抽取一個列表中的3個隨機樣本,注意,結果可能會隨機變化 import random lst = ['a','b','c','d','e','f','g','h','i','j'] res = random.sample(lst,3) print(res) #輸出結果可能是 ['j', 'c', 'h']
#從一個範圍內的數字抽取4個不重複的隨機樣本 import random res = random.sample(range(1,21),4) print(res) #輸出結果可能是 [17, 20, 7, 18]
除了指定抽樣數量外,還可以通過指定抽樣比例來實現抽樣操作:
#以50%的比例抽取一個列表中隨機樣本,注意,結果可能會隨機變化 import random lst = ['a','b','c','d','e','f','g','h','i','j'] res = random.sample(lst, int(len(lst)*0.5)) print(res) #輸出結果可能是 ['f', 'j', 'a']
以上3個例子中,我們可以看到randomsample函數的基本用法。通過傳入一個可迭代對象,在其中隨機抽取k個元素,返回包含這k個元素的列表。需要注意的是,結果是沒有重複元素的。
2. 指定每個元素被抽取的次數
有時候,我們需要對序列中的每個元素指定被抽取的次數,比如每個元素都要被抽取2次。這時候,counts參數就能派上用場了:
#指定一個列表中每個元素都被抽取2次 import random lst = ['a','b','c','d','e','f','g','h','i','j'] res = random.sample(lst, len(lst), counts=[2]*len(lst)) print(res) #輸出示例:['f', 'j', 'i', 'j', 'd', 'i', 'h', 'e', 'h', 'a']
在以上例子中,抽取結果中的每個元素都被抽取了2次,即原列表中有3個元素沒能被抽取到。需要注意的是,序列中元素的個數與counts中每個元素的數量應該相等。
3. 抽樣空序列、出現重複元素的處理方式
在實際開發中,我們可能會遇到一些特殊情況,比如抽樣的序列為空,或者需要抽樣的樣本數量大於序列的長度。這個時候,randomsample函數的處理方式會有所不同:
#對於空列表,randomsample將會引發異常 import random try: res = random.sample([], 2) print(res) except Exception as e: print(e) #輸出:Sample larger than population
#如果抽取數量大於序列長度,randomsample函數將會拋出異常 import random try: res = random.sample([1,2], 3) print(res) except Exception as e: print(e) #輸出:Sample larger than population
另外需要注意的是,如果一個序列中存在重複元素,那麼它們也會遵循隨機抽樣的規則,有可能被抽取多次。相同元素出現的次數與counts參數無關。
四、總結
randomsample函數是Python中處理隨機抽樣的重要工具,它能夠輕鬆地從序列中抽取指定數量或比例的樣本。另外,通過counts參數,還可以對每個元素進行定製化的抽樣次數設置。然而,在使用的過程中,我們需要注意空序列和抽樣數量大於序列長度的情況,以及相同元素出現次數與counts參數無關的特點。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/295853.html