Python_sklearn机器学习库学习笔记(七)the perceptron(感知器)
一、感知器
感知器是Frank Rosenblatt在1957年就职于Cornell航空实验室时发明的,其灵感来自于对人脑的仿真,大脑是处理信息的神经元(neurons)细胞和链接神经元细胞进行信息传递的突触(synapses)构成。

一个神经元可以看做将一个或者多个输入处理成一个输出的计算单元。一个感知器函数类似于一个神经元:它接受一个或多个输入,处理
他们然后返回一个输出。神经元可以实时,错误驱动的学习,神经元可以通过一个训练样本不断的更新参数,而非一次使用整套的数据。实时学习可能有效的处理内存无法容纳的大数据。感知器通常用下面的图形表示:

x1,x2,x3是输入单元,每个输入单元分别代表一个特征。感知器通常用另外一个输入单元代表一个常用的误差项,但是这个输入单元在图形中通常被忽略了。中间的圆圈是一个计算单元,类似神经元的细胞核。链接输入单元和计算单元的边类似于树突。每条边一个权重,或者一个参数。参数容易解释,如果某个解释变量与阳性类型相关,权重为正,某个解释变量与阴性类型相关,其其权重为负。链接计算单元和输出单元的边类似树突。
二、激励函数
感知器通过使用激励函数(activeation function)处理解释变量和模型参数的线性组合对样本分类,计算公式如下所示。解释变量和模型参数的线性组合有时也称为感知器的预激励(preactivation)。

其中,wi是模型参数,b是常误差项,Φ()是激励方程。常用的激励方程有几种。Rosenblatt最初的感知器用的阶跃函数(Heaviside step function或unit step function)作为激励函数。函数公式如下:

如果加权解释变量的和加上常误差项之和大于0,则激励方程返回1,此时感知器就把样本归类为阳性。否则,激励方程返回0,感知器就把样本归类为阴性。阶跃函数图形如下所示:

另一个常用的激励函数是逻辑S形(logistic sigmoid)激励函数。这个激励函数的梯度分布可以更有效的计算,在处理后面的ANN算法是十分有效。其计算公式如下:

其中,x是加权输入的和。这个模型与第四章的逻辑方程类似,是解释变量值与模型参数的线性组合,与逻辑回归模型一样。虽然用逻辑S形激励函数的感知器与逻辑回归一样,但是要估计的参数不同。
三、感知器学习算法
感知器算法首先需要将权重设置为0或者很小的随机数,然后预测训练样本的类型。感知器是一种错误驱动(error-driven)的学习算法。如果感知器是正确的,算法就继续处理下一样本。如果感知器是错误的,算法就更新权重,重新预测。权重的更新规则如下:

对于每个训练样本来说,每个解释变量的参数值增加α(dj-yj(t))xj,i,dj是样本j的真实类型,yj(t)是样本j的预测类型,xj,i是第i个样本j的解释变量的值,α是控制学习速率的超参数。如果预测正确的,dj-yj(t)等于0,α(dj-yj(t))xj,i也是0,此时,权重不更新。如果预测错误的,权重会按照学习速率,(dj-yj(t))与解释变量的值的乘积增加。
这里更新的规则与梯度下降法中的权重更新规则类似,都是朝着使样本得到正确分类更新,且更新的幅度是由学习速率控制的。每次遍历一次训练样本成为完成了一世代(epoch)。如果学习完一世代后,所有的样本都正确分类,那么算法会收敛(converge)。学习算法不能保证收敛(例如线性不可分的数据集),因此学习算法还需要一个超参数,算法终止前需要更新的最大世代数
感知器的二元分类
下面我们来解决一个分类的案例。假设想从一堆的猫中分辨幼猫和成年猫。数据只有两个解释变量:用来睡觉的天数比例,闹脾气的天数比例。训练数据由下面四个样本构成:

下面的散点图表示这些样本是可以线性可分离的:
In [2]: import matplotlib.pyplot as plt In [3]: from matplotlib.font_manager import FontProperties In [4]: font = FontProperties(fname = r"c:\windows\fonts\msyh.ttc",size = 10) In [5]: import numpy as np In [6]: X = np.array([[0.2,0.1],[0.4,0.6],[0.5,0.2],[0.7,0.9]]) In [7]: y = [0,0,0,1] In [8]: marker = ['.','x'] In [9]: plt.scatter(X[:3,0],X[:3,1],marker=',',s=400)
Out[9]: <matplotlib.collections.PathCollection at 0x6d46208> In [10]: plt.scatter(X[3,0],X[3,1],marker='x',s=400)
Out[10]: <matplotlib.collections.PathCollection at 0x6c856a0> In [11]: plt.xlabel(u'用来睡觉的天数比例',fontproperties = font)
Out[11]: <matplotlib.text.Text at 0x6c9eeb8> In [12]: plt.ylabel(u'闹脾气的天数比例',fontproperties = font)
Out[12]: <matplotlib.text.Text at 0x6cadef0> In [13]: plt.title(u'幼猫和成年猫',fontproperties = font)
Out[13]: <matplotlib.text.Text at 0x6cad5c0>
In [14]: plt.show()


我们的目标是训练一个感知器可以用两个解释变量分辨猫的类型。我们用阳性表示幼猫,用阴性表示成年猫。用感网络图可以呈现感知训练的过程。
(略)
(三)感知器解决文档分类
scikit-learn提供了感知器功能。和我们用过的其他功能类似,Perceptron类的构造器接受超参数设置。Perceptron类有fit_transform()和predict方法,Perceptro类还提供了partial_fit()方法,允许分类器训练流式数据,并作出预测
在下面的例子当中,我们训练一个感知器对20个新闻类别的数据集进行分类。这个数据集20个网络新闻网站收集了近2万篇新闻。这个数据集经常用来进行文档的分类和聚类实验;scikit-learn提供了下载和读取数据集的简便方法。我们将训练一个感知器识别三个新闻类别:rec.sports.hockey、rec.sport.baseball和rec.auto。scikit-learn的Perceptron也支持多类分类,使用one versus all策略为训练集中每个类型训练分类器。我们将用TF-IDF加权词袋表示新闻文档。partial_fit()方法可以连接HashingVectorizer在内存有限的情况下训练较大的流式数据


首先我们用fetch_20newsgroups()下载并读取数据,和其他内建数据一致,这个函数返回对象包括data,target和target_name属性。我们还去掉了每篇文章的页眉,页脚和引用文献。保留那些让分类更容易的解释变量,我们用TfidfVectorizer生成TF-IDF矢量,训练感知器,然后用测试集评估效果。
资料来源:《Machine Learning With scikit-learn》
Python_sklearn机器学习库学习笔记(七)the perceptron(感知器)的更多相关文章
- Python_sklearn机器学习库学习笔记(一)_一元回归
一.引入相关库 %matplotlib inline import matplotlib.pyplot as plt from matplotlib.font_manager import FontP ...
- Python_sklearn机器学习库学习笔记(一)_Feature Extraction and Preprocessing(特征提取与预处理)
# Extracting features from categorical variables #Extracting features from categorical variables 独热编 ...
- Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)
# 逻辑回归 ## 逻辑回归处理二元分类 %matplotlib inline import matplotlib.pyplot as plt #显示中文 from matplotlib.font_m ...
- Python_sklearn机器学习库学习笔记(五)k-means(聚类)
# K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...
- Python_sklearn机器学习库学习笔记(六) dimensionality-reduction-with-pca
# 用PCA降维 #计算协方差矩阵 import numpy as np X=[[2,0,-1.4], [2.2,0.2,-1.5], [2.4,0.1,-1], [1.9,0,-1.2]] np.c ...
- Python_sklearn机器学习库学习笔记(四)decision_tree(决策树)
# 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...
- thon_sklearn机器学习库学习笔记(四)decision_tree(决策树)
# 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
随机推荐
- 转:动态table分页(ORCALE)
前端:<table style="width: 100%;"> <tr> <td> 搜索字: <asp:TextBox ID=" ...
- MdelForm 和formset
我们以前接触过Form组件就是堆你的字段进行校验的 现在我来看看ModelForm ModelForm比你的Form方便了一万倍 from django import forms 生成form类 c ...
- 第2次作业——APP的案例分析
APP的案例分析 网易有道词典APP,使用这个软件有三年之久.唯独最爱的一点就是我每天都能听到不一样的英文歌看到创作歌手的来历,当然偶尔也会有其他国家的歌.起初使用这个软件的目的是用来查单词,每天积累 ...
- 对于开发WEB方面项目需要的工具和技术了解
1.IDE:Webstorm,JavaScript 开发工具. 2.版本管理系统:Git,独一无二. 3.单元测试:jsamine,前后端共用.Jasmine是我们梦寐以求的Javascript测试框 ...
- 如何检查oracle的归档空间是否满了
如何检查oracle的归档空间是否满了 关于如何检查归档空间是否慢了,大多数人会去先检查放归档的目录的磁盘空间是否满了,通过该归档目录空余情况来判断归档空间是否满了,但我觉得这个方法不一定代表实际 ...
- 3、Django下载与简介
第1节:MVC与MTV模型 1.1 MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一 ...
- EventBus轻松使用
什么是EventBus 由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,功能:通过解耦发布者和订阅者简化Android事件传递,Event ...
- Undefined function or method 'deploywhich' for input arguments of type 'char'
在进行matlab和java混合编程的时候.由matlab打包,把m文件转换为jar文件.供java调用.有时在Tomcat中调用此类jar类会出现如题或者以下的错误: ??? Error using ...
- Oracle Listener
一.监听器功能 1)监听客户端请求:监听器作为独立进程运行在数据库服务器上,监听特定网络端口(默认1521)服务请求. 2)为客户端请求分配oracle Server Process:监听器不直接处理 ...
- 安卓预览报错 Failed to load AppCompat ActionBar with unknown error
报错信息 : Render ProblemFailed to load AppCompat ActionBar with unknown error. Failed to instantiate on ...