注意:不能简单将X的前N个数据集作为训练数据集,因为目标值y是排好序的,如[0, 0, ..., 1, 1, ..., 2, 2, ...],只能取到一定值。
方法:先对原始数据进行乱序化处理,再取前N个作为训练数据集。
乱序化过程中,X和y是分离的,但是又是一一对应的,所以不能将其分开随机化,会丢失对应关系。
方式一:可以先将X和y合并成一个矩阵,再对矩阵进行随机化处理,处理完再拆分开来。
方式二:对所有元素的M个索引进行乱序处理。
这里采用方式二。
permutation()函数:
permutation(x):Randomly permute a sequence, or return a permuted range.
If `x` is a multi-dimensional array, it is only shuffled along its
first index.
Parameters
----------
x : int or array_like
If `x` is an integer, randomly permute ``np.arange(x)``.
If `x` is an array, make a copy and shuffle the elements
randomly.
Returns
-------
out : ndarray
Permuted sequence or array range.
Examples
--------
>>> np.random.permutation(10)
array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])
>>> np.random.permutation([1, 4, 9, 12, 15])
array([15, 1, 9, 4, 12])
>>> arr = np.arange(9).reshape((3, 3))
>>> np.random.permutation(arr)
array([[6, 7, 8],
[0, 1, 2],
[3, 4, 5]])
1. 导入需要的模块和包:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
2. 读取鸢尾花的数据集:
iris = datasets.load_iris()
X = iris.data # 数据集对应的特征矩阵
y = iris.target # 结果集对应的特征向量
查看一下数据集大小:
3. 数据集的划分
(1)对索引进行乱序处理:
shuffle_index = np.random.permutation(len(X))
(2)指定测试数据集的比例,计算出测试数据集和训练数据集对应的索引:
# 测试数据集的比例
test_radio = 0.2
# 测试数据集的大小
test_size = int(len(X) * test_radio)
# 测试数据集的索引
test_index = shuffle_index[:test_size]
# 训练数据集的索引
train_index = shuffle_index[test_size:]
(3)得到的训练数据集和测试数据集:
# 训练数据集
X_train = X[train_index]
y_train = y[train_index]
# 测试数据集
X_test = X[test_index]
y_test = y[test_index]
可以查看其大小: