1. 为什么是数据分割
通过把数据集 (Dataset) 中的数据内容分割成训练集 (Train Set) 和测试集 (Test Set),用训练集来训练模型,再通过测试集来测试模型的性能,如果测试通过,才会考虑投放在实际应用中。
2. 数据分割的注意事项
2.1. 保证数据的随机性
如果数据分割是按照一定的规律进行的话,那么训练出来的模型也会被“模式化”,一旦遇到特殊值,就会判断出错。
2.2. 保证训练集的大小
训练的数量越大,模型的准确率一般会更高。如果训练集太小,模型就“不稳定”,在测试中遇到特殊值,就容易得到错误的结果。
3. Python实现方法
Github代码:https://github.com/JasonDean-1/MachineLearningDemo/blob/master/DataPreprocessing/1.DataSplit.py
3.1. 调用sklearn的包
# -*- coding: utf-8 -*-
"""
Package Version(s):
sklearn: 0.18
"""
from sklearn.datasets import load_digits
# load in datasets
datasets = load_digits()
# Print out the datashape.
print "The length of dataset is: ", datasets.data.shape
# Ans = (1797L, 64L)
from sklearn.cross_validation import train_test_split
# Split the data
x_train, x_test, y_train, y_test = train_test_split( datasets.data, datasets.target, test_size = 0.25, random_state = 42 )
# Print out the datashape.
print "The length of train set is: ", y_train.shape
# Ans = (1347L,)
print "The length of test set is: ", y_test.shape
# Ans = (450L,)
----------
Output:
# The length of dataset is: (1797L, 64L)
# The length of train set is: Ans = (1347L,)
# The length of test set is: Ans = (450L,)
3.2. 通过循环来分割数据
# -*- coding: utf-8 -*-
"""
Package Version(s):
sklearn: 0.18
"""
from sklearn.datasets import load_digits
# load in datasets
datasets = load_digits()
# Print out the datashape.
print "The length of dataset is: ", datasets.data.shape
# Ans = (1797L, 64L)
x_train = []
x_test = []
y_train = []
y_test = []
# Split the data
x_test = [datasets.data[i] for i in range(len(datasets.data)) if i%4 == 0]
x_train = [datasets.data[i] for i in range(len(datasets.data)) if i%4 != 0]
y_test = [datasets.target[i] for i in range(len(datasets.data)) if i%4 == 0]
y_train = [datasets.target[i] for i in range(len(datasets.data)) if i%4 != 0]
# Print out the datashape.
print "The length of train set is: ", len( y_train )
# Ans = 1347
print "The length of test set is: ", len( y_test )
# Ans = 450
----------
Output:
# The length of dataset is: (1797L, 64L)
# The length of train set is: Ans = 1347
# The length of test set is: Ans = 450