深度学习案例教程 教案6.3训练测试数据.docx
03训练、测试数据
1
我们本节课来学习训练数据和测试数据。
训练数据和测试数据是用于建立和验证机器学习模型的数据,选择正确的训练和测试数据对于建立有效的模型是至关重要的。
那么,什么是训练数据和测试数据呢?我们分别来看一下。
2
训练数据是用来训练机器学习模型的数据,模型通过学习训练数据中的特征和目标变量的关系来理解数据的模式和规律。
3
测试数据则是用来评估模型性能的数据,它提供了一种方式,让我们能够评估模型在未知数据上的表现。通过比较模型在测试数据上的预测结果和实际结果,我们可以了解模型的精度,也就是了解模型的预测能力有多么的好。
4
接下来,我们来看训练数据和测试数据如何分割。
常见的分割方法有三种,第一种是留出法。
这是最常见的划分方式。通常将原始数据按比例,比如说70%:30%,那就是将70%的数据划分为训练集,剩下30%为测试集。训练集用于训练模型,测试集用于评估模型。
这种方法的缺点是其性能高度依赖于划分的方式。
5
第二种方法是交叉验证。
为了减少留出法由于随机划分导致的性能评估不稳定的问题,我们可以采用交叉验证方法来划分数据集。
这个方法是将数据集划分为K个大小相似的互斥子集,然后每次用K-1个子集的并集作为训练集,剩下的1个作为测试集,这样就可以得到K组训练或者测试集,从而进行K次训练和测试,最终返回的是这K个测试结果的均值。
6
第三个方法是自助法。
通过有放回的进行抽样来创建新的训练数据。自助法可以有效的使用数据,但是它改变了原始数据的分布,可能会引入偏差。
三种分割方法各有利弊,主要还是需要根据项目的实际需求来选择训练和测试数据分割的方式。
7
那么,在Python中,我们通常会使用scikit-learn库的train_test_split函数进行训练和测试数据的分割。
我们来看一段简单的训练数据和测试数据分割的例子。
8
首先我们导入对应的包。
9
假设X为特征数据,y为目标数据
10
我们可以调用train_test_split函数来划分训练数据和测试数据,使用test_size参数来指定测试数据的比例(在这里为20%),random_state参数用于确保每次划分都得到相同的结果。
划分好后,现在可以使用X_train和y_train进行模型训练,然后使用X_test和y_test来评估模型。
11
在PyTorch中,虽然没有直接提供像scikit-learn中的train_test_split这样的函数,但是我们可以使用PyTorch的Dataset和DataLoader类以及一些Python功能轻松实现这一点。
我们来看个简单的小例子。
首先我们导入对应的包。
13
然后定义了一个MyDataset这样的一个数据集的类。
在这个类中,它接受特征数据X和目标数据y,并实现了__len__和__getitem__方法,这两个方法是所有PyTorch数据集都需要实现的。
14
然后我们来创建数据集,并定义好训练集和测试集的大小。
15
接下来就是数据集的分割,我们使用random_split函数将数据集分割为训练集和测试集。
16
最后,我们使用DataLoader类创建了训练和测试的数据加载器,这将使我们能够在训练和测试模型时轻松地迭代数据。
这就是使用PyTorch来进行针对于我们训练数据集和测试数据集的操作。
我们在这个例子中使用了一个DataLoader类,DataLoader会运行时动态加载数据,所以当我们的数据集非常大的时候,我们可以使用这种方法来减少内存的使用。
同时呢,这个DataLoader还支持自动批处理、数据乱序以及多线程数据加载这些功能。
好。本节对于训练、测试数据就到这里。