Table of Contents
多层感知器简介
多层感知器(MLP,Multi-Layer Perceptron)是一种前馈人工神经网络。它是深度学习和神经网络领域的基础模型之一。MLP通过一系列层来处理数据,每层都由多个节点(或神经元)组成,每个节点都与前一层的每个节点相连。以下是MLP的一些关键特点和组成部分:
基本结构
- 输入层:接收原始输入数据。
- 隐藏层:一层或多层非线性处理单元,用于从输入中提取特征。每一层都由若干神经元组成,神经元之间不相互连接。
- 输出层:产生最终的输出,例如分类或回归的结果。
关键特点
- 前馈网络:信息在MLP中只向前传播,从输入层通过隐藏层到输出层,没有反向的连接。
- 激活函数:每个神经元通常会使用一个非线性激活函数,如Sigmoid、ReLU(Rectified Linear Unit)或Tanh。这些函数帮助网络捕捉输入数据中的非线性关系。
- 权重和偏置:每个神经元的输入都会乘以相应的权重,并加上一个偏置项,然后通过激活函数进行转换。
- 多层结构:MLP包含至少一个隐藏层。更多的隐藏层可以帮助网络学习更复杂的模式,但也可能导致过拟合。
训练过程
- 前向传播:数据在网络中从输入层通过隐藏层传播到输出层,每层神经元的输出都是下一层的输入。
- 损失函数:评估网络输出与实际值之间的差异。常用的损失函数包括均方误差(MSE)和交叉熵损失。
- 反向传播:通过计算损失函数相对于网络权重的梯度,并利用这些梯度更新权重,来优化网络的性能。
- 优化算法:用于更新权重,如随机梯度下降(SGD)、Adam等。
应用
- 分类和回归任务:MLP广泛应用于各种分类和回归问题。
- 模式识别:可以识别数据中的复杂模式和关系。
- 预测建模:预测时间序列数据和其他类型的数据。
总结
多层感知器是一种强大且灵活的神经网络模型,能够捕捉和学习输入数据中的复杂非线性关系。它在许多机器学习应用中都非常有效,尤其是在有大量数据和足够训练时间的情况下。然而,MLP的性能高度依赖于网络结构的选择、训练过程的优化以及防止过拟合的策略。
task1:建立MLP非线性二分类模型
数据加载及展示
数据加载
In [1]:
#数据加载 import pandas as pd import numpy as np
In [2]:
data = pd.read_csv('task1_data.csv') data.head()
Out[2]:
x1 | x2 | y | |
---|---|---|---|
0 | 46.4663 | 63.4143 | 1 |
1 | 43.5724 | 61.4890 | 1 |
2 | 41.4073 | 57.8710 | 1 |
3 | 40.4504 | 54.0086 | 1 |
4 | 37.3039 | 56.6732 | 1 |
数据可视化
In [3]:
#数据可视化 from matplotlib import pyplot as plt fig1 = plt.figure(figsize=(5,5)) label1 = plt.scatter(data.loc[:,'x1'][data['y']==1],data.loc[:,'x2'][data['y']==1]) label0 = plt.scatter(data.loc[:,'x1'][data['y']==0],data.loc[:,'x2'][data['y']==0]) plt.legend((label1,label0),('label1','label0')) plt.xlabel('x1') plt.ylabel('x2') plt.title('raw data') plt.show()
数据预处理
赋值xy
In [4]:
#x y 赋值 X = data.drop(['y'],axis=1) y = data.loc[:,'y']
数据分离-创建训练集与测试集
In [5]:
#数据分离 创建训练集与测试集 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, random_state=0) print(X_train.shape,X_test.shape,y_train.shape,y_test.shape)
/Users/yangtianyan/opt/anaconda3/lib/python3.9/site-packages/scipy/__init__.py:146: UserWarning: A NumPy version >=1.16.5 and <1.23.0 is required for this version of SciPy (detected version 1.26.2 warnings.warn(f"A NumPy version >={np_minversion} and <{np_maxversion}"
(630, 2) (158, 2) (630,) (158,)
模型建立及训练
建立模型
karas:是一个深度学习核心工具包
In [6]:
from keras.models import Sequential from keras.layers import Dense, Activation
In [7]:
# 创建一个空的框架 mlp = Sequential() # 添加一个隐藏层 # units=25: 25个神经元 # input_dim=2 :上一层的维度,有几个x, mlp.add( Dense(units=25,input_dim=2,activation = 'sigmoid' ) ) # 添加输出层 mlp.add( Dense(units = 1, activation='sigmoid')) # mlp.summary()
Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense (Dense) (None, 25) 75 dense_1 (Dense) (None, 1) 26 ===============================================&#