【感知模型】

news/2024/7/24 7:20:59

定义

假设输入空间(特征向量)为X⊆Rn,输出空间为Y={-1, +1}。输入x∈X表示实例的特征向量,对应于输入空间的点;输出y∈Y表示示例的类别。由输入空间到输出空间的函数为

                                   f(x)=sign(w·x + b)                                      1

称为感知机。其中,参数w叫做权值向量,b称为偏置。w·x表示wx的内积。sign为符号函数,即

 https://images0.cnblogs.com/blog/408927/201402/221557265891456.png                                    2

几何解释    

感知机模型是线性分类模型,感知机模型的假设空间是定义在特征空间中的所有线性分类模型,即函数集合{f|f(x)=w·x+b}。线性方程 w·x+b=0对应于特征空间Rn中的一个超平面S,其中w是超平面的法向量,b是超平面的截踞。这个超平面把特征空间划分为两部分。位于两侧的点分别为正负两类。超平面S称为分离超平面,如下图:

损失函数的一个自然的选择是误分类的点的总数。但是这样得到的损失函数不是参数wb的连续可导函数,不宜优化。损失函数的另一个选择是误分类点到分里面的距离之和。

这个推到过程可以去推导一下

首先,对于任意一点xo到超平面的距离为

       https://images0.cnblogs.com/blog/408927/201402/221633079256175.png                                     (3)

其次,对于误分类点(xi,yi)来说 -yi(w·xi+b)>0

因为wxi+b>0时,yi=−1,而当wxi+b<0时,yi=+1,因此,误分类点xi到超平面S的距离是:

 

这样,假设超平面S的总的误分类点集合为M,那么所有误分类点到S的距离之和为

                        https://images0.cnblogs.com/blog/408927/201402/221638545717347.png                           (4)

不考虑1/||w||(为什么要去掉呢?),就得到了感知机学习的损失函数。

https://images0.cnblogs.com/blog/408927/201402/221659331748611.png                     (5)  

感知机学习是误分类驱动的,具体采用随机梯度下降法。首先,任意选定w0b0,然后用梯度下降法不断极小化目标函数(6),极小化的过程不知一次性的把M中的所有误分类点梯度下降,而是一次随机选取一个误分类点使其梯度下降。

    假设误分类集合M是固定的,那么损失函数L(w,b)的梯度由(7)(8)给出

               https://images0.cnblogs.com/blog/408927/201402/221728071592944.png                                  7

                https://images0.cnblogs.com/blog/408927/201402/221728160257221.png                                      8

随机选取一个误分类点(xi,yi,w,b进行更新:

                    https://images0.cnblogs.com/blog/408927/201402/221731407927744.png                                            9

                     https://images0.cnblogs.com/blog/408927/201402/221731517389853.png                                              10   

具体算法:

算法(感知机学习算法的原始形式)

输入:T={(x1,y1),(x2,y2)...(xN,yN)}(其中xi∈X=Rn,yi∈Y={-1, +1},

i=1,2...N,学习速率为η)

输出:w, b;感知机模型f(x)=sign(w·x+b)

(1) 初始化w0,b0

(2) 在训练数据集中选取(xi, yi)

(3) 如果yi(w xi+b)≤0

           w = w + ηyixi

           b = b + ηyi

(4) 转至(2)

 

直观解释:当一个实例点被误分类时,调整w,b,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超越该点被正确分类。

IRIS示例:

from sklearn import datasets
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score  

iris = datasets.load_iris() # 加载Iris数据集。
print(type(iris))
X = iris.data[:, [2, 3]]#后面的两列数据
#iris是里面定义的一个数据集
y = iris.target # 标签已经转换成0,1,2了
#print(y)
#后面的随机数种子不知道是什么概念
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 为了看模型在没有见过数据集上的表现,随机拿出数据集中30%的部分做测试
#print(X_test)
# 为了追求机器学习和最优化算法的最佳性能,我们将特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train) # 估算每个特征的平均值和标准差
sc.mean_ # 查看特征的平均值,由于Iris我们只用了两个特征,结果是array([ 3.82857143,  1.22666667])
print(sc.mean_)
sc.scale_ # 查看特征的标准差,结果是array([ 1.79595918,  0.77769705])
print(sc.scale_)
X_train_std = sc.transform(X_train)
# 注意:这里我们要用同样的参数来标准化测试集,使得测试集和训练集之间有可比性
X_test_std = sc.transform(X_test)

# 训练感知机模型
from sklearn.linear_model import Perceptron
# n_iter:可以理解成梯度下降中迭代的次数
# eta0:可以理解成梯度下降中的学习率
# random_state:设置随机种子的,为了每次迭代都有相同的训练集顺序
ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
print(ppn)
ppn.fit(X_train_std, y_train)

# 分类测试集,这将返回一个测试结果的数组
y_pred = ppn.predict(X_test_std)
print(y_pred)
# 计算模型在测试集上的准确性
#计算分类准确率
accuracy_score(y_test, y_pred)

-----------------------------执行结果-----------------------------------

 


http://www.niftyadmin.cn/n/784836.html

相关文章

Vue框架入门学习(五)——Vue-cli

文章目录七、Vue-cli1.环境搭建2.实例2.1 表单2.2 delete操作3.Vuex七、Vue-cli 1.环境搭建 首先安装vue-cli 安装成功的话&#xff0c;输入vue就可以弹出菜单 用vue list可以查看vue-cli的功能&#xff0c;像热更新和编译等等 然后开始构建一个项目&#xff0c;并且在此处…

VS Sln图标空白修复办法

环境&#xff1a;Win10,VS2017,曾经安装并卸载过VS2015之前安装了两个版本的VisualStudio&#xff0c;卸载一个后&#xff0c;就出现了图标空白问题&#xff0c;重新设置默认打开程序也没有作用&#xff0c;经摸索解决办法如下。&#xff08;1&#xff09;在注册表里查找.sln &…

ARM体系结构与编程模型总结

感觉这篇文章写得很好&#xff1a; https://blog.csdn.net/qq_32651225/article/details/78176567 ARM体系结构与编程模型 ARM体系结构 一、ARM处理器简介及RISC特点 ARM处理器简介 ARM&#xff08;Advanced RISC Machines&#xff09;是一个32位RISC&#xff08;精简指令集&a…

final,finally,finalize有什么区别

初步了解 这是一道非常典型的面试题&#xff0c;而它也是有一系列的典型回答的&#xff1a; final可以用来修饰类、方法、变量&#xff0c;分别有不同的意义所在&#xff0c;final修饰的class代表不可继续扩展&#xff0c;final修饰的变量代表不可修改&#xff0c;final修饰的…

Ubuntu 16.04安装Wine版的微信(deepin-wechat)

说明&#xff1a; 1、使用的Wine版本是深度出品&#xff08;Deepin&#xff09;&#xff0c;已经精简了很多没用的配置&#xff0c;使启动能非常快&#xff0c;占用资源小。 2、关于没有.wine文件夹的解决方法&#xff1a;在命令行上运行winecfg&#xff1b; 3、有可能在今年We…

各类常见Http状态码详解

文章目录1xx2xx3xx4xx5xx1xx 表示临时响应并且需要请求者继续执行操作 100&#xff08;继续&#xff09; 请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分&#xff0c;正在等待其余部分。 101&#xff08;求换协议&#xff09; 请求者已要求服务器切换协议…

ARM体系架构

这个适合来做科普 一&#xff1a;什么是嵌入式&#xff1a; 嵌入式是为了完成某个特定功能&#xff0c;在软件和硬件上进行了裁剪&#xff0c;低成本&#xff0c;低功耗&#xff08;电源管理模块&#xff0c;软件判断硬件是否使用&#xff09;&#xff0c;便携式&#xf…

[SPOJ 375]Query on a tree

Description 题库链接 给定 \(n\) 个点的树。支持以下操作&#xff1a; CHANGE \(i\) \(t_i\) 将第 \(i\) 条边权值改为 \(t_i\) &#xff1b;QUERY \(a\) \(b\) 询问从 \(a\) 点到 \(b\) 点路径上的最大边权多组数据。 \(1\leq n\leq 10000,t\leq 20\) Solution \(LCT\) 维护边…