数据挖掘——单层感知器的Matlab实现
2017-09-02 22:30
246 查看
% 单层感知器 %% 1.newp--创建一个感知器 %{ 具体用法: net=newp(P,T,TF,LF); P: P是一个R×2的矩阵,R为感知器中输入向量的维度,每一行表示输入向量每个分量的取值 范围如P=[-1,1;0,1]表示输入向量是二维向量[x1,x2],且x1∈[-1,1],x2∈[0,1] T: T表示输出节点的个数,标量 TF: 传输函数,可选hardlim和hardlims,默认为hardlim,建议取hardlims LF: 学习函数,可选learnp或learnpn,默认为learnp,learnpn对输入量大小的变化不明显, 当输入的向量在数值的幅度上变化较大用learnpn代替learnp可以加快计算速度 %} %举个栗子:用newp函数创建一个感知器并进行训练仿真 p=[-1,1;-1,1]; t=1; net=newp(p,t,'hardlim','learnp'); P=[0,0,1,1;0,1,0,1]; % 用于训练的输入数据,每列为一个输入向量 T=[0,1,1,1]; % 输入数据的期望输出 [net,tr]=train(net,P,T); %train用于训练 newP=[0,0.9]'; %第一个测试数据 newT=sim(net,newP); %第一个测试数据的输出结果 newP2=[0.9,0.9]'; newT2=sim(net,newP2); %% 2.train--训练感知器网络 %{ 具体用法: [net,tr]=train(net,P,T,Pi,Ai); % train函数用来训练创建好的感知器网络 输入: net: 需要训练的神经网络,此处为newp函数的输出. train根据net.trainFcn和net.trainParam进行训练 P: 网络输入.P为R×Q的输入矩阵,每一列为一个输入向量, R等于网络的输入节点个数,共有Q个训练输入向量 T: 期望输出.可选参数,不选默认全为0,T为S×Q矩阵,每一列为一个输出向量, S等于输出节点个数,共有Q个输出,Q为输入向量的个数 Pi: 初始输入延迟,默认为0 Ai: 初始的层延迟,默认为0 输出: net: 训练好的网络 tr: 训练记录,包括训练的步数epoch核性能perf %} % 举个栗子:创建一个感知器,用来判断输入数字的符号,如果≥0输出1,<0输出0 p=[-1000,1000]; t=1; net=newp(p,t); P=[-5,-4,-3,-2,-1,0,1,2,3,4]; T=[0,0,0,0,0,1,1,1,1,1]; net=train(net,P,T); newP=-10:.2:10; newT=sim(net,newP); plot(newP,newT,'LineWidth',3); title('判断数字符号的感知器'); %% 3.sim--对训练好的网络进行仿真 %{ 具体用法1: [Y,Pf,Af]=sim(net,P,Pi,Ai) % sim函数用于仿真一个神经网络 具体用法2: [Y,Pf,Af,E,perf]=sim(...) 输入: net: 训练好的神经网络 P: 网络的输入,每一列一个输入向量 Pi: 网络的初始输入延迟,默认为0 Ai: 网络的初始层的延迟,默认为0 输出: Y: 网络对输入P的真实输出 Pf: 最终输出延迟 Af: 最终的层延迟 E: 网络的误差 perf: 网络的性能(Performance) %} % 举个栗子:创建感知器,实现逻辑与的功能,用sim仿真 net=newp([-2,2;-2,2],1); P=[0,0,1,1;0,1,0,1]; T=[0,0,1,1]; net=train(net,P,T); Y=sim(net,P); %得到仿真结果 Y2=net(P); %另一种得到仿真结果的方式 %% 4.hardlim/hardlims--感知器传输函数 %{ hardlim核hardlims都是感知器的传输函数 hardlim(x):返回1如果x>=0,返回0如果x<0 hardlims(x):返回1如果x>=0,返回-1如果x<0 newp函数中默认采用hardlim函数.如果要采用hardlims,net=newp(P,T,'hardlims') %} %% 5.init--神经网络初始化函数 %{ 具体用法: net=init(net) init函数用来初始化神经网络net的权值和阈值 %} % 举个栗子:观察感知器网络权值的变化 net=newp([0,1;-2,2],1); net.iw{1,1} % 创建时的权值 net.b{1} % 创建时的偏置 P=[0,1,0,1;0,0,1,1]; T=[0,0,0,1]; net=train(net,P,T); net.iw{1,1} net.b{1} net=init(net); net.iw{1,1} net.b{1} net.initFcn net.initParam % 当initFcn为initlay时,initParam自动为空,所以这一行会报错 %% 6.adapt--神经网络的自适应 %{ 具体用法: [net,Y,E,Pf,Af,tr]=adapt(net,P,T,Pi,Ai) 输入: net: 待修正的神经网络 P: 网络的输入 T: 网络的期望输出 Pi: 初始的输入延迟 Ai: 初始的层延迟 输出: net: 修正后的网络 Y: 网络的输出 E: 网络的误差 Pf: 最终的输出延迟 Af: 最终的层延迟 Tr: 训练记录,包括epoch和perf 参数T仅对需要目标的网络是必需的,Pi Pf Ai Af仅对有输入延迟或层间延迟的网络有意义 %} %举个栗子:使用adapt函数调整感知器核其他神经网络 net=newp([-1,2;-2,2],1); P={[0;0] [0;1] [1;0] [1;1]} T={0,0,1,1} [net,y,ee,pf]=adapt(net,P,T); ma=mae(ee) % 误差 ite=0; % 迭代次数初始化 while ma>=0.01 [net,y,ee,pf]=adapt(net,P,T); ma=mae(ee) newT=sim(net,P) ite=ite+1; if ite>=100 break; end end %adapt函数在线性神经网络中比较常用 %% 7.mae--平均绝对误差性能函数 %{ 具体用法: perf=mae(E) %取绝对值再求平均值 其他性能函数: sse:平方再求和 mse:平方再求平均值 %} clear,clc net=newp([-20,20;-20,20],1); P=[-9,1,-12,-4,0,5;15,-8,4,5,11,9]; T=[0,1,0,0,0,1]; net=train(net,P,T); Y=sim(net,P) iw=net.iw; b=net.b; w=[b{1},iw{1}] %w=[0,14,-6]表示分离直线为7x-3y=0
相关文章推荐
- 数据挖掘——单层感知器的Matlab实现
- 数据挖掘——单层感知器的Python实现
- 单层感知器的MATLAB实现
- 数据挖掘-matlab实现基于MovieLens数据集的协同过滤电影推荐系统
- 数据挖掘——单层感知器算法简介
- 数据挖掘——线性神经网络的Matlab实现
- 单层感知器的MATLAB实现
- 使用SQL Server Analysis Services数据挖掘的关联规则实现商品推荐功能(五)
- 数据挖掘—概念空间挖掘FindS算法的C++实现
- java 实现数据挖掘的独热编码 OneHot
- 数据挖掘--逻辑斯蒂回归的java实现(求最优点的方法用是梯度下降法)
- 数据挖掘-决策树ID3分类算法的C++实现
- 数据挖掘各种算法JAVA的实现方法
- 数据挖掘中的DBSCAN聚类算法CSharp实现及一些问题
- R语言学习系列(数据挖掘之决策树算法实现--ID3代码篇)
- 数据挖掘之模糊聚类算法学习和java实现
- 数据挖掘笔记-特征选择-算法实现-1
- 浅析数据挖掘Apriori算法 及其Java实现
- 【数据挖掘】Matlab与C#混合编程
- 续前篇---数据挖掘之聚类算法k-mediod(PAM)原理及实现