<
>

【学习机器学习】实验——模型评估与选择

2020-06-28 12:10:39 来源:易采站长站 作者:易采站长站整理

【学习机器学习】模型评估与选择

这学期的课很多都要实验啊,不过机器学习真的可以算其中比较离谱的了,不说当堂上交,就这个任务量也属实有点多。其实要到4月3号才是我们班做,提前找其他班同学要到了先用python写写,到时候可能还要用matlab重新实现。。。

0、实验总览
Ⅰ、编程实现训练数据集与测试数据集
Ⅱ、编程实现性能度量
Ⅲ、编程实现假设检验(不太会)
一、任务一
1.1 留出法

留出法原理很直观,就是按照设定的比例对原始数据随机划分成两个互斥的集合,注意训练/测试集划分要尽可能保持数据分布的一致性(其实只要是随机分的多数可以保证)
那代码实现,如果调用sklearn真的是一句话就完事儿了,例如:

 count = 0
while count < 100:
data_train, data_test = train_test_split(data, train_size=0.80, random_state=None, shuffle=True)
np.savetxt('./留出法数据/train{no}.csv'.format(no=count+1), data_train, fmt='%f', delimiter=',')
np.savetxt('./留出法数据/test{no}.csv'.format(no=count+1), data_test, fmt='%f', delimiter=',')
count = count + 1

所以我决定对这个train_test_split的源码进行一下研究,看看具体怎么实现的(防止老师禁止调用现成函数)

train_test_split源码如下:

def train_test_split(*arrays, **options):
n_arrays = len(arrays) # 一共有几个数据集
if n_arrays == 0: # 不能为空数据集
raise ValueError("At least one array required as input")
test_size = options.pop('test_size', None) # test_size即测试集占比,0~1之间的浮点数
train_size = options.pop('train_size', None) # train_size即训练集的占比,0~1之间的浮点数
random_state = options.pop('random_state', None) # 可以是一个整数,指定随机数生成器的种子
stratify = options.pop('stratify', None) # stratify可以是一个数据或者None。如果它不是None,则原始数据会分层采样,采样的标记数据由该参数指定。
shuffle = options.pop('shuffle', True) # shuffle主要决定每次执行结果是否相同

if options: # 无效的选项
raise TypeError("Invalid parameters passed: %s" % str(options))

arrays = indexable(*arrays)

n_samples = _num_samples(arrays[0])
n_train, n_test = _validate_shuffle_split(n_samples, test_size, train_size,
default_test_size=0.25) # 检验参数选项是否合理,得到训练集和测试集大小

if shuffle is False:
if stratify is not None:
raise ValueError(

暂时禁止评论

微信扫一扫

易采站长站微信账号