Algorithm Evaluation Methods

Chapter 3

Algorithm Evaluation Methods

Train and Test Split

# Split a dataset into a train and test set
def train_test_split(dataset,split=0.60): 
	train = list() 
	train_size = split * len(dataset) dataset_copy = list(dataset) 
	while len(train) < train_size: 
		index = randrange(len(dataset_copy)) 
		train.append(dataset_copy.pop(index)) #移除并且返回元素的值
return train, dataset_copy

k-fold Cross-Validation Split

  • 首先将数据分成k组
  • 然后训练算法并评估k次
  • 通过取平均表现得分来总结表现。

每组数据称为折叠,因此称为k折叠交叉验证。
工作在k-1个数据组上训练算法,并在第k个保持组上对其进行评估作为测试集。
重复此过程,以便k个组中的每一个都有机会举行并用作测试集。
应该为k选择一个值,该值会将数据分成几组,每行有足够的行组仍然代表原始数据集。一个好的默认值是k = 3.对于较大的数据集,k = 10。
在这里插入图片描述
如果数据集不能完全除以折叠数,则可能会有余数行,它们将不会在拆分中使用。然后,我们创建具有所需大小的行列表并将它们添加到折叠列表中,然后最后返回:

# Split a dataset into $k$ folds 
def cross_validation_split(dataset, folds=3): 
	dataset_split = list() 
	dataset_copy = list(dataset) 
	fold_size = int(len(dataset) / folds) 
	for i in range(folds): 
		fold = list() 
		while len(fold) < fold_size: 
			index = randrange(len(dataset_copy)) 
			fold.append(dataset_copy.pop(index)) 
		dataset_split.append(fold) 
	return dataset_split

我们可以在与上述相同的小型人为数据集上测试此重采样方法。每行只有一个列值,但是我们可以想象它如何扩展到一个标准机器学习数据集。下面列出了完整的示例。和以前一样,我们将种子固定为随机数生成器,以确保每次执行代码时,相同的行用于相同的折叠。k值4用于演示目的。我们期望将10行分成4折将导致每折2行,其余2行将不会在拆分中使用。

# Example of Creating a Cross Validation Split 
from random import seed 
from random import randrange

# Split a dataset into k folds 
def cross_validation_split(dataset, folds=3): 
	dataset_split = list() 
	dataset_copy = list(dataset) 
	fold_size = int(len(dataset) / folds) 
	for _ in range(folds): 
		fold = list() 
		while len(fold) < fold_size: 
			index = randrange(len(dataset_copy)) 
			fold.append(dataset_copy.pop(index)) 
		dataset_split.append(fold)
	return dataset_split

# test cross validation split 
seed(1) 
dataset = [[1], [2], [3], [4], [5], [6], [7], [8], [9], [10]] 
folds = cross_validation_split(dataset, 4) 
print(folds)

结果

[[[3], [2]], [[7], [1]], [[8], [9]], [[10], [6]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值