在MATLAB中实现和绘制感知器

我正在复习一段来自多伦多感知器MATLAB代码的代码

代码如下:

function [w] = perceptron(X,Y,w_init)w = w_init;for iteration = 1 : 100  %<- 实际上,使用一些停止准则!  for ii = 1 : size(X,2)         %循环遍历训练集    if sign(w'*X(:,ii)) ~= Y(ii) %错误的决策?      w = w + X(:,ii) * Y(ii);   %然后将(或减去)此点添加到w    end  end  sum(sign(w'*X)~=Y)/size(X,2)   %显示错误分类率end

所以我正在阅读如何将此函数应用于数据矩阵X和目标Y,但是,不知道如何使用此函数,我理解,它返回一个权重向量,所以它可以分类。

你能给出一个例子并解释一下吗?

我尝试过

X=[0 0; 0 1; 1 1]Y=[1 0; 2 1]w=[1 1 1]Result = perceptron( X, Y, w )??? Error using ==> mtimesInner matrix dimensions must agree.Error in ==> perceptron at 15            if sign(w'*X(:,ii)) ~= Y(ii)     Result = perceptron( X, Y, w' )??? Error using ==> neMatrix dimensions must agree.Error in ==> perceptron at 19        sum(sign(w'*X)~=Y) / size(X,2);     

谢谢

感谢你的回答,我还有一个问题,如果我改变 Y = [0, 1],算法会发生什么?

所以,使用此感知器代码,任何输入数据都无法与 Y = [0,1] 一起使用,对吗?

—————————–编辑————————

还有一个问题,如果我想绘制划分两个类的线,我知道我们可以通过解决与权重相关的线性方程组来得到这条线,但是如何得到呢?我该怎么做?我正在尝试这样的事情

% 初始权重w_init = [ 1 1 1]';% 从感知器返回的权重wtag   = perceptron(X,Y,w_init,15);% 连接两者Line = [wtag,w_init]% 求解线性系统,我这样做正确吗?rref(Line')% 绘制???

回答:

您应该首先了解每个输入的含义:

  • X是示例的输入矩阵,大小为M x N,其中M是特征向量的维度,N是样本数。由于用于预测的感知器模型是Y=w*X+b,因此您必须在X中提供一个额外的维度,该维度是常数,通常设置为1,因此b项是“内置”到X中。在下面的X示例中,我将X的最后一个条目设置为所有样本中的1
  • Y是来自X的每个样本的正确分类(您希望感知器学习的分类),因此它应该是一个N维行向量 – 每个输入示例一个输出。由于感知器是一个二元分类器,因此它应该只有2个不同的可能值。查看代码,您会发现它检查预测的符号,这告诉您Y的允许值应为-1,+1(而不是例如0,1)。
  • w是您尝试学习的权重向量。

所以,尝试使用以下方法调用该函数:

X=[0 0; 0 1; 1 1];Y=[1 -1];w=[.5; .5; .5];

编辑

使用以下代码调用感知器算法,并以图形方式查看结果:

% 输入样本X1=[rand(1,100);rand(1,100);ones(1,100)];   % class '+1'X2=[rand(1,100);1+rand(1,100);ones(1,100)]; % class '-1'X=[X1,X2];% 输出类别 [-1,+1];Y=[-ones(1,100),ones(1,100)];% 初始化权重向量w=[.5 .5 .5]';% 调用感知器wtag=perceptron(X,Y,w);% 预测ytag=wtag'*X;% 在原始数据上绘制预测figure;hold onplot(X1(1,:),X1(2,:),'b.')plot(X2(1,:),X2(2,:),'r.')plot(X(1,ytag<0),X(2,ytag<0),'bo')plot(X(1,ytag>0),X(2,ytag>0),'ro')legend('class -1','class +1','pred -1','pred +1')

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注