训练集与测试集
一般在进行模型的测试时,我们会将数据分为训练集和测试集。在给定的样本空间中,拿出大部分样本作为训练集来训练模型,剩余的小部分样本使用刚建立的模型进行预测。
-
训练集与测试集
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官方文档
网友评论