• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

  • 博客园
  • 联系
  • 订阅
  • 管理

View Post

[Machine Learning] 使用sklearn搭建多层感知机神经网络模型实现葡萄酒分类

内容实现概述

本文主要讲述使用sklearn库内置的神经网络模型,实现葡萄酒分类。 具体实现过程如下:

  1. 导入所需库:预先导入sklearn库
  2. 导入数据:调用库内置的加载葡萄酒数据的方法load_wine(),导入数据
  3. 数据预处理:对wine数据进行预处理,获得特征数据与目标数据;对特征数据进行归一化处理
  4. 数据分割:使用sklearn库的数据分割方法对步骤3中的数据进行比例分割,得到训练集和测试集数据
  5. 构建模型:调用sklearn库的多层感知机模型类MLPClassifier构建模型
  6. 训练模型:调用sklearn库的fit()方法对训练集数据进行训练
  7. 预测模型:调用sklearn库的predict()方法对测试集数据进行预测
  8. 评估模型:由于该模型是分类模型,所以调用sklearn库的准确率评估方法accuracy_score()进行评估

注:

  • 在Python中使用(导入)scikit-learn库时,需要先安装,本实现使用的是pip命令安装 pip install -U scikit-learn
  • Scikit-Learn官方教程

代码实现

注:源代码地址

# 当前任务:利用多层反馈神经网络学习算法,通过分析红酒中化学成分的含量(共计13个特征)对红酒进行分类

from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score


## 获取(导入)葡萄酒wine数据集
wine = load_wine()

X = wine.data
y = wine.target

## 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

## 数据预处理(如,归一化)
# 特征数据归一化(指将所有特征值映射到[0,1]内),对样本的不同特征做一些预处理。结果:模型性能得到极大提升
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
# 使用标准缩放器,来计算特征矩阵的平均值和标准差,用于以后的缩放
scaler.fit(X_train)
X_train = scaler.transform(X_train)
# X_train = scaler.fit_transform(X_train) # 该行代码可替换上两行代码
X_test = scaler.transform(X_test)


## 构造(导入)多层感知机分类器模型,即构造多层神经网络
# 第一个参数是solver,其含义为“解题者”​,表示的是某种快速找到解的优化算法,包含有'lbfgs'、'sgd'、'adam'。
# 第二个参数是hidden_layer_sizes,它决定着神经网络的拓扑结构。hidden_layer_sizes=(100,),它表示隐含层有一层,该层有100个神经元
# 输入层和输出层神经元的数量取决于特性和目标的数量。比如,针对当前判定红酒品类的例子,
#   我们要依据13个特征来判定,那么输入层就要设置13个神经元。
#   而输出的是某红酒的品类,因此输出层神经元的个数为1即可
mlp_model = MLPClassifier(solver='lbfgs', hidden_layer_sizes=(100,))

# 调参,当查看到模型的性能水平不好时需要进行调参
# 尝试用两层隐含层,每层设置10个神经元,其他地方不变
# mlp_model = MLPClassifier(solver='lbfgs', hidden_layer_sizes=(10,10))


## 训练模型与预测数据
mlp_model.fit(X_train, y_train)
y_pred_on_train = mlp_model.predict(X_train)
y_pred_on_test = mlp_model.predict(X_test)

## 评估模型并查看模型参数,包括权重和偏置
print("训练集的准确率为: {:.2f}%".format(100 * accuracy_score(y_train, y_pred_on_train)))
print("测试集的准确率为: {:.2f}%".format(100 * accuracy_score(y_test, y_pred_on_test)))
# print("模型的偏置参数权重为: {}\n模型的特征参数权重为: {}".format(mlp_model.coefs_[0], mlp_model.coefs_[1]))

运行结果


image

posted on 2025-01-21 11:01  tony-cao  阅读(59)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3