Adaline神经网络简单介绍和MATLAB简单实现
来源:互联网 发布:如何使用数据透视表 编辑:程序博客网 时间:2024/06/06 13:07
Adaline神经网络
Adaline利用了最小二乘法的思想,相较于感知机神经网络,对于数据的线性可分的要求更低一些,可以允许一些异常数据。
上面描述了迭代求解的过程,但是在
我们来说明下迭代求解需要注意的地方。
首先,将
然后是迭代的结束条件。在代码实现中,是计算
MATLAB实现迭代求解
Adaline.m
function [ w, t ] = Adaline( X,step, init_w, init_t )%ADALINE Summary of this function goes here% Detailed explanation goes here% X: data set with label% f: active function% step: step size% init_w:% init_t: if nargin < 4 init_t = 0; end if nargin < 3 init_w = []; init_t = 0; end if nargin < 2 step = 0.1; init_w = []; init_t = 0; end label = X(:,end); data = X(:,1:end-1); [n_data,n_fea] = size(data); data = [ones(n_data,1) data]; n_fea = n_fea + 1; n_w = size(init_w); if n_w ~= n_fea init_w = ones(n_fea,1); n_w = n_fea; end w = init_w; w(1) = init_t; eps = 1e-6; while true for i=1:n_w dw = (label - data*w)'*data(:,i); new_w(i) = w(i) + step*dw; end if sum((new_w'-w).^2) < eps break; else w = new_w'; end end t = w(1,1); w = w(2:end);end
demo.m 用于简单测试
clc;%% create random points for trainc1 = [1 1];c2 = [3 3];n_L1 = 50; % number of item with label 1 n_L2 = 20; % number of item with label 2A = zeros(n_L1,3);A(:,3) = 1;B = zeros(n_L2,3);B(:,3) = -1;% create random pointfor i=1:n_L1 A(i,1:2) = c1 + randn(1,2);endfor i=1:n_L2 B(i,1:2) = c2 + randn(1,2);end% show pointsscatter(A(:,1), A(:,2),[],'r');hold onscatter(B(:,1), B(:,2),[],'g');%% training with above points%AA = [ones(n_L1,1) A];%BB = [ones(n_L2,1) B];X = [A;B];%X = [1 1 1 0 1;1 1 0 1 1;1 1 1 1 -1];[w, t] = Adaline(X,0.0001);%[w,t] = Adaline2(X);%%% plot the resultA = w(1);B = w(2);C = t;if B==0 %生成100个-C/A放在向量x中. x=linspace(-C/A,-C/A,100); %从-A)-(|A|+|B|+|C|)到|A|+|B|+|C|等距离生成100个值放在向量y中.? y=linspace(-abs(A)-abs(B)-abs(C),abs(A)+abs(B)+abs(C),100);else x = linspace(0, 10, 100); y = -w(1)/w(2) * x; y = y - 1/w(2)*t;endhold onplot(x,y)
正规化求解
除了迭代求解外,有一种正规化的的方法。这种方法对于不是很大数据集求解是很快的,主要是因为要求矩阵的逆,如果矩阵太大了,求逆将会变得很慢很慢。
Adaline2.m
function [ w, t ] = Adaline2( X )%ADALINE2 Summary of this function goes here% Detailed explanation goes here data = X(:,1:end-1); label = X(:,end); [n_data, n_fea] = size(X); data = [ones(n_data, 1) data]; n_fea = n_fea + 1; w = pinv(data'*data)*(data'*label); t = w(1,1); w = w(2:end);end
0 0
- Adaline神经网络简单介绍和MATLAB简单实现
- RBF神经网络简单介绍与MATLAB实现
- 神经网络之感知器算法简单介绍和MATLAB简单实现
- Matlab实现简单BP神经网络
- 最简单的三层神经网络Matlab实现
- BP神经网络设计的matlab简单实现
- RBF神经网络的matlab简单实现
- matlab简单神经网络示例
- 神经网络简单介绍
- 简单有趣介绍神经网络
- 神经网络简单介绍
- ANN神经网络代码在Matlab中的简单实现
- 在matlab基础上简单实现一个神经网络算法
- 神经网络简单实现和公式推导
- python简单实现神经网络
- 实现简单的神经网络
- 简单神经网络实现 01
- 简单神经网络实现 02
- 利用tftpd32在Linux与Windows7之间传输文件
- 打表法的经典问题
- 优化
- 集成方法(随机森林)
- 令仔学Redis(二)----单线程架构
- Adaline神经网络简单介绍和MATLAB简单实现
- 决定开始写blog
- 函数,初等函数
- 2017 Redhat广东省信息安全竞赛 Writeup
- 简述perl的引用(包括标量、数组、hash等数据类型的引用)
- Kubernetes总架构图
- HDMI基本原理
- oracle 12c 新特性之不可见字段
- Java IO流(四) File