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

作者: 陨星落云 | 来源:发表于2019-05-07 12:26 被阅读1次

    训练集与测试集

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

    • 训练集与测试集

    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官方文档

    相关文章

      网友评论

        本文标题:划分训练、测试集和数据观察

        本文链接:https://www.haomeiwen.com/subject/tsreoqtx.html