Matlab:单样本修正感知器算法

发布时间:2023年12月28日

1、基本信息

单样本修正感知器算法是一种二元分类算法,用于对给定数据进行分类。该算法假设数据是线性可分的,即可以通过一条直线(或一个超平面)将不同类别的数据分开。

基本步骤:

1.准备数据集。数据集包括特征矩阵和标签向量,其中特征矩阵的每行表示一个数据样本,每列表示该样本的一个特征,标签向量表示每个数据样本的类别。

2.初始化权重向量和偏置项。权重向量和偏置项决定了超平面的位置和方向,初始化为随机值。

3.随机选择一个样本,计算其输出值。输出值等于该样本特征矩阵的行向量与权重向量的点积加上偏置项。

4.根据输出值和标签向量的差异,更新权重向量和偏置项。如果输出值和标签相同,则不需要更新;否则,权重向量和偏置项分别加上学习率乘以样本特征矩阵和标签向量。

5.重复步骤3-4,直到所有样本都被正确分类或达到最大迭代次数。

6.输出最终的权重向量和偏置项,用于对新的数据样本进行分类。

例:

% 准备数据集
features = [0.2, 0.3; -0.4, 0.1; 0.1, -0.2];
labels = [1; -1; 1];

% 初始化权重向量和偏置项
weights = rand(size(features, 2), 1);
bias = rand();

% 设定学习率和最大迭代次数
learning_rate = 0.1;
max_iterations = 100;

% 进行迭代更新
for i = 1:max_iterations
    % 随机选择一个样本,计算输出值
    random_index = randi(size(features, 1));
    sample = features(random_index, :);
    output = dot(sample, weights) + bias;

    % 根据输出值和标签向量的差异,更新权重向量和偏置项
    if output * labels(random_index) <= 0
        weights = weights + learning_rate * labels(random_index) * sample';
        bias = bias + learning_rate * labels(random_index);
    end

    % 检查是否所有样本都被正确分类
    if all(sign(features * weights + bias) == labels)
        break;
    end
end

% 输出最终权重向量和偏置项
fprintf('Weights: %s\nBias: %f\n', mat2str(weights), bias);

2、

N=100; %设置样本数量为100
X = [randn(N,2)+3*ones(N,2);...   
    randn(N,2)-3*ones(N,2);]; 

% ====================================================================
figure, 
plot(X(1:N,1),X(1:N,2),'r.')         %绘制第一类样本点,颜色为红色
hold on,
plot(X(N+1:2*N,1),X(N+1:2*N,2),'b.') %绘制第二类样本点,颜色为蓝色
title('初始样本分布图')               %设置图像标题
% ====================================================================

Y=X;                                                   %将矩阵X赋值给变量Y
Y(:,3)=1;                                              %增广样本向量
Y(N+1:2*N,:)=-Y(N+1:2*N,:);                            %对第二类样本取相反数,规范化
W0=[0,0,0];                                            %初始化权重向量W0为[0,0,0]
Ye=[0.5 0.5 1];                                        %定义目标输出向量Ye为[0.5, 0.5, 1]
while isempty(Ye)==0                                   %当误分类集合Ye非空时,进入循环
    Ye=[];                                             %清空误分类集合Ye
    for i=1:2*N                                        %遍历每个样本
        if W0*Y(i,:)'<=0                               %如果当前样本被错误分类
            Ye=[Ye;Y(i,:)];                            %将当前样本加入误分类集合Ye
            W=W0+Y(i,:);                               %更新权重向量W
            W0=W;                                      %将更新后的权重向量赋值给W0
        end                                                    
    end      
end
W;                                                     %输出最终训练得到的权重向量W
x=randn(1,2);                                          %生成一个2维的随机数作为待判样本
x=[x,1];                                               %将待判样本增广为[x,1]
if W*x'>0                                              %判断待判样本属于哪一类
disp('待判样本属于第一类')                               %输出待判样本属于第一类
hold on,
plot(x(1),x(2),'r+','MarkerSize',10,'LineWidth',2)     %在图上标记待判样本的位置,红色加号
else 
disp('待判样本属于第二类') 
hold on,
plot(x(1),x(2),'b+','MarkerSize',10,'LineWidth',2)     %在图上标记待判样本的位置,蓝色加号
end                                                    
legend('Cluster 1','Cluster 2','x','Location','NW')    %设置图例
X1=-3:0.1:3;                                           %生成一个从-3到3的间隔为0.1的向量X1
X2=(-W(1)*X1-W(3))/W(2);                               %根据权重向量W计算直线的形式
hold on,plot(X1,X2,'k');                               %在图像上绘制直线,颜色为黑色

Matlab图形处理与可视化_matlab实验三图形的可视化及修饰处理-CSDN博客文章浏览阅读94次。colorbar:该函数将在当前的图型中显示颜色标尺,用来反应当前使用的颜色映像,并且以此反映图形中数据的相对大小。完成对颜色映像的定义后,用户就可以调用所定义的颜色映像,具体的有pcolor、rgbplot及colorbar等函数。pcolor:函数pcolor为伪色函数,即不是真正的颜色,而是通过颜色的不同来反应相应的数值的大小。坐标轴的控制函数:axis ([xmin, xmax, ymin, ymax])rgbplot:函数rgbplot是一种直接显示颜色的函数。2、plot函数有两个输入变量时。_matlab实验三图形的可视化及修饰处理https://blog.csdn.net/weixin_73011353/article/details/131491987

Matlab学习(基础知识与数值计算)_熟悉matlab数学软件,并归纳总结所学数值算法的使用格式。-CSDN博客文章浏览阅读418次,点赞3次,收藏8次。Matlab学习(基础知识与数值计算)_熟悉matlab数学软件,并归纳总结所学数值算法的使用格式。https://blog.csdn.net/weixin_73011353/article/details/131387200

文章来源:https://blog.csdn.net/weixin_73011353/article/details/135252898
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。