[机器学习]感知机(Perceptron)算法的MATLAB实现

感知机是一种二类分类的线性分类模型,属于判别类型,它是神经网络和支持向量机的基础。

感知机的算法如图所示:

根据以上的算法,使用MATLAB对一组标签为“1”和“-1”的数据进行训练,得到的分类超平面。

数据为:

%%perceptron
clc
clear

%load the data  导入数据
data=load(‘testSet.txt‘);
%Sometimes you do not need too precise data
% data=roundn(data,-1); 

x=[data(:,1),data(:,2)];
y=data(:,3);
k=length(y);

%plot the data point based on the label  根据数据的标签画出散点图
for j=1:k
    if y(j)==1
     plot(x(j,1),x(j,2),‘o‘);
%      L={num2str(j)};
%      text (x(j,1),x(j,2),L);
     hold on
    end
    if y(j)==-1
     plot(x(j,1),x(j,2),‘x‘);
%      L={num2str(j)},
%      text (x(j,1),x(j,2),L);
     hold on
    end
end     

%initialize the parameters  初始化参数,对应算法第一步
w=[0,0];
b=0;
r=0.5;  %learningrate

con=0;  %set the condition
t=0;    %record the number of iterations
br=[];  %record the change of b
wr=[];  %record the change of w

while con==0                           %条件为训练集没有误分类点
   for i=1:k
     if (y(i)*(dot(w,x(i,:))+b))<=0    %判断是否分类错误
      w(1)=w(1)+r*y(i)*x(i,1);         %对应算法第三步
      w(2)=w(2)+r*y(i)*x(i,2);
      b=b+r*y(i);
      w=[w(1),w(2)];
      wr=[wr;w];
      br=[br,b];
      t=t+1;
     end
   end 

   for i=1:k
      con1(i)=(y(i)*(dot(w,x(i,:))+b));    %如果所有点都分类正确,则con1中所有元素都大于0
   end
   con=(all(con1(:)>0))
end

xt=-2:0.1:10;                              %画出分类平面
yt=(-w(1)*xt-b)/w(2);
plot(xt,yt);

运行上述程序,得到的结果如下所示:

时间: 2024-10-11 13:38:04

[机器学习]感知机(Perceptron)算法的MATLAB实现的相关文章

机器学习(二):感知机学习算法

感知机是一种线性分类模型,属于判别模型 f(x)  = sign(wx+b) ;  f(x)∈{+1,-1}; 其中M为错分类点的集合M. 感知机学习算法是误分类驱动的,采用随机梯度下降法进行参数更新. w<-----w + γyixi b<-----b + γyi γ为学习率,反复迭代直到所有样本均分类正确. 总结: 输入:训练数据集T={(x1,y1),(x2,y2).....(xn,yn)},学习率γ∈[0,1] 输出:w,b 感知模型f(x) = sign(wx+b) (1)选取初值

感知机学习算法 python实现

参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... 1 """ 2 感知机学习算法的原始形式 3 例2.1 4 """ 5 import numpy as np 6 7 class Perceptron: 8 def __init__(self,w,b,alpha): 9 self.w = w 10 self.b = b 11 self.alpha = alpha 12 13 def loss(self,x,y

感知机学习算法Java实现

感知机学习算法Java实现. Perceptron类用于实现感知机, 其中的perceptronOriginal()方法用于实现感知机学习算法的原始形式: perceptronAnother()方法用于实现感知机学习算法的对偶形式(此处仍有bug). import java.util.Scanner; public class Perceptron { private static final int maxn = 1010; private static final int maxm = 10

机器学习Spark Mllib算法源码及实战详解进阶与提高视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

机器学习——应用场景 算法应用场景

常见的机器学习模型:感知机,线性回归,逻辑回归,支持向量机,决策树,随机森林,GBDT,XGBoost,贝叶斯,KNN,K-means等: 常见的机器学习理论:过拟合问题,交叉验证问题,模型选择问题,模型融合问题等: K近邻:算法采用测量不同特征值之间的距离的方法进行分类. 优点: 1.简单好用,容易理解,精度高,理论成熟,既可以用来做分类也可以用来做回归: 2.可用于数值型数据和离散型数据: 3.训练时间复杂度为O(n):无数据输入假定: 4.对异常值不敏感 缺点: 1.计算复杂性高:空间复杂

【最短路】求两点间最短路的Floyd算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P22 此代码返回第一个点和最后一个点之间最短路径,以及最短路径的长度. 代码如下: 1 function [P,u ] = Floyd(W) 2 %W表示权值矩阵 3 %P表示最短路径 4 %u表示最短路的权和 5 n=length(W); 6 U=W; 7 m=1; 8 9 while m<=n %判断是否满足停止条件 10 for i=1:n 11 for j=1:n 12 if U(i,j)>U(i,m)+U

【最短路】求两点间最短路径的改进的Dijkstra算法及其matlab实现

代码来源:<图论算法及其matlab实现>(北京航空航天出版社) P18 书中提出了基于经典Dijkstra算法改进的两种算法. 其中算法Ⅱ的效率较高. 代码如下: 1 function a=Dijk(a) 2 %a(输入量)表示图的邻接矩阵 3 %a(输出量)表示所求最短路径的距离矩阵 4 5 %建立邻接矩阵,若不还是对称矩阵,则变为对称矩阵 6 n=length(a); 7 for i=2:n 8 for j=1:(i-1) 9 a(i,j)=a(j,i); 10 end 11 end 1

[C++与机器学习] k-近邻算法(K–nearest neighbors)

C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的子集.我想这应该是一个有关机器学习的系列文章,我会不定期更新文章,希望喜欢机器学习的朋友不宁赐教. 本系列特别之处是与一些实例相结合来系统的讲解有关机器学习的各种算法,由于能力和时间有限,不会向诸如Simon Haykin<<NEURAL NETWORKS>>等大块头详细的讲解某一个领

群智能优化算法-测试函数matlab源码

群智能优化算法测试函数matlab源代码 global M; creatematrix(2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %画ackley图. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % ackley x from[-5 5] % x=-5:0.01:5; % [x,y]=meshgrid(x); % temp1=x.^2+y.^2; % temp2=cos(2*pi*x)+cos(2*pi*y); % z=20+