假設我們今天想要訓練一個AI模型, 那麼我們會有一批大型資料集, 通常會根據比例來切分三個模型訓練所需的訓練集(train)、驗證集(dev)、測試集(test), 而我們本次會示範一下Python如何對一個List清單進行切分, 基本上大同小異, 我們只要掌握作法即可概念相通。
我們有10個依序的號碼球, 每個桶子按照比例大小裝載這些球, 比例如下:
並且每個球會被分到哪邊是隨機亂數的, 請依照這些條件完成隨機分配的任務。
從任務的描述之中我們可以觀察到幾個重點, 「隨機」與「按照比例分類」。
首先我們來談談「隨機」, 這方式最直白的就像是我們在玩撲克牌的洗牌一樣, 將排組盡量模糊掉順序, 避免每次的結果都一樣。
那「按照比例分類」呢? 其實就想像成蛋糕切成幾等份一樣, 一定有些人食量較大, 有些人食量較小, 那我們便按照大小的比例來切成幾等份。
那上述的情境我們可能會有以下幾個思路:
首先我們來分析一下這三種作法吧!
import random
# 初始號碼球列表
balls = list(range(1, 11))
# 各桶比例
props = [0.8, 0.1, 0.1]
buckets = {
'A': [],
'B': [],
'C': []
}
# 依序抽球
for ball in balls:
# 隨機抽桶
bucket = random.choices(list(buckets.keys()), weights=props)[0]
buckets[bucket].append(ball)
# 印出各桶子裝載的內容
for bucket, content in buckets.items():
print(f'桶子 {bucket}: {content}')
import random
# 10個號碼球
balls = list(range(1, 11))
# 按比例分配球到不同桶子
bucket_a = int(10 * 0.8)
bucket_b = int(10 * 0.1)
bucket_c = int(10 * 0.1)
buckets = {'A': [], 'B': [], 'C': []}
for _ in range(bucket_a):
ball = random.choice(balls)
buckets['A'].append(ball)
balls.remove(ball)
for _ in range(bucket_b):
ball = random.choice(balls)
buckets['B'].append(ball)
balls.remove(ball)
for _ in range(bucket_c):
ball = random.choice(balls)
buckets['C'].append(ball)
balls.remove(ball)
# 印出各桶子裝載的內容
print("A桶:", buckets['A'])
print("B桶:", buckets['B'])
print("C桶:", buckets['C'])
import random
# 10個號碼球
total = 10
balls = list(range(0, total))
# 隨機洗牌
random.shuffle(balls)
# 分成三桶後依序放入桶子
# 0 ~ A的區段
a_size = int(total * 0.8)
start = 0
end = a_size
bucket_a = balls[start:end]
# A ~ B的區段
b_size = int(total * 0.1)
start = a_size
end = a_size + b_size
bucket_b = balls[start:end]
# B ~ C的區段
c_size = int(total * 0.1)
start = a_size + b_size
end = a_size + b_size + c_size
bucket_c = balls[start:end]
print("Bucket A:", bucket_a)
print("Bucket B:", bucket_b)
print("Bucket C:", bucket_c)
原來一個需求可以不只有一種方式可以達到目的, 我們應該深入分析之後選擇一個適合我們的方式下去進行實作,而在這裡我們也提供了三種不同的思路下去解決問題,並分析優缺點,相信這樣的技能不只能夠用在軟體開發,生活上的大小事,也都可以進行深入的分析與決策。
當然過程中也不忘ChatGPT的幫忙,至於應該怎麼問對問題呢? 不妨參考以下的篇章學習提問的技巧:
學習軟體開發的路上常常苦於網路資訊爆炸嗎? 教學何其多,但卻遇到無法明確選擇的困境呢? 歡迎加入「🔒 阿Han的軟體心法實戰營」, 這裡不給您冗餘的雜訊, 單刀直入直接送您業界開發重點, 避開選擇障礙的困境, 讓您獲得業界標準的開發起手式, 成為Top 1的頂尖人才。