作者:欧新宇(Xinyu OU)
本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz
【作业提交】
将分类结果保存到文本文档进行提交(写上每一题的题号和题目,然后再贴答案),同时提交源代码。
*结果文件,要求每小题标注题号,两题之间要求空一行*
训练集
、验证集
的分割比例为:70% : 30%MLP
模型进行训练和测试,MLP优化函数为lbfgs,激活函数为reluStratifiedKFold
算法进行分层5折交叉验证 随机参数
random_state=62提示:
- 在训练集上训练MLP模型,并使用
交叉验证
和网格搜索
获取最优参数- 将最优参数应用到MLP模型,并在训练验证集上进行训练
- 输出训练验证集上的评分和测试集上的评分
# TODO: 1. 导入必须库 以及 定义必要的函数
# 导入机器学习数据集处理工具
from sklearn import datasets
from sklearn.model_selection import train_test_split
# TODO: 2. 创建/导入数据
iris = datasets.load_iris()
# TODO: 3. 数据预处理,包括训练集、测试集划分,数据正则化,数据清洗等
X = iris.data
y = iris.target
X_trainval, X_test, y_trainval, y_test = train_test_split(X, y, train_size=0.7, random_state=16)
# X_train, X_val, y_train, y_val = train_test_split(X_trainval, y_trainval, train_size=0.7)
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.neural_network import MLPClassifier
import time
start = time.time()
SKF = StratifiedKFold(n_splits=5, random_state=16, shuffle=False)
mlp = MLPClassifier(solver='lbfgs', activation='relu', random_state=16)
params = {'alpha':[5e-4, 1e-4, 5e-3, 1e-3, 5e-2, 1e-2],
'hidden_layer_sizes':[[10], [20], [50], [100], [150], [10, 10],[20, 20],[50, 50]]}
# params = {'alpha':[1e-6, 5e-5, 1e-5, 5e-4, 1e-4, 5e-3, 1e-3, 5e-2, 1e-2],
# 'hidden_layer_sizes':[[10], [20], [50], [100], [150], [200], [10, 10],[20, 20],[50, 50],[100, 100],[150, 150],[200, 200]]}
grid_search = GridSearchCV(mlp, params, cv=SKF, iid=False)
grid_search.fit(X_trainval, y_trainval)
print("执行时间:{:.2f}s".format(time.time()-start))
print('最优参数:{}'.format(grid_search.best_params_))
print('最佳得分(验证集):{:.4f}'.format(grid_search.best_score_))
print('最优模型:{}'.format(grid_search.best_estimator_))
score_trainval = grid_search.score(X_trainval, y_trainval)
score_test = grid_search.score(X_test, y_test)
print('基于GridSearch方法的输出,训练集得分: {:.4f}, 测试集得分: {:.4f}'.format(score_trainval, score_test))
best_params = grid_search.best_params_
mlp = MLPClassifier(solver='lbfgs', activation='relu', random_state=16, **best_params)
mlp.fit(X_trainval, y_trainval)
score_trainval = mlp.score(X_trainval, y_trainval)
score_test = mlp.score(X_test, y_test)
print('基于最优参数的输出,训练集得分: {:.4f}, 测试集得分: {:.4f}'.format(score_trainval, score_test))
model = grid_search.best_estimator_
score_trainval = model.score(X_trainval, y_trainval)
score_test = model.score(X_test, y_test)
print('基于最优模型的输出,训练集得分: {:.4f}, 测试集得分: {:.4f}'.format(score_trainval, score_test))