机器学习入门学习【1】-感知机

  • 前言
  • 学习笔记
  • 源码学习

前言

近日开始学习机器学习,拜读了一下李航老师的《统计学习方法》,有点不求甚解,为了让自己更好的理解,写些系列文章把,第一章为感知机。

  1. 感知机博客,Github源码
  2. KNN博客,Github源码

学习笔记

感知机就是一个二分类的一个线性模型,将数据集分为两个部分,划分为-1,+1两个大部分,算法的目的就是寻找这么一个超平面wx+b。

由图可知,这就是一个较为简单的二分类概念。举个例子,在现实生活中,判定一个产品的好坏,就是在这图片中的两侧,如果只有两个评判标准时,这个超平面就是ax+by+c这个之间,当不止两个标准时,就是多维世界,即超平面wx+b。
用户在使用感知机的目的无非就是想知道这个分类的结果属于图中的蓝点还是黑点。所以定义一个函数。
f(x)=sign(w⋅x+b)f(x) = sign (w \cdot\ x+b)f(x)=sign(w⋅ x+b)
sign(x)={+1,x>=0−1,x<0sign(x)=\left\{ \begin{aligned} +1,& \text{x>=0}\\ -1 ,&\text{x<0}\\ \end{aligned} \right. sign(x)={+1,−1,​x>=0x<0​
从公式中,可以看到sign函数就是分出了+1和-1部分,联立两个公式,就是wx+b>=0,y为1,反之为-1。在训练过程中,需要找到误分类点到超平面得距离,为此距离公式为:
1∣∣w∣∣∣w⋅x+b∣\frac{1}{||w||}|w \cdot\ x +b|∣∣w∣∣1​∣w⋅ x+b∣

为什么最后不考虑1∣∣w∣∣\frac{1}{||w||}∣∣w∣∣1​,由于感知机是误分类驱动的算法,它的终极目标是没有误分类的点,如果没有误分类的点,总和距离就变成了0,w和b值怎样都没用。所以几何间隔和函数间隔在感知机的应用上没有差别,为了计算简单,使用函数间隔。这样反而忽略可以提高效率。

以上是原始形式的方法,这里再介绍对偶形式的方法。


在原始方法和对偶方法选择上,有以下两个指标

  • 当向量的维度高时,在计算内积时需要大量内存,为此采用对偶方法加速
  • 当向量的数量特别多时,计算累计和反而耗时麻烦,为此采用原始的办法。

源码学习

'''
Descripttion: 李航《统计学习方法》复现,感知机
version:
Author: WenZeng Cai
Date: 2020-08-29 15:50:51
LastEditors: WenZeng Cai
LastEditTime: 2020-08-30 11:34:13
'''
import numpy as np
import timedef loadData(filename:str):'''name: msg: param {type} return {type} '''   print('加载数据')
#   数据和标签data,label=[],[]fr=open(filename,'r')for line in fr.readlines():#   每行以逗号分隔cur=line.strip().split(',')#   数据集有0-9标签,0-5标记为1,大于标记为-1,二分if int(cur[0])>=5:label.append(1)else:label.append(-1)#  除第一列外,进行归一化处理data.append([int(num)/255 for num in cur[1:]])return data,labeldef perceptron_train(data:list,label:list,iter=50):'''name: 感知训练msg: param {type} 数据和标签,默认迭代50次return {type}训练好的超平面参数w和b '''print('开始训练')# 转化为矩阵,label转置,label本题是1*N列表,可以直接使用label[i]获得标签数据# 为了格式统一将他转置为矩阵,为了使用label[i]得到数据,就需要转置为列矩阵dataMat=np.mat(data)labelMat=np.transpose(np.mat(label))# 取数据维度m,n=np.shape(dataMat)# 初始化超平面参数,和偏置量为0,使用随机梯度下降,步长为0.001w=np.zeros((1,n))b=0h=0.0001for k in range(iter):for i in range(m):xi=dataMat[i]yi=labelMat[i]#   -yi(w*xi+b)>=0# 误分类部分为>=0,进行梯度下降更新w和bif -yi * (w * xi.T + b) >= 0:w = w + h *  yi * xib = b + h * yireturn w,bdef test(data,label,w,b):'''name: 模型测试msg: param {type} 数据测试集,标签,权重w,偏置breturn {type} 精确度'''print('开始测试')dataMat=np.mat(data)labelMat=np.mat(label).TerrCnt=0m,n=np.shape(dataMat)for i in range(m):xi=dataMat[i]yi=labelMat[i]# 对测试集进行计算,当>=0时就是误判加1。result=-yi * (w * xi.T + b)if result>=0:errCnt+=1# 得到正确率accuracy=1-(errCnt/m)return accuracyif __name__ == '__main__':start=time.time()trainData,trainLabel=loadData('../Mnist/mnist_train.csv')  testData,testLabel=loadData('../Mnist/mnist_test.csv') w,b=perceptron_train(trainData,trainLabel)accuracy=test(testData,testLabel,w,b)print('准确率',accuracy)end=time.time()print('运行时间',end-start)

推荐源码在github链接中查看,有mnist数据集。
感知机源码

李航《统计学习方法》学习日记【1】相关推荐

  1. 【李航统计学习方法】感知机模型

    目录 一.感知机模型 二.感知机的学习策略 三.感知机学习算法 感知机算法的原始形式 感知机模型的对偶形式 参考文献 本章节根据统计学习方法,分为模型.策略.算法三个方面来介绍感知机模型. 首先介绍感 ...

  2. 统计学习方法 pdf_李航统计学习方法(第三章)

    第3章 k 近邻法 k 近邻法(k-NN)是一种基于实例的学习方法,无法转化为对参数空间的搜索问题(参数最优化问题).它的特点是对特征空间进行搜索.除了k近邻法,本章还对以下几个问题进行较深入的讨论: ...

  3. 《李航 统计学习方法》学习笔记——第八章提升方法

    提升方法 8.1提升方法AdaBoost 8.1.1提升方法的基本思路 8.1.2AdaBoost算法 8.1.3AdaBoost的例子(代码实现) 8.2AdaBoost算法的训练误差分析 定理8. ...

  4. 学习笔记:李航统计学习方法

    是关于李航的<统计学习方法>的学习笔记 主要是看七月在线的网课 1 统计学习及监督学习概论 1.1 基础概念 概念:关于计算机基于数据构建概率统计模型.并运用模型对数据进行预测与分析的一门 ...

  5. 李航-统计学习方法-笔记-1:概论

    写在前面 本系列笔记主要记录<统计学习方法>中7种常用的机器学习分类算法,包括感知机,KNN,朴素贝叶斯,决策树,逻辑斯谛回归与最大熵模型,SVM,boosting. 课本还涉及到3种算法 ...

  6. 机器学习(李航统计学习方法)

    目录 绪论-资料介绍 绪论-频率派vs贝叶斯派 频率派的观点 贝叶斯派的观点 监督学习与无监督学习 单变量线性回归 模型表示 代价函数 梯度下降 多变量线性回归 多维特征 多变量梯度下降 梯度下降法实 ...

  7. 逻辑斯蒂回归_逻辑斯蒂回归详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习...

    本文包括: 重要概念 逻辑斯蒂回归和线性回归 二项逻辑斯谛回归模型 逻辑斯蒂回顾与几率 模型参数估计 多项逻辑斯谛回归 其它有关数据分析,机器学习的文章及社群 1.重要概念: 在正式介绍逻辑斯蒂回归模 ...

  8. 李航统计学习方法笔记——泛化误差上界

    泛化误差上界 References 统计学习方法(第2版)李航著 p25~27 定理 对于二分类问题,当假设空间是有限个函数的集合F={f1,f2,...,fd}F=\{f_1,f_2,...,f_d ...

  9. 最大熵阈值python_李航统计学习方法(六)----逻辑斯谛回归与最大熵模型

    本文希望通过<统计学习方法>第六章的学习,由表及里地系统学习最大熵模型.文中使用Python实现了逻辑斯谛回归模型的3种梯度下降最优化算法,并制作了可视化动画.针对最大熵,提供一份简明的G ...

  10. 统计学习方法 学习笔记(1)统计学习方法及监督学习理论

    统计学习方法及监督学习理论 1.1.统计学习 1.1.1.统计学习的特点 1.1.2.统计学习的对象 1.1.3.统计学习的目的 1.1.4.统计学习的方法 1.1.5.统计学习的研究 1.1.6.统 ...

最新文章

  1. [css] 使用纯css能否监控到用户的一些信息?怎么实现?
  2. [填坑]SerialPort的“端口被关闭”
  3. libevent: evbuffer缓冲
  4. 【Kafka】Flink 消费 kafka 部分 分区 一直不提交 offset
  5. (转)android UI进阶之自定义组合控件
  6. 【操作系统/OS笔记10】进程/线程的调度原则、调度算法、实时调度、多处理器调度、优先级反转
  7. PHP语言中global和$GLOBALS[]的分析(转)
  8. 自动阅读脚本成本分析大全(单月阅读成本核对)
  9. 用分组编码解决算术编码的精度要求问题
  10. 明尼苏达大学双城分校计算机科学,明尼苏达大学双城分校计算机专业研究生需要满足哪些条件?...
  11. elementUI 页面布局
  12. 大数据技术之 Linux 基础
  13. 以过来人经验---分享从学生--工程师之--怎么写好一份从事技术工作的简历及面试技巧(以嵌入式为例)(中)
  14. 7-42 打印倒直角三角形图案 (15 分)
  15. 基于图像变换的最小二乘法及其应用(新生研讨课)
  16. gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南
  17. PRD文档和交互文档(DRD)有什么区别
  18. win10 启动vmware虚拟机就会蓝屏解决方法
  19. Hex Tech,一个带编程协同能力的 BI 平台的“危”与“机”
  20. Linux(GPU)显卡清理缓存

热门文章

  1. Pandas数据分析及可视化应用实践
  2. 肖秀荣:考研政治选择题最完整答题技巧总结
  3. 自组织竞争网络(SOM)
  4. insmod: error inserting 'vivi.ko': -1 Unknown symbol in module 问题解决办法
  5. oracle定时清理aud$
  6. php 五角星,php使用GD库画五角星
  7. opencv笔记(二)之opencv打开笔记本摄像头
  8. linux sed 替换文件路径
  9. java中gui_java中GUI是什么意思?详细图解
  10. 电子信息工程求职目标_应用电子专业求职信范文合集6篇