前面讲了线性回归和局部加权线性回归。

今天讲感知机,感知机是模仿人体大脑处理外界信息的一种算法,即输入信号→处理→输出信号

它是最简单形式的前馈神经网络,是一种二元线性分类器, 把矩阵上的输入x(实数值向量)映射到输出值f(x)上(一个二元的值)。

感知器的学习通过对所有训练实例进行多次的迭代进行更新的方式来建模。这有点类似于前面的线性回归学习方式。

Dm={(x1,y1),…,(xm,ym)}表示一个有m个训练实例的训练集。

每次迭代权重向量以如下方式更新: 对于每个Dm={(x1,y1),…,(xm,ym)}中的每个(x,y)对,

w(j):=w(j)+α(y−f(x))x(j)(j=1,…,n)

这个形式是不是看着有点眼熟,其实就是梯度下降。

下面开始撸代码走起:

import numpy as py
def fit_perceptron(X,y,n_iter=50,eta=0.01):weight=np.zeros(1+X.shape[1])errors=[]for i in range(n_iter):error=0for xi,target in zip(X,y):output=np.dot(xi,weight[1:])+weight[0]class_result=np.where(output>= 0, 1,-1)update=eta*(target-class_result)weight[1:]+=update*xiweight[0]=updateerror+=(update!=0)errors.append(error)return weight,errors
def predict_perceptron(X):output=np.dot(X,weight[1:])+weight[0]class_result=np.where(output>= 0, 1,-1)return class_result

然后用Iris跑一波代码。

选其中的两类试一下感知机的分类效果。

看一下分类效果如何,

# error 画图, 检查是否 error 趋近于0 在多次 loop 更新后
weight,errors = fit_perceptron(X,y)
plt.plot(range(1, len(errors) + 1), errors, marker='o')
plt.xlabel('Epochs')
plt.ylabel('Number of misclassifications')plt.tight_layout()

第五次迭代后,正确率已经百分百了。

最后画一波决策边界可视化下,

markers = ('s', 'x', 'o', '^', 'v')
colors = ('red', 'blue', 'lightgreen', 'gray', 'cyan')
cmap = ListedColormap(colors[:len(np.unique(y))])
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.arange(x1_min, x1_max, resolution),np.arange(x2_min, x2_max, resolution))
Z = predict_perceptron(np.array([xx1.ravel(), xx2.ravel()]).T)
Z = Z.reshape(xx1.shape)
xx1.shape
plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=cmap)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
for idx, cl in enumerate(np.unique(y)):plt.scatter(x=X[y == cl, 0], y=X[y == cl, 1],alpha=0.9, c=cmap(idx),marker=markers[idx], label=cl)
plt.savefig("perceptron.jpg")

虽然 感知机在上面 Iris 例子里表现得很好,但在其他问题上却不一定表现得好。

感知机比较适用于线性可分的数据里,但在线性不可分的情况下,就无法 converge了。

机器学习手动撸代码系列3-感知机相关推荐

  1. 手动撸代码实现Vue管道符过滤器filter功能

    前言 管道符的外观就是一根竖直线,也就是|.这个熟悉Linux的同学肯定不陌生了.而在Vue中,也常常能看见它的身影.比如Vue的过滤器: <div>我叫:{{name|nameFilte ...

  2. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  3. 手摸手,带你用vue撸后台 系列一(基础篇) - 掘金

    完整项目地址:vue-element-admin 系列文章: 手摸手,带你用 vue 撸后台 系列一(基础篇) 手摸手,带你用 vue 撸后台 系列二(登录权限篇) 手摸手,带你用 vue 撸后台 系 ...

  4. BAT机器学习面试1000题系列(第1~305题

    1 请简要介绍下SVM,机器学习 ML模型 易SVM,全称是support vector machine,中文名叫支持向量机.SVM是一个面向数据的分类算法,它的目标是为确定一个分类超平面,从而将不同 ...

  5. BAT机器学习面试1000题系列(第150~279题)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat leadai的博客 RSS订阅 转 BAT机器学习面试1000 ...

  6. 【转】BAT机器学习面试1000题系列(1~50)

    BAT机器学习面试1000题系列 整理:July.元超.立娜.德伟.贾茹.王剑.AntZ.孟莹等众人.本系列大部分题目来源于公开网络,取之分享,用之分享,且在撰写答案过程中若引用他人解析则必注明原作者 ...

  7. BAT机器学习面试1000题系列(详细版)

    BAT机器学习面试1000题系列 置顶 2017年12月14日 15:19:15 阅读数:20913 几点声明: 1.本文的内容全部来源于七月在线发布的BAT机器学习面试1000题系列: 2.文章中带 ...

  8. 手撸Spring系列13:MyBatis(实战篇)

    说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...

  9. BAT机器学习面试1000题系列(第1~60题)

    本文转自: https://mp.weixin.qq.com/s?__biz=MzI4MTQ2NjU5NA==&mid=2247485444&idx=1&sn=adafa439 ...

最新文章

  1. android网络请求回调管理,Android HTTP网络请求的异步实现
  2. Android之去掉RecycleView和NestedScrollView边缘效果
  3. unity全栈开发是什么意思_unity游戏公司面试问题总结
  4. applyBinding Observables
  5. 【Java】数值计算排雷指南
  6. 图解Sharepoint2007部署(下):安装sharepoint2007、创建sharepoint2007站点
  7. WebLogic 服务器概述 与 部署 Java Web 应用
  8. Dynamic 365 中创建编码规则
  9. anvyiew java版_细说Anyview阅读器背后的故事
  10. 防火墙技术之安全区域
  11. 徐梓萌 受邀担任 火星少年计划 第四季 特邀小主持人
  12. 2014年十大云计算发展趋势分析及预测
  13. 推箱子简易java代码_Java实现简单推箱子游戏
  14. Dapp测评 | Dpark冠军团队原班人马全新力作:Monster Tamer怪兽大战,一触即发
  15. FFmpeg 集成 x265 编译及解码
  16. PPT怎么插入图案填充效果
  17. 【Linux】Linux目录
  18. SAP MM 物料主数据的重要概念:物料类型、物料组、评估类(物料层次)
  19. 设计模式之 单例模式
  20. CDAC单位电容取值

热门文章

  1. c语言编译不了什么情况,c语言编译没错但是无法运行
  2. oraclde存储过程_Oracle存储过程详解(引用)+补充
  3. 安装部署OpenStack(添加资源)
  4. java jar中jar_java – jar中的jar
  5. 人生需要往前看,一直回味过去只会迷失,如果已经开始迷失,请回想初心
  6. 贵州轻工职业技术学院计算机分数,贵州轻工职业技术学院历年分数线 2021贵州轻工职业技术学院录取分数线...
  7. controller调用controller的方法_你想过 Controller 这些方法里的参数是如何工作的吗?...
  8. mysql 快速升级_MySQL 4到5的快速升级
  9. android wms,Android解析WindowManagerService(一)WMS的诞生
  10. 20万数据 sql 快还是 java快?_H2数据库学习(一)