作者:欧新宇(Xinyu OU)
本文档所展示的测试结果,均运行于:Intel Core i7-7700K CPU 4.2GHz
【作业提交】
将分类结果保存到文本文档进行提交(写上每一题的题号和题目,然后再贴答案),同时提交源代码。
*结果文件,要求每小题标注题号,两题之间要求空一行*
训练集
、验证集
的分割比例为:70%:30%StratifiedKFold
算法进行分层3折交叉验证 随机参数
random_state=8提示:
- 在训练集上训练模型,并使用
交叉验证
和网格搜索
获取最优参数- 使用最优模型(或最优参数)在训练验证集上重新进行训练生成最终模型
- 输出训练验证集上的评分和测试集上的评分
对于乳腺癌数据集有如下操作提示:
print(cancer.keys())
查看肿瘤数据集包含哪些字段print(cancer['字段'])
观察该字段的内容,例如使用 print(cancer['data'])
查看数据的信息# TODO: 1. 导入必须库 以及 定义必要的函数
# 导入机器学习数据集处理工具
from sklearn import datasets
from sklearn.model_selection import train_test_split
# TODO: 2. 创建/导入数据
cancer = datasets.load_breast_cancer()
# TODO: 3. 数据预处理,包括训练集、测试集划分,数据正则化,数据清洗等
X = cancer.data
y = cancer.target
X_trainval, X_test, y_trainval, y_test = train_test_split(X, y, train_size=0.7, random_state=8)
# X_train, X_val, y_train, y_val = train_test_split(X_trainval, y_trainval, train_size=0.7)
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.naive_bayes import GaussianNB
# 导入MLP神经网络包
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.model_selection import StratifiedKFold
import numpy as np
SKF = StratifiedKFold(n_splits=3, random_state=8, shuffle=False)
params = [{'scaler':[StandardScaler(),MinMaxScaler()],
'cls':[MLPClassifier(random_state=8, max_iter=2000)],
'cls__alpha':[1e-6, 5e-5, 1e-5, 5e-4, 1e-4, 5e-3, 1e-3, 5e-2, 1e-2],
'cls__hidden_layer_sizes':[[20], [50], [100], [150], [200], [10, 10],[20, 20],[50, 50]]},
{'scaler':[StandardScaler(),MinMaxScaler()],
'cls':[GaussianNB()],
'cls__var_smoothing':np.logspace(-15,10,26)}]
pipe = Pipeline([('scaler',StandardScaler()),('cls',MLPClassifier())])
grid = GridSearchCV(pipe, params, cv=SKF, verbose=1,n_jobs=-1)
grid.fit(X_trainval,y_trainval)
print('最佳模型是:\n{}'.format(grid.best_params_))
print('交叉验证平均分:{:.3f}'.format(grid.best_score_))
score_trainval = grid.score(X_trainval, y_trainval)
score_test = grid.score(X_test, y_test)
print('基于GridSearch方法的输出,训练集得分: {:.3f}, 测试集得分: {:.3f}'.format(score_trainval, score_test))