在应用机器学习方法进行模型训练时,需要通过数据切分将数据集分为训练集/验证集/测试集。并且可以通过交叉验证,对模型在验证集上的拟合效果进行预评估,以选择表现最好的模型。此外,可以通过参数网格搜索的方法,确定最优的模型参数。
本篇文章通过具体数据做示例,总结了sklearn中模型选择model_selection模块常用函数的使用。包括:
1. 数据切分:train_test_split
2. K折交叉验证:KFold,StratifiedKFold,cross_val_score
3. 参数网格搜索:GridSearchCV
一、数据导入
导入python自带的wine数据集用于演示。该数据集为一个分类数据集,响应变量y取值为0、1、2.
from sklearn import datasets
wine_data = datasets.load_wine()
X = wine_data.data
y = wine_data.target
print(X.shape)
# (178, 13)
二、数据切分
sklearn中train_test_split函数用于数据切分。其输入为待切分的特征X 和 相应变量y。输出按顺序为:切分后的训练集特征X_train,测试集特征X_test,训练集响应变量y_train,测试集响应变量y_test。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
train_test_split 函数参数说明:
- train_size:指定训练集大小(整数)/训练集比例(小数)
- test_size:指定测试集大小(整数)/测试集比例(小数)
- shuffle:默认值为True,表示在进行数据分割前,先进行数据打乱重排。
- random_state:随机种子,用来保证每次运行函数时,数据打乱重排的结果是一致的。
- stratify:用于控对制数据按标签类别进行分层切分。默认值为None,表示随机划分标签。当给定一个array时,将对array中的每个类别按相同的比例切分,此时其取值通常为类别响应变量y。(后面将通过具体实例进行演示)
当stratify取默认值None时,运行结果如下:
# 执行如下代码,测试集占比为0.2,查看划分结果
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 查看训练集和测试集大小
print(X_train.shape, X_test.shape)
#### 输出:(142, 13) (36, 13)
# 查看原始数据中标签类别分布,可知标签中有45个值为0,57值为1,40个值为2
print(sum(y==0), sum(y==1), sum(y==2))
#### 输出:45 57 40
<