Matlab感知器算法实现(代码、结果)-程序员宅基地

技术标签: 机器学习  

目的

1. 用感知器实现2分类

2. 并画出决策面

3. 画出不同weight初始值下的决策面、打乱样本顺序的决策面

结构

  • train.m 主文件
  • grad.m计算梯度并更新w、b

train.m

clear;

%load data
data = load('toydata.mat');
X = data.X';
y = data.label';
m = length(y);
lr = 1;

%打乱样本顺序
rowrank = randperm(size(X, 1));
X=X(rowrank',:);
y=y(rowrank',:);

%权重初始化
theta=rand(3,1);
%w = [0;0];
%b = 0;
w = theta(1:2);
b = theta(3);
h = Perceptron(X, w, b, m);


%train
for k = 1:m
    [w,b]= grad(X, y, lr, w, b);
    h = Perceptron(X, w, b, m);
end

%plot data
pos = find(y==1); neg = find(y ==-1);
hold on;
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y', 'MarkerSize', 7);

%plot decision boundary
plot_x = [min(X(:,1))-1 ,  max(X(:,1))+1];
plot_y = (-1./w(2)).*(w(1).*plot_x+b);
plot(plot_x, plot_y);
legend('y==1', 'y==-1');

grad.m

%grad_update
function [w,b] =grad(X, y, lr, w, b)

m = length(y);
for k = 1:m
    temp = (X(k,:)*w+b)*y(k);
  while temp<=0
    w = w + lr*(X(k,:)*y(k) )';
    b = b + lr*y(k);
    temp = (X(k,:)*w+b)*y(k);
  end
end

end

结果

(1)w,b初始值为0:

 

(2)W,b的值为随机初始化的10个:

(3)打乱样本顺序10次:

(4)以不同w和b的10次结果为基础计算:

w平均值为:-1.9352   -2.7876

b平均值为:16.0083

(5)以样本打乱基础计算

w的平均值-3.2140   -2.5044

b的   20.3000

总结

关于感知器算法,是一个很依赖训练样本的算法。具体实现方式为,设 f =wx+b  ,label为y,当每一个样本 f(i)*y(i)<=0时,就更新w和b,更新值为 w = w  + lr*x(i)*y(i) ;  b = b + lr*y(i);直到所有样本都满足 f(i)*y(i)>0时停止。

所以感知器算法结果不唯一,但算法收敛。

当有离群点时,会影响感知器算法的好坏。如下图中加入离群点后出现决策失误的超平面。

关于核感知器的一些参考:

https://www.cnblogs.com/xingshansi/p/6718503.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Rlin_by/article/details/89303628

智能推荐

多种方法让你在PC上使用iCloud服务_win7登录icloud浏览器不支持-程序员宅基地

文章浏览阅读2.7w次,点赞4次,收藏6次。多种方法让你在Windows上优雅的使用iCloud服务我平时习惯使用 日历、待办事项+2Do 等App,而在Windows上无法使用它们。 由于我爱好各种大型单机游戏,所以短时间内不会选择更换MacBook。于是我打起了iCloud的主意,希望能在Windows下驯服它。_win7登录icloud浏览器不支持

tomcat服务器_tmactmon-程序员宅基地

文章浏览阅读2.6k次。1. 什么是JavaWeb服务器自己做的网页发布到JavaWeb服务器,其他人可以访问。WEB:代表网页的意识,许多的网页就组成了网站。WEB服务器:支持web访问服务的一个电脑。通常web服务器是指web服务端程序,一款软件,可以监听某个端口,等待其他浏览器来访问,把我们写好的页面内容发过去。JavaWeb:使用java程序开发的网站JavaWeb服务器:支持java语言的web服务器浏览器默认访问的端口是80 : www.baidu.com:80WEB就是基于网络的,遵循HTTP协议/H_tmactmon

GetModuleHandle用法-程序员宅基地

文章浏览阅读4.6k次。用法:invoke GetModuleHandle,lpModuleName说明:获取模块句柄,就是程序装入内存的首地址。1) invoke GetModuleHandle,NULL :获取本模块句柄。2) szUserDll db ‘user32.dll’,0 invoke GetModuleHandle,ad_getmodulehandle

win10+SoildWorks 2012 Toolbox配置出错解决方法_toolbox许可检出失败-程序员宅基地

文章浏览阅读1.1w次。系统运行环境:win10TH1 1511软件版本:Soildworks2012sp3x64Solidworks 提示failed to create toolboxlibrary object的解决办法,亲试有效 1. 打开注册表编辑器,win+R,regedit; 2. 点开HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Wi_toolbox许可检出失败

springboot + groovy 进行动态编程 (二)_groovy 动态加载 mapper-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏15次。背景、需求、选型可以看这里本篇文章是编码,上篇文章我们说到A服务的同学需要做的是:(1)在项目启动的时候,完成对calculate_rule表的读取,并构造 groovy 对应的xml格式(2)把构造好的xml,交给spring容器去管理,这样A服务里就可以拿到calculateParse接口的具体实现(3)当calculate_rule表中的计算代码有改动时,不需要重启A服务,只需要通过一个开关就可以refresh内存里的计算规则即可那下面我们把他一一实现:一、A服务里建表.._groovy 动态加载 mapper

Springboot 同时支持GET和POST请求_springboot 同时支持get post-程序员宅基地

文章浏览阅读3.6k次,点赞2次,收藏3次。根据大佬博客,集成的工具类:import com.alibaba.fastjson.JSON;import javax.servlet.http.HttpServletRequest;import java.io.IOException;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;public class HttpServletRequestUtils { /**_springboot 同时支持get post

随便推点

【超详细讲解】linux安装anaconda和pytorch及常见报错_anaconda3-2021.11-linux-x86_64.sh: 516: syntax err-程序员宅基地

文章浏览阅读5.6k次,点赞12次,收藏22次。一.首先连接服务器在powershell,gitbash或者vscode的命令行中输入命令:ssh 用户名@服务器IP地址二.安装conda//获取安装包wget https://repo.continuum.io/archive/Anaconda3-5.0.1-Linux-x86_64.sh//安装anaconda base命令bash Anaconda3-5.0.1-Linux-x86_64.sh//添加环境变量echo 'export PATH="~/anacond._anaconda3-2021.11-linux-x86_64.sh: 516: syntax error: "(" unexpected (expect

极光推送-集成-程序员宅基地

文章浏览阅读171次。https://docs.jiguang.cn/jpush/client/Android/android_guide/在 module 的 gradle 中添加依赖和 AndroidManifest 的替换变量。android { ...... defaultConfig { applicationId "com.xxx.xxx" //JPush 上注册的...

c mysql prepared,Mysql 预处理 PREPARE以及预处理的好处-程序员宅基地

文章浏览阅读254次。PREPARE stmt1 FROM ‘SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse‘;mysql> SET @a = 3;mysql> SET @b = 4;mysql> EXECUTE stmt1 USING @a, @b;+------------+| hypotenuse |+------------+| ..._mysql 预处理 com_stmt_prepare 值非常大

怎样安装 JDK8 到 Ubuntu 14.04 和 12.04_jdk 8u251 ubuntu 12.04-程序员宅基地

文章浏览阅读268次。文章转载自:http://www.cnblogs.com/wxishang1991/p/5662499.html_jdk 8u251 ubuntu 12.04

Scala Reserved Words-程序员宅基地

文章浏览阅读286次。Table lists the reserved keywords in Scala. Many are found in Java and they usually have the same meanings in both languages. Word Description abstract Makes a declaration abstract. case Sta_scala reserved word

Elastic-Job原理--任务分片策略(三)_elasticjob怎么配置odevitysortbynamejobshardingstrategy-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏19次。上一篇博客Elastic-Job原理--服务器初始化、节点选举与通知(二)介绍了Elastic-Job的启动流程,这篇博客我们了解学习一下Elastic-Job的任务分片策略,目前提供了三种任务分片策略,分片策略的实现最终是在注册中心zk中在分片的instance中写入实例信息。目前Elastic-Job提供分片接口JobShardingStrategy:/** * 作业分片策略...._elasticjob怎么配置odevitysortbynamejobshardingstrategy

推荐文章

热门文章

相关标签