划分训练、测试集和数据观察

训练集与测试集

一般在进行模型的测试时,我们会将数据分为训练集和测试集。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进行预测。

  • 训练集与测试集

train_test_split 函数利用伪随机数生成器将数据集打乱。默认情况下0.75为训练集,0.25测试集。

  • sklearn.model_selection.train_test_split

  • 划分数据集其参数有:

    arrays :允许的输入是列表,数字阵列

    test_size :float,int或None(默认为无),如果浮点数应在0.0和1.0之间,并且表示要包括在测试拆分中的数据集的比例。如果int,表示测试样本的绝对数

    train_size :float,int或None(默认为无),如果浮点数应在0.0到1.0之间,表示数据集包含在列车拆分中的比例。如果int,表示列车样本的绝对数

    random_state :int或RandomState,用于随机抽样的伪随机数发生器状态,参数 random_state 默认设置为 None,这意为着每次打散都是不同的。

from sklearn.model_selection import train_test_split
from sklearn import datasets

iris = datasets.load_iris()
print(iris.data.shape,iris.target.shape[0])
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.3,random_state=12)
print(X_train.shape,y_train.shape[0])
print(X_test.shape,y_test.shape[0])
(150, 4) 150
(105, 4) 105
(45, 4) 45

观察数据

在构建机器学习模型之前,通常最好检查一下数据,看看如果不用机器学习能不能轻松完成任务,或者需要的信息有没有包含在数据中。
此外,检查数据也是发现异常值和特殊值的好方法。举个例子,可能有些鸢尾花的测量单位是英寸而不是厘米。在现实世界中,经常会遇到不一致的数据和意料之外的测量数据。检查数据的最佳方法之一就是将其可视化。一种可视化方法是绘制散点图(scatter plot)。数据散点图将一个特征作为 x 轴,另一个特征作为 y 轴,将每一个数据点绘制为图上的一个点。不幸的是,计算机屏幕只有两个维度,所以我们一次只能绘制两个特征(也可能是3 个)。用这种方法难以对多于 3 个特征的数据集作图。解决这个问题的一种方法是绘制散点图矩阵(pair plot),从而可以两两查看所有的特征。如果特征数不多的话,比如我们这里有 4 个,这种方法是很合理的。但是你应该记住,散点图矩阵无法同时显示所有特征之间的关系,所以这种可视化方法可能无法展示数据的某些有趣内容。

  • pandas.plotting.scatter_matrix()
    参数:
    frame : DataFrame
    alpha : float,可选 应用的透明度
    figsize :( float,float),可选 以英寸为单位的元组(宽度,高度)
    ax : Matplotlib轴对象,可选
    grid : bool,可选 将此设置为True将显示网格
    diagonal : {'hist','kde'} 在'kde'和'hist'之间选择对角线中的核密度估计或直方图
    marker : str,可选 Matplotlib标记类型,默认为'o'
    hist_kwds : 其他绘图关键字参数 要传递给hist函数
    density_kwds : 其他绘图关键字参数 要传递给核密度估计图
    range_padding : float,可选 图像在x轴,y轴原点附近留白,值越大,留白越多,默认值为0.05
    kwds : 其他绘图关键字参数 要传递给分散函数

数据点的颜色与鸢尾花的品种相对应。为了绘制这张图,我们首先将 NumPy 数组转换成 pandas DataFrame。pandas 有一个绘制散点图矩阵的函数,叫作 scatter_matrix。矩阵的对角线是每个特征的直方图

import pandas as pd
import mglearn 
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 加载iris数据
iris = load_iris()
# 将数据分为训练集和测试集
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=12)
# 利用X_train中的数据创建DataFrame
# 利用iris_dataset.feature_names中的字符串对数据列进行标记 
iris_dataframe = pd.DataFrame(X_train,columns=iris.feature_names)
# 利用DataFrame创建散点图矩阵,按y_train着色
grr = pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',
                        hist_kwds={'bins':20},s=60,alpha=0.8,cmap=mglearn.cm3)
iris.png

从图中可以看出,利用花瓣和花萼的测量数据基本可以将三个类别区分开。这说明机器学习模型很可能可以学会区分它们。

参考资料:
Python机器学习基础教程
Pandas官方文档

你可能感兴趣的:(划分训练、测试集和数据观察)