系列文章目录
监督学习:参数方法
【学习笔记】 陈强-机器学习-Python-Ch4 线性回归
【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归
【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv)
【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归
【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析
【学习笔记】 陈强-机器学习-Python-Ch8 朴素贝叶斯
【学习笔记】 陈强-机器学习-Python-Ch9 惩罚回归
【课后题练习】 陈强-机器学习-Python-Ch9 惩罚回归(student-mat.csv)
监督学习:非参数方法
【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch10 KNN法
【学习笔记】 陈强-机器学习-Python-Ch11 决策树(Decision Tree)
监督学习:集成学习
【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch12 随机森林(Random Forest)
【学习笔记】 陈强-机器学习-Python-Ch13 提升法
监督学习:支持向量机
【学习笔记】 陈强-机器学习-Python-Ch14 支持向量机
监督学习:人工神经网络
前言
本学习笔记 仅为以防自己忘记了,顺便分享给一起学习的网友们参考。如有不同意见/建议,可以友好讨论。
本学习笔记 所有的代码和数据都可以从 陈强老师的个人主页 上下载
参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021.
数学原理等 详见陈强老师的 PPT
参考了:网友阡之尘埃的Python机器学习12——神经网络
一、人工神经网络(Artificial Neural Networks, ANN)
人工神经网络(Artificial Neural Networks, ANN) 是一种模仿生物神经网络结构和功能的计算模型,广泛应用于机器学习和人工智能领域。它由多个神经元(或节点)组成,通过连接(或权重)形成层次结构,用于处理复杂的输入数据并进行预测、分类等任务。

激活函数决定每个神经元的输出值,增加了网络的非线性能力。常见的激活函数包括:
· Sigmoid: σ ( x ) = 11 + e x p ( − x ) σ ( x ) = 1 + e x p ( − x ) 1 σ(x)=11+exp(−x)σ(x)=1+exp(−x)1 σ(x)=11+exp(−x)σ(x)=1+exp(−x)1
· ReLU (Rectified Linear Unit): R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)
· Tanh (Hyperbolic Tangent): t a n h ( x ) = e x p ( x ) − e x p ( − x ) e x p ( x ) + e x p ( − x ) tanh(x)=\frac{exp(x)−exp(−x)}{exp(x)+exp(−x)} tanh(x)=exp(x)+exp(−x)exp(x)−exp(−x)
· Softmax: 通常用于分类问题,将输出转换为概率分布。
优化算法用于调整权重和偏置,以最小化损失函数。常见的优化算法包括:
- 梯度下降(Gradient Descent): 基本优化算法,通过计算损失函数的梯度来更新权重。
- Adam(Adaptive Moment Estimation): 自适应学习率的优化算法,结合了梯度下降的优点。
正则化
提前停止(Early Stopping):在训练过程中监控验证集上的性能,当性能不再提升时停止训练。有助于防止训练过程中过拟合。
- 实现方法: 记录训练过程中验证集的损失或准确率。当验证集性能不再改善(或恶化)时,停止训练。
权重衰减(Weight Decay):与L2正则化类似,通过在损失函数中添加权重的平方和来实现。主要用于控制权重的大小,防止模型过于复杂。
噪声注入: 在输入数据、权重更新或激活层中加入噪声,以提高模型的鲁棒性。可以防止模型对训练数据的过度拟合。
二、ANN回归 (使用sklearn)
以波士顿房价数据 boston为例(参见【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 )
1. 载入、处理数据
import numpy as np
import pandas as pd
#读取CSV文件的路径
csv_path = r'D:\桌面文件\Python\【陈强-机器学习】MLPython-PPT-PDF\MLPython_Data\spam.csv'
spam = pd.read_csv(csv_path)
#定义X与y
X = spam.iloc[:, :-1]
y = spam.iloc[:, -1]
#全样本随机分20%测试集和80%训练集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
stratify=y,
random_state=0)
#特征变量 标准化
from sklearn.preprocessing import StandardScaler
#生成一个实例scaler
scaler = StandardScaler()
#进行估计
scaler.fit(X_train)
#使用transform()分别将 训练集、测试集的特征变量进行标准化
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)
2. ANN 模型 估计:单一隐藏层(包含5个神经元)
from sklearn.neural_network import MLPRegressor
model = MLPRegressor(
solver='lbfgs', #L-BFGS算法,一种准牛顿算法
hidden_layer_sizes=(5,), #单一隐藏层,包含5个神经元
random_state=123,
max_iter=10000)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
结果输出: 0.8570418638979551
#查看迭代次数
model.n_iter_
结果输出: 326
笔记:MLPRegressor()
MLPRegressor 是 scikit-learn 中的一个多层感知器(MLP)回归器,用于通过使用一个或多个隐藏层的神经网络模型来实现回归任务。这是一个非常灵活的工具,能够拟合非线性模型。
#基本语法和参数
from sklearn.neural_network import MLPClassifier
#创建模型
model = MLPRegressor(
hidden_layer_sizes=(100, ), #元组,表示每个隐藏层的神经元数目。默认 (100,)。例如 (50, 50) 表示两层,每层50个神经元。
activation='relu', #激活函数的选择,可选 'identity', 'logistic', 'tanh', 'relu'。默认:'relu'
solver='adam', #优化器的选择,可选 'lbfgs', 'sgd', 'adam'。默认:'adam'
alpha=0.0001, #L2惩罚(正则化项)的系数。默认:0.0001
batch_size='auto', #每次优化的小批量样本大小,默认:'auto' 表示 min(200, n_samples)。
learning_rate='constant', #学习率的调整策略,可选 'constant', 'invscaling', 'adaptive'。默认:'constant'
learning_rate_init=0.001, #初始学习率。默认:0.001
power_t=0.5, #逆扩展学习率的指数。默认:0.5
max_iter=200, #最大迭代次数。默认:200
shuffle=True, #是否在每次迭代前打乱样本。默认:True
random_state=None,
tol=0.0001, #优化的容忍度。默认:0.0001
verbose=False, #是否打印进度消息。默认:False
warm_start=False, #是否使用前一次训练结果继续训练。默认:False
momentum=0.9, #动量的值,【仅当 solver='sgd' 时使用】。默认:0.9
nesterovs_momentum=True, #是否使用 Nesterov 动量。默认:True
early_stopping=False, #是否提前停止训练以防止过拟合。默认:False
validation_fraction=0.1, #用于早停的验证集的比例。默认:0.1
beta_1=0.9, #用于计算梯度及其平方的指数衰减率,【仅在 solver='adam' 时使用】。默认

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



