机器学习 -- KNN算法(Ⅵ 数据集的拆分)

将数据集拆分为训练数据集和测试数据集:

注意:不能简单将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]

可以查看其大小:

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读