# 机器学习-BP 网络对葡萄酒数据和数字识别数据的多分类实现-sklearn 实现 **Repository Path**: ABigWildCat/mlp ## Basic Information - **Project Name**: 机器学习-BP 网络对葡萄酒数据和数字识别数据的多分类实现-sklearn 实现 - **Description**: BP 网络对葡萄酒数据和数字识别数据的多分类实现-sklearn 实现 - **Primary Language**: Python - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2023-04-06 - **Last Updated**: 2023-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # BP 网络对葡萄酒数据和数字识别数据的多分类实现-sklearn 实现 #### 介绍 BP 网络对葡萄酒数据和数字识别数据的多分类实现-sklearn 实现 #### 代码内容说明 1. 采用 scikit-learn 中的 MLPClassifier 对红酒数据集进行分类,并通过特征和边界可视化,能够直观体会多层感知机网络中的隐层上神经元数量、隐层层数、激活函数、正则化项系数等超参数对模型复杂程度的影响。 (1)选取前两个特征,建立多层感知机网络进行多分类。 (2)可视化:通过散点图可视化数据样本(之前选择的两个特征),并画出模型训练后得到的决策边界。 2. 采用 scikit-learn 中的 MLPClassifier 对自带手写数字数据集进行分类 (1)导入数据集:手写数字集是 sklearn 中自带的数据集,它是一个三维数组(1797, 8, 8), 即有 1797 个手写数字,每个数字由 8*8 的像素矩阵组成。矩阵中每个元素都是 0-16 范围内的整数。分类标签为 0-9 的数字。 (2)模型建立:使用 MLPClassifier 建立分类模型。 (3)输出:分类结果的准确率。 #### 安装教程 本代码需要的库:numpy、sklearn、matplotli、argparse、warnings #### 使用说明 需要在参数空间def get_arguments()中更改参数,选择不同的数据集、特征选取、类别标签、训练集测试集划分比例、随机数种子。 ![参数设置](image.png) 1. '--dataset',选择不同的数据集,可选择 '1: the wine dataset,' '2: the digits dataset',赋给default(即 default=1 选择the wine dataset葡萄酒数据集,default=2 选择the digits dataset手写字体数据集) 2. '--test_size', 训练集测试集划分比例,设置default=0.33, 即训练集的比例为33%,可根据需求修改 3. '--random_state', 随机数种子,default=42, 划分数据集的随机种子数为42,可根据需求修改 4. '--hidden_layer_sizes',隐藏层个数,可根据需求修改 5. '--activation',激活函数,可选择'identity', 'logistic', 'tanh', 'relu',可根据需求选择赋给default (1) identity:f(x) = x (2) logistic:其实就是 sigmod,f(x) = 1 / (1 + exp(-x)) (3) tanh:f(x) = tanh(x) (4) relu:f(x) = max(0, x) 6. '--alpha',float,L2 正则化项的强度(L2 正则化项在添加到损失时除以样本大小),默认 0.0001。 7. '--learning_rate',用于权重更新的学习率,只有当 solver 为’sgd’时使用。可选项包括{‘constant’,’invscaling’, ‘adaptive’},默认 constant ,本代码中使用'adaptive',可根据需求修改。 (1) ‘constant’:有’learning_rate_init’给定的恒定学习率 。 (2) ‘incscaling’:随着时间 t 使用’power_t’的逆标度指数不断降低学习率 learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t) 。 (3) ‘adaptive’:只要训练损耗在下降,就保持学习率为’learning_rate_init’不变,当连续两次不能降低训练损耗或验证分数停止升高至少 tol 时,将当前学习率除以 5。 8. '--max_iter',int,最大迭代次数,默认 200,本代码用设置10000,可根据需求修改。 #### BP 网络对葡萄酒数据的多分类实现-sklearn 实现结果 1. 主函数实现代码 ![主函数实现代码](image1.png) 2. 选取前两个特征,建立多层感知机网络进行多分类。通过散点图可视化数据样本(左图),画出模型训练后得到的决策边界(右图) ![输入图片说明](image2.png) 3. 可改变参数空间def get_arguments()中的参数,体会不同参数对决策边界的影响,例如: 改变单隐层中神经元个数(如10个,100个),其他参数不变,观察其对决策边界的影响。 改变神经网络深度(如深度为2,每层10个神经元),其他参数不变,观察神经网络深度其对决策边界的影响。 改变激活函数(如tanh、relu),观察不同激活函数对决策边界的影响。 增大正则化系数,观察正则化对决策边界的影响。