自学指南 - 多层感知器(MLP)

Table of Contents

多层感知器简介

多层感知器(MLP,Multi-Layer Perceptron)是一种前馈人工神经网络。它是深度学习和神经网络领域的基础模型之一。MLP通过一系列层来处理数据,每层都由多个节点(或神经元)组成,每个节点都与前一层的每个节点相连。以下是MLP的一些关键特点和组成部分:

基本结构

  1. 输入层:接收原始输入数据。
  2. 隐藏层:一层或多层非线性处理单元,用于从输入中提取特征。每一层都由若干神经元组成,神经元之间不相互连接。
  3. 输出层:产生最终的输出,例如分类或回归的结果。

关键特点

  1. 前馈网络:信息在MLP中只向前传播,从输入层通过隐藏层到输出层,没有反向的连接。
  2. 激活函数:每个神经元通常会使用一个非线性激活函数,如Sigmoid、ReLU(Rectified Linear Unit)或Tanh。这些函数帮助网络捕捉输入数据中的非线性关系。
  3. 权重和偏置:每个神经元的输入都会乘以相应的权重,并加上一个偏置项,然后通过激活函数进行转换。
  4. 多层结构:MLP包含至少一个隐藏层。更多的隐藏层可以帮助网络学习更复杂的模式,但也可能导致过拟合。

训练过程

  1. 前向传播:数据在网络中从输入层通过隐藏层传播到输出层,每层神经元的输出都是下一层的输入。
  2. 损失函数:评估网络输出与实际值之间的差异。常用的损失函数包括均方误差(MSE)和交叉熵损失。
  3. 反向传播:通过计算损失函数相对于网络权重的梯度,并利用这些梯度更新权重,来优化网络的性能。
  4. 优化算法:用于更新权重,如随机梯度下降(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        
                                                                 
===============================================&#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值