【详细】用matlab实现感知机

最近在看李航老师的统计学习,故学习使用matlab语言实现了一下感知机的算法,下面简单总结一下一些注意事项。
在这里插入图片描述

1.注意判断误分类点,没有误分类点后要及时退出迭代循坏,不然会一直迭代。
2.感知机绘制出来的分类超平面不止一个,采用不同的初始值和迭代时选取误分类点的顺序不同,得出的解也不同。
3.话不多说,上代码。
(1) Perceptron.m函数

function [W,b] = Perceptron(X,y,Maxstep)
%感知机学习算法
%W为待求的权重向量,b为偏差
%X为输入空间,本次取二维的,y为输出空间,取值为[-1,1]

[n,m] = size(X);%求解矩阵X的大小
%给权值和偏差赋初始值,指定学习步长
W = zeros(m,1);%W为m行的列向量
b = 0;%设置偏差的初始值为0
mu = 0.5;%将学习步长设置为0.50<mu<=1

for step = 1:Maxstep%迭代更新参数值
    miss_flag = true;%设置一个标志位用来判断是否存在误分类点
    for i = 1:n %
        if (y(i)*(X(i,:)*W+b))<=0%判断随机选择的点是否是误分类点
            miss_flag = false;%若随机选择的点是误分类点,则将标志位设置为false
            %根据梯度下降法更新权重和偏差参数
            W = W + mu*y(i)*X(i,:)';
            b = b + mu*y(i);
        end
    end
    if miss_flag == true%如果标志位为true,表示误分类点数为0,算法已经实现正确分类,不需要继续迭代更新了,跳出循坏
        break       
    end
end




(2)Perceptron_test.m主函数

%算法实际实现
clc
%指定输入空间
X = [3,3;4,3;1,1];
%指定输出空间
y = [1,1,-1];

n = size(y,2);%求解y的列长度

%绘制出特征空间中的实例点

for j = 1:n
    if y(j) == 1%绘制正实例点
        plot(X(j,1),X(j,2),'r*');
    end
    if y(j) == -1%绘制负实例点
        plot(X(j,1),X(j,2),'b*');
    end
    hold on %该语句可以在原图的基础上绘制新的图像,不加则只能看到最后一个点
end

%调用函数更新参数
[W,b] = Perceptron(X,y,2000);

xlabel =linspace(0,5,500);
ylabel = -(W(1)/W(2))*xlabel -b/W(2);%将X(2)看成因变量,X(1)看作自变量,故可以得出算法绘制出的超平面
plot(xlabel,ylabel);

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
多层感知机(Multilayer Perceptron,MLP)是一种经典的前馈神经网络模型,可用于分类和回归问题。在MATLAB中,可以使用神经网络工具箱中的函数和类来实现多层感知机。 对于分类问题,可以使用MATLAB的`patternnet`函数来创建一个多层感知机模型。然后,可以使用`train`函数来训练模型,并使用`sim`函数来进行预测。以下是一个简单的多层感知机MATLAB实现的示例代码: ```matlab % 创建多层感知机模型 net = patternnet(hiddenSizes); % 设置训练参数 net.trainParam.epochs = 100; % 训练迭代次数 net.trainParam.lr = 0.01; % 学习率 % 加载训练数据和标签 load('trainData.mat'); load('trainLabel.mat'); % 训练模型 net = train(net, trainData, trainLabel); % 加载测试数据 load('testData.mat'); % 进行预测 predictedLabel = sim(net, testData); % 输出预测结果 disp(predictedLabel); ``` 对于回归问题,可以使用MATLAB的`feedforwardnet`函数来创建一个多层感知机模型,并使用`trainlm`函数来训练模型。以下是一个简单的多层感知机MATLAB实现的示例代码: ```matlab % 创建多层感知机模型 net = feedforwardnet(hiddenSizes); % 设置训练参数 net.trainParam.epochs = 100; % 训练迭代次数 net.trainParam.lr = 0.01; % 学习率 % 加载训练数据和标签 load('trainData.mat'); load('trainLabel.mat'); % 训练模型 net = train(net, trainData, trainLabel); % 加载测试数据 load('testData.mat'); % 进行预测 predictedLabel = sim(net, testData); % 输出预测结果 disp(predictedLabel); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值