(由于我的markdown文件是使用VSC写的,在此顺便记录一下markdown语法)
Tips:需要在Git中使用 npm install hexo-math --save 命令来安装数学公式环境VSC中预览:先按住ctrl+k,松开后按v
ctrl B 粗体
ctrl l 斜体
ctrl shift ]  == #
ctrl m 标记数学公式环境**

感知机(perception)是一个二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1与-1二值

1.感知机模型

假设输入空间(特征空间)是 χ⊆Rn\chi \subseteq R^nχ⊆Rn,输出空间是Y={+1,−1}Y=\{+1,-1\}Y={+1,−1}。输入 x∈χx\in\chix∈χ 表示实例的特征向量,对应输出空间(特征空间)的点;输出 y∈Yy\in Yy∈Y 表示实例的类别,由输入空间到输出空间的如下函数
f(x)=sign(ω∗x+b)f(x)=sign(\omega*x+b) f(x)=sign(ω∗x+b)
称为感知机。其中,ω\omegaω和b为感知机模型参数, ω∈Rn\omega \in R^nω∈Rn叫作权值(weight)或权值向量(weight vector),b∈Rb\in Rb∈R叫作偏置(bias),ω∗x\omega*xω∗x表示ω\omegaω和x的内积。sign是符号函数,即:
sign={+1x≥0−1x≤0sign=\begin{cases} +1 & x\geq 0 \\ -1 & x\leq 0 \end{cases}sign={+1−1​x≥0x≤0​
感知机是一种线性分类模型,属于判别模型。感知机的假设空间的定义是在特征空间中的所有线性分类模型或者线性分类器,即函数集合{f∣f(x)=ω∗x+b}\{f|f(x)=\omega*x+b\}{f∣f(x)=ω∗x+b}。

2.感知机的几何解释

线性方程
ω∗x+b\omega*x+b ω∗x+b
对应特征空间RnR^nRn中的一个超平面SSS,ω\omegaω是超平面的法向量,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∈χ=Rnx_i\in\chi=R^nxi​∈χ=Rn ,yi∈Y={+1,−1},i=1,2,⋅⋅⋅Ny_i\in Y=\{+1,-1\},i=1,2,···Nyi​∈Y={+1,−1},i=1,2,⋅⋅⋅N,就得到了感知机模型f(x)=sign(ω∗x+b)f(x)=sign(\omega*x+b)f(x)=sign(ω∗x+b),即求得模型参数ω\omegaω,b。

3.感知机的学习策略

数据集的线性可分

对于给定的数据集
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∈χ=Rnx_i\in\chi=R^nxi​∈χ=Rn ,yi∈Y={+1,−1},i=1,2,⋅⋅⋅Ny_i\in Y=\{+1,-1\},i=1,2,···Nyi​∈Y={+1,−1},i=1,2,⋅⋅⋅N

能将数据集的正负实例点完全正确地划分到超平面的两侧。可如此划分则称为线性可分数据集否则称为数据集TTT不可分

4.损失函数

由点到平面距离公式可得,一个错误分类的点到超平面的距离为
d=∣Ax0+Bx0+C∣∣∣w∣∣d=\frac{|Ax_0+Bx_0+C|}{||w||} d=∣∣w∣∣∣Ax0​+Bx0​+C∣​
对于分类错误的点,一定有
−yi(ω∗xi+b)>0-y_i(\omega*x_i+b)>0 −yi​(ω∗xi​+b)>0
则所有错误分类的点到超平面的总距离
−1∣∣ω∣∣∑x1∈Myi(ω∗xi+b)-\frac{1}{||\omega||}\sum_{x_1\in M} y_i(\omega*x_i+b) −∣∣ω∣∣1​x1​∈M∑​yi​(ω∗xi​+b)
则感知机的损失函数为
L(ω,b)=−∑x1∈Myi(ω∗xi+b)L(\omega,b)=-\sum_{x_1\in M}y_i(\omega*x_i+b) L(ω,b)=−x1​∈M∑​yi​(ω∗xi​+b)
所有样本都分类正确时,损失函数为0,错误越少,损失函数越小,分类错误样本离超平面距离越近,则损失函数越小。因此感知机的学习目标就是最小化该损失函数。

5.梯度下降法

通俗的讲话,梯度就是导数和偏导数,梯度下降法的思想是:梯度方向是目标函数值下降最快的方向,因此沿着梯度下降的方向优化能最快寻找到目标函数的极小值。
参数ω\omegaω、b的更新可以表示为:
ω←ω−η∂L∂ω,b←b−η∂L∂b\omega \leftarrow \omega-\eta\frac{\partial L}{\partial \omega},b \leftarrow b-\eta\frac{\partial L}{\partial b} ω←ω−η∂ω∂L​,b←b−η∂b∂L​
在感知机中采用随机梯度下降法,即每次随机选择一个分类错误的样本计算,进行ω\omegaω和b的更新,即:
ω←ω+ηyixi,b←b+ηyi\omega \leftarrow \omega+\eta y_ix_i,b \leftarrow b+\eta y_i ω←ω+ηyi​xi​,b←b+ηyi​
其过程直观理解为:当一个样本被当前超平面划分到分类错误一类时,利用此样本调整超平面的参数,使超平面向靠近该样本的方向移动,则该样本距离超平面的距离减小,从而降低损失函数,直到超平面移动至使该样本被正确划分为止。

6.例子

{% asset_img 1.jpg %}

7.python代码实现

import numpy as np;
import pandas as pd;
import matplotlib.pyplot as plt;df=pd.read_excel("D:\pythondata\perceptrondata.xls");#读取原题数据
df=pd.DataFrame(df);
x=df.values[:,:-1];#x代表所有行的第一列到倒数第二列的数据,即分类实例的所有特征向量
y=df.values[:,-1];#y代表df的倒数第一列数据,即分类实例的所有类别
a=x.shape;
n=a[0];#n代表x特征向量的行数
m=a[1];#m代表x特征向量的列数
w=[];#创建空列表,w代表分离超平面中的法向量
for i in range(m):w.append(0);#列表的长度与特征向量的特征个数相同
#若直接命令w[0]=0,w[1]=0时,会报错,直接按照索引向列表内添加东西时,因为空的列表不能直接指定其位置。
b=0;#b代表分离超平面的截距
k=1;#用来判别是否找到最优的超平面。假设值为1,即未找到
while (k==1):k=0;for i in range(n):t=np.dot(w,x[i]);#用来计算w*xif (y[i]*(t+b)<=0):w=w+np.dot(y[i],x[i]);b=b+y[i];k=1;
print("分离超平面的法向量w={0},截距b={1}".format(w,b));
########可视化结果
#
def plot_and_scatter(df=None,w=0,b=0):xmin=df.values[:,:-1].min();xmax=df.values[:,:-1].max();xdiff=(xmax-xmin)*0.5;xx=np.linspace((xmin-xdiff),(xmax+xdiff),100);yy=-b-w[1]*xx;plt.figure();plt.xlabel("X(1)");plt.ylabel("X(2)");#设置坐标轴的文字标签ax=plt.gca();# get current axis 获得坐标轴对象ax.spines["right"].set_color("none");ax.spines["top"].set_color("none"); # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边ax.xaxis.set_ticks_position("bottom");ax.yaxis.set_ticks_position("left");ax.spines["bottom"].set_position(("data",0));ax.spines["left"].set_position(("data",0));#指定 data设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上plt.plot(xx,yy,"r");color_list=["blue","green","black","pink","orange"];y=df.values[:,-1];a=set(y);a=list(a);y_num=len(a);t=0;for j in range(y_num):tt=a[j];y_index=[i for i,y in enumerate(y) if y==tt];x_group1=df.values[y_index,0];x_group2=df.values[y_index,1];plt.scatter(x_group1,x_group2);t=t+1;plot_and_scatter(df,w,b);
plt.show();

笔记|统计学习方法:感知机模型相关推荐

  1. 统计学习方法 --- 感知机模型原理及c++实现

    参考博客 Liam Q博客 和李航的<统计学习方法> 感知机学习旨在求出将训练数据集进行线性划分的分类超平面,为此,导入了基于误分类的损失函数,然后利用梯度下降法对损失函数进行极小化,从而 ...

  2. 统计学习方法|感知机原理剖析及实现

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

  3. 统计学习方法感知机(附简单模型代码)

    1. 感知机模型 输入为实例的特征向量, 输出为实例的类别, 取+1和-1:感知机对应于输入空间中将实例划分为正负两类的分离超平面, 属于判别模型:导入基于误分类的损失函数:利用梯度下降法对损失函数进 ...

  4. 李航统计学习方法----感知机章节学习笔记以及python代码

    目录 1 感知机模型 2 感知机学习策略 2.1 数据集的线性可分性 2.2 感知机学习策略 3 感知机学习算法 3.1 感知机学习算法的原始形式 3.2 感知机算法的对偶形式 4 感知机算法pyth ...

  5. 统计学习方法-感知机概括和补充

    前言 <统计学习方法>第二版出了有段时间了,最近得空可以拜读一下.之前看第一版的时候还是一年多以前,那个时候看的懵懵懂懂的,很吃力.希望这一次能够有所收获,能够收获新的东西,这些文章只是用 ...

  6. 统计学习方法——感知机

    1. 感知机原理 感知机是一个二类分类模型,输入为实例的特征向量,输出为实例的类别,取值为+1和-1. 定义1-1:数据的线性可分性 假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数 ...

  7. 【统计学习方法】模型评估与模型选择

    一.训练误差与测试误差 首先引入误差的概念,误差(error)是指:学习器的实际预测输出与样本的真实输出之间的差异.类似地,学习器在训练集上的误差被称之为训练误差(training error)或者经 ...

  8. 笔记-统计学习方法-第一章01

    一.学习的定义: 赫尔伯特·西蒙:如果一个系统能够通过执行某个过程改进它的性能,这就是学习. Tom Mitchell ,机器学习:计算机程序可以在给定某种类别的任务 T 和性能度量 P 下学习经验 ...

  9. 统计学习方法第一章笔记——统计学习方法概论

    1 统计学习 1.1 统计学习的基本假设   假设同类数据具有一定的统计规律性,即数据具有某种共同性质. 1.2 统计学习的目的   统计学习用于对数据进行预测与分析,特别是新数据的预测与分析. 1. ...

最新文章

  1. 数位DP 回文序列 POJ-3280 Cheapest Palindrome
  2. 从零开始山寨Caffe·拾:IO系统(三)
  3. LeetCode算法题8:递归和回溯1
  4. with as 用法 oracle,with.as oracle的用法
  5. UA MATH567 高维统计专题3 含L1-norm的凸优化2 Proximal Gradient Descent
  6. python 嵌入式 linux 产品 发布_基于嵌入式Linux进行Python应用开发
  7. java中treemap释放_在Java中从TreeMap删除键
  8. bfs+优先队列(hdu1242)
  9. (数据库系统概论|王珊)第七章数据库设计-第二节:需求分析
  10. 不懂电脑如何买电脑_如何选择性价比高的电脑 买电脑要注意什么
  11. 奔驰宝马路虎等齐降价 最高降幅达8.5万!
  12. Fuel 9.0安装的Openstack Controller节点进程整理
  13. 3复数与复变函数(三)
  14. log4j+flume+HDFS实现日志存储
  15. unity3d 取锚点位置_天涯明月刀手游草鱼在哪里钓 天涯明月刀草鱼位置及|天涯|明月-游戏资讯...
  16. PC端和移动端的区别你知道吗?
  17. 微软行星云计算Planetary Computer——行星计算机数据资源管理器介绍!和GEE有啥不同?
  18. dbscan聚类python_DBSCAN聚类算法Python实现
  19. 插件搜索我的第一个chrome插件
  20. 无效的m3u8怎么办_你还在为m3u8文件如何转换而发愁?看了我就有答案了

热门文章

  1. 非常好用的开源矢量地图切片工具
  2. DCDC开关电源学习
  3. IP-guard项目实施前情况调查表
  4. DTM使用途中的bug记录
  5. “我36岁了,还得对28岁的领导赔笑脸”:中年人的职场,心酸自知
  6. mysql 餐饮管理系统_Java Mysql 餐饮管理系统 过程心得记录
  7. CAD中插入外部参照字体会变繁体_CAD绘图外部参照的使用方法
  8. 多任务:分层特征融合网络 NDDR-CNN
  9. PySpark reduce reduceByKey用法
  10. SQL Server报错:Arithmetic overflow error converting expression to data type int.