欢迎关注,本专栏主要更新MATLAB仿真、界面、基础编程、画图、算法、矩阵处理等操作,拥有丰富的实例练习代码,欢迎订阅该专栏!(等该专栏建设成熟后将开始收费,快快上车吧~~)
【MATLAB编程实战】机器学习——手搓一个感知机
首先自定义一个小型的数据,第一列为x,第二列为y,第三列为标签:
data=[1 0 1;
1 1 1;
0 2 1;
2 1 -1;
2 2 -1;
1 3 -1];
然后定义绘图的代码函数:
function plotData2(X,y)
figure;hold on;
pos=find(y==1);
neg=find(y==-1);
plot(X(pos,1),X(pos,2),'k+','Linewidth',2,'MarkerSize',9);
plot(X(neg,1),X(neg,2),'ko','MarkerFaceColor','r','Linewidth',2,'MarkerSize',7);
hold off;
end
绘图效果如下:
然后就可以训练模型了,模型训练部分的代码如下:
W=[0.1;-0.5]; b=0;
alph=0.5; %学习率
error=1;
time = 0;
disp("修改初始化权重")
while error>0
time = time + 1;
disp("正在迭代第"+num2str(time)+"次");
error=0;
for i=1:m
if (((W'*X(i,:)'+b)*y(i))<=0)
error=error+1;
W=W+alph*y(i)*X(i,:)';
b=b+alph*y(i);
y1=(-W(1)*x1-b)/W(2);
end
end
end
以上就基本上是完整的核心代码了,可以运行,基础较差的不会修改的同学可以下载完整版的脚本:下载连接