传送门

《统计学习方法》读书笔记——机器学习常用评价指标
《统计学习方法》读书笔记——感知机(原理+代码实现)
《统计学习方法》读书笔记——K近邻法(原理+代码实现)
《统计学习方法》读书笔记——朴素贝叶斯法(公式推导+代码实现)


感知机

  • 传送门
  • 一、感知机的定义
  • 二、感知机学习策略
  • 三、感知机学习算法
  • 四、代码实现
  • 参考

一、感知机的定义

假设输入空间 X⊆Rn\mathcal{X}\subseteq{\mathcal{R^n}}X⊆Rn,输出空间Y={+1,−1}\mathcal{Y} = \{+1, -1\}Y={+1,−1};
输入x∈Xx\in\mathcal{X}x∈X表示样本的特征向量,输出y∈Yy\in\mathcal{Y}y∈Y表示样本的类别。则由输入空间到输出空间的映射(函数)
f(x)=sign(w⋅x+b)f(x)=sign(w \cdot x + b) f(x)=sign(w⋅x+b)
称为感知机,其中w∈Rnw\in\mathcal{R^n}w∈Rn称为权值,b∈Rb\in\mathcal{R}b∈R称为偏置,signsignsign为符号函数。

二、感知机学习策略

感知机学习的目标即找出能够将训练数据集中的正、负样本分离开的超平面。 如图:

定义损失函数为所有错误分类的样本点到超平面的距离之和。推导如下:
输入空间任意一点x0x_0x0​到超平面的距离为:
1∥w∥∣w⋅x0+b∣\frac{1}{\|w\|} |w\cdot x_0+b| ∥w∥1​∣w⋅x0​+b∣
其中∥w∥\|w\|∥w∥是www的L2L_2L2​范数,即各元素的平方和再开平方。
\\
对分类错误的样本点来说−yi(w⋅xi+b)>0-y_i(w\cdot x_i + b)>0−yi​(w⋅xi​+b)>0,因此

∣w⋅x0+b∣=−yi(w⋅xi+b)|w\cdot x_0 + b| = -y_i(w\cdot x_i + b) ∣w⋅x0​+b∣=−yi​(w⋅xi​+b)

则错误分类的样本点到超平面的总距离为:−1∥w∥∑xi∈Myi(w⋅xi+b)-\frac{1}{\|w\|}\sum\limits_{x_i\in M}{y_i(w\cdot x_i+b)}−∥w∥1​xi​∈M∑​yi​(w⋅xi​+b)

若不考虑∥w∥\|w\|∥w∥,则损失函数定义如下:
L(w,b)=−∑xi∈Myi(w⋅xi+b)L(w,b) = -\sum\limits_{x_i\in M}{y_i(w\cdot x_i+b)} L(w,b)=−xi​∈M∑​yi​(w⋅xi​+b)

三、感知机学习算法

输入:训练数据集T={(x1,y1),(x2,y2),⋅⋅⋅,(xn,yn)}T=\{ (x_1,y_1),(x_2,y_2),···,(x_n,y_n)\}T={(x1​,y1​),(x2​,y2​),⋅⋅⋅,(xn​,yn​)},其中xi∈X=Rnx_i\in\mathcal{X}=\mathcal{R^n}xi​∈X=Rn,yi∈Y={−1,+1},i=1,2,⋅⋅⋅,ny_i\in\mathcal{Y}= \{-1,+1\},i=1,2,···,nyi​∈Y={−1,+1},i=1,2,⋅⋅⋅,n;学习率η(0<η≤1)\eta(0<\eta\leq1)η(0<η≤1);
输出:w,bw,bw,b;感知机模型f(x)=sign(w⋅x+b)f(x)=sign(w\cdot x+b)f(x)=sign(w⋅x+b)。
(1)选取初值w0,b0w_0,b_0w0​,b0​;
(2)在训练集中选取数据(xi,yi)(x_i,y_i)(xi​,yi​);
(3)如果yi(w⋅xi+b)≤0y_i(w\cdot x_i+b)\leq0yi​(w⋅xi​+b)≤0;
w←w+ηyixib←b+ηyiw\larr w+\eta y_i x_i \\ b\larr b+\eta y_i w←w+ηyi​xi​b←b+ηyi​
(4)转至(2),直至训练集中没有误分类点。

四、代码实现

#coding=utf-8
import numpy as np
import timedef loadData(fileName):print('start to read data')dataArr = []labelArr = []fr = open(fileName, 'r')# 将文件按行读取for line in fr.readlines():# 对每一行数据按切割符','进行切割,返回字段列表curLine = line.strip().split(',')# Mnsit有0-9是个标记,由于是二分类任务,所以将>=5的作为1,<5为-1if int(curLine[0]) >= 5:labelArr.append(1)else:labelArr.append(-1)#存放标记#[int(num) for num in curLine[1:]] -> 遍历每一行中除了以第一哥元素(标记)外将所有元素转换成int类型#[int(num)/255 for num in curLine[1:]] -> 将所有数据除255归一化(非必须步骤,可以不归一化)dataArr.append([int(num)/255 for num in curLine[1:]])#返回data和labelreturn dataArr, labelArrdef perceptron(dataArr, labelArr, iter=50):print('start to train...')dataMat = np.array(dataArr)labelMat = np.array(labelArr)#获取数据矩阵的大小,为m*nm, n = np.shape(dataMat)# w为权重,随机初始化, shape为 784*1# b为偏置,初始化为0# eta为学习率,控制梯度下降速度w = np.random.rand(1, n)b = 0eta = 0.001#进行iter次迭代计算for k in range(iter):# 随机梯度下降for i in range(m):# 当前样本的特征向量,及样本类别xi = dataMat[i].reshape(-1, 1)yi = labelMat[i]#判断是否是误分类样本if -1 * yi * (w @ xi + b) > 0:#对于误分类样本,进行梯度下降,更新w和bw = w + eta * yi * xi.Tb = b + eta * yi#打印训练进度print('Round %d:%d training' % (k, iter))#返回训练完的w、breturn w, bdef model_test(dataArr, labelArr, w, b):print('start to test...')dataMat = np.array(dataArr)labelMat = np.array(labelArr)#获取测试数据集矩阵的大小m, n = np.shape(dataMat)#错误样本数计数errorCnt = 0for i in range(m):# 当前样本的特征向量,及样本类别xi = dataMat[i]yi = labelMat[i]# 运算结果result = -1 * yi * (w * xi.T + b)#如果-yi(w*xi+b)>=0,说明该样本被误分类,错误样本数加一if result >= 0:errorCnt += 1# 计算并返回正确率accruRate = 1 - (errorCnt / m)return accruRateif __name__ == '__main__':start = time.time()trainData, trainLabel = loadData('./mnist/mnist_train.csv')testData, testLabel = loadData('./mnist/mnist_test.csv')#训练获得权重w, b = perceptron(trainData, trainLabel, iter = 30)#进行测试,获得正确率accruRate = model_test(testData, testLabel, w, b)end = time.time()print('accuracy rate is:', accruRate)print('time span:', end - start)

运行结果:

参考

原理:《统计学习方法》
代码: https://github.com/Dod-o/Statistical-Learning-Method_Code

《统计学习方法》读书笔记——感知机(原理+代码实现)相关推荐

  1. 统计学习方法读书笔记(六)-逻辑斯蒂回归与最大熵模型(迭代尺度法(IIS))

    全部笔记的汇总贴:统计学习方法读书笔记汇总贴 逻辑斯谛回归 (logistic regression )是统计学习中的经典分类方法.最大熵是概率模型学习的一个准则,将其推广到分类问题得到最大熵模型(m ...

  2. 统计学习方法读书笔记(九)-EM算法及其推广

    全部笔记的汇总贴:统计学习方法读书笔记汇总贴 EM算法用于含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计.EM算法的每次迭代由两步组成:E步,求期望(ex ...

  3. 统计学习方法 读书笔记(五)

    读书笔记仅供个人学习使用 本文主要参考书籍为<统计学习方法>(李航)第二版 参考 Sunning_001的博客 决策树 决策树的定义 if-then 的理解 条件概率分布的理解 决策树学习 ...

  4. 统计学习方法读书笔记15-逻辑斯蒂回归习题

    文章目录 1.课后习题 2.视频课后习题 1.课后习题 import numpy as np import time import matplotlib.pyplot as plt from mpl_ ...

  5. 统计学习方法|逻辑斯蒂原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  6. 统计学习方法|朴素贝叶斯原理剖析及实现

    欢迎直接到我的博客查看最近文章:www.pkudodo.com.更新会比较快,评论回复我也能比较快看见,排版也会更好一点. 原始blog链接: http://www.pkudodo.com/2018/ ...

  7. 首发:李航老师的《统计学习方法》第二版的代码实现(Github标星过万!)

    李航老师的<统计学习方法>第二版的代码实现更新完毕,本文提供下载.(黄海广) 李航老师编写的<统计学习方法>全面系统地介绍了统计学习的主要方法,特别是监督学习方法,包括感知机. ...

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

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

  9. 李航《统计学习方法》笔记

    虽然书名是统计学习,但是却是机器学习领域中和重要的一本参考书.当前的机器学习中机器指计算机,但是所运用的方法和知识是基于数据(对象)的统计和概率知识,建立一个模型,从而对未来的数据进行预测和分析(目的 ...

最新文章

  1. ubuntu如何实现双屏显示(转)
  2. android调用flutter aar_Flutter原生混合开发
  3. 《面向对象的思考过程(原书第4版)》一 第2章 如何以面向对象的方式进行思考...
  4. Markdown简介
  5. 背景图片自适应屏幕大小CSS写法
  6. 云真机可以帮助测试解决什么问题?
  7. c语言里的函数和数学里面的函数有什么区别,计算机函数和数学函数有哪些区别和关系?...
  8. 最优策略(Optimal Policy)及贝尔曼最优方程(Bellman Optimally Equation)
  9. 医院设备管理系统-项目模板-毕业设计
  10. 上线一月破千万,孙俪都是其粉丝,揭秘花粉儿APP的成长秘诀
  11. Vue实现分享链接到新浪微博
  12. Windows 安装dbserver
  13. uvc摄像头代码解析2
  14. 苹果电脑怎么更换计算机模式,MAC电脑Command键怎么调换为Control键?
  15. Cortex M0下coos调度上下文切换原理
  16. 中国商业印刷行业市场深度调研及投资价值评估研究报告
  17. 画混淆矩阵sklearn
  18. html5前端开发培训机构,JavaScript变量声明提升
  19. 使用cmd指令强制关闭tomcat进程
  20. Unity判断一个物体是否在相机范围内

热门文章

  1. Android -- AudioPlayer
  2. 发布过程5分钟内load飙升问题排查
  3. silverlight 二级导航
  4. Css 基本的规则写法
  5. 《背影》----朱自清
  6. 【三边定位】 演示程序V0.1
  7. scrollLeft. float
  8. Entity Framework 关系约束配置
  9. 为什么chm(帮助文档)打不开
  10. 动态加载网上或者本地场景的后续