「留出法」直接將資料集d劃分為兩個互斥的集合,乙個為訓練集s,乙個為測試集t,即d=s∪t,s∩t=∅.在s上進行模型學習,然後用t來評估其測試誤差,作為對泛化誤差的估計。
單次使用留出法得到的估計結果往往不夠穩定可靠,在使用留出法時,一般要採用若干次隨機劃分、重複進行模型評估後取平均值作為留出法的評估結果。
import random
import csv
import pandas as pd
def loaddataset(filename, split, trainingset = , testset = ):
with open(filename, 'r') as f:
lines = csv.reader(f)
dataset = list(lines)
for x in range(len(dataset)-1):
if random.random() < split: #將資料集隨機劃分
else:
if __name__ == "__main__":
train =
test =
loaddataset('', 0.7, train, test)
print(train)
print(test)
train2 = pd.dataframe(data=train)
train2.to_csv('')
test2 = pd.dataframe(data=test)
test2.to_csv('')
「交叉驗證法」先將資料集d劃分為k個大小相同的互斥子集,即d=d1∪d2∪⋯∪dk,di∩dj=∅(i≠j).其中每個子集di都應盡量保持資料分布的一致性,即從d中通過分層取樣得到。
然後,每次都用其中的k−1個子集的並集作為訓練集,餘下乙個作為測試集,這樣就可以得到k組訓練集/測試集,從而可以進行k次模型的學習,並把這k個測試結果的均值作為評估結果,通常我們把交叉驗證法稱為「k折交叉驗證」。
將資料集d劃分為k個子集存在多種劃分方式,為了減小因樣本劃分不同而引入的差別,k折交叉驗證可以隨機使用不同的劃分重複p次,最終的評估的結果是這p次k折交叉驗證結果的均值
import csv
import pandas as pd
with open('titanic.csv', 'r') as f:
lines = csv.reader(f)
data_set = list(lines)
del(data_set[0])
length = len(data_set)//10
print(length)
data =
for i in range(10):
print(data_set)
print(data)
在留出法和交叉驗證法中保留了一部分樣本用於測試,但是我們希望模型是利用d訓練出來的。因此,「自助法」是乙個比較好的解決方法,它對資料集d進行取樣產生新資料集d′每次從d中進行有放回的隨機取樣,取得樣本放入d′中,直至d′ 的樣本個數也為m.顯然,d中的一部分樣本有可能會多次出現在d′中,對任意乙個樣本,在m次取樣中沒有被取到的概率為$
即通過自住法取樣,資料集d中約有36.8%的樣本未出現在資料集d′中,於是可以將d′ 用作訓練集,d/d′用作測試集。
#自助法import numpy as np
#任意設定乙個資料集
x = [1, 4, 3, 23, 4, 6, 7, 8, 9, 45, 67, 89, 34, 54, 76, 98, 43, 52]
#通過產生的隨機數獲得抽取樣本的序號
for i in range(len(x)):
#通過序號獲得原始資料集中的資料
d_1 =
for i in range(len(x)):
劃分資料集
如果要在乙個二維資料散點圖中間畫一條線將資料集分開,是按照x劃分還是y劃分呢 from math import log defcreatedataset dataset 1,1,yes 1,1,yes 1,0,no 0,1,no 0,1,no labels no su cing flippers r...
劃分資料集
import glob import shutil total file total file.txt train train.txt val val.txt bin path data l v bin 總的點雲資料集檔案路徑 如果是自己的路徑,就是 自己點雲資料夾 bin bin train di...
劃分資料集的方法
train split方法 1 匯入包 fromsklearn.model selectionimport train test split 2 函式介紹 train split arrays,test size,train size,random state,shuffle,stratify 3 ...