一、感知器

  感知器是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(感知器)的更多相关文章

  1. Python_sklearn机器学习库学习笔记(一)_一元回归

    一.引入相关库 %matplotlib inline import matplotlib.pyplot as plt from matplotlib.font_manager import FontP ...

  2. Python_sklearn机器学习库学习笔记(一)_Feature Extraction and Preprocessing(特征提取与预处理)

    # Extracting features from categorical variables #Extracting features from categorical variables 独热编 ...

  3. Python_sklearn机器学习库学习笔记(三)logistic regression(逻辑回归)

    # 逻辑回归 ## 逻辑回归处理二元分类 %matplotlib inline import matplotlib.pyplot as plt #显示中文 from matplotlib.font_m ...

  4. Python_sklearn机器学习库学习笔记(五)k-means(聚类)

    # K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...

  5. 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 ...

  6. Python_sklearn机器学习库学习笔记(四)decision_tree(决策树)

    # 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...

  7. thon_sklearn机器学习库学习笔记(四)decision_tree(决策树)

    # 决策树 import pandas as pd from sklearn.tree import DecisionTreeClassifier from sklearn.cross_validat ...

  8. python3.4学习笔记(七) 学习网站博客推荐

    python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...

  9. Linux学习笔记(七) 查询系统

    1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...

随机推荐

  1. Struts-config.xml配置文件《action-mappings》元素的详解

    原文地址:http://blog.163.com/sara1124@126/blog/static/11291097020105125537114/ action-mappings 该元素用于将Act ...

  2. 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分啊?

    '\r'是回车,前者使光标到行首,(carriage return)'\n'是换行,后者使光标下移一格,(line feed) \r 是回车,return\n 是换行,newline对于换行这个动作, ...

  3. 清除右键菜单CMD入口

    批处理代码 reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\cmd" /v Extended /t REG_SZ

  4. CSS背景图片垂直居中center不起效果完美解决

    背景图片居中CSS如下 background:#4892fe url("<%=basePath%>/img/login_bg.jpg") no-repeat cente ...

  5. java.lang.verifyerror:bad type on orerand stack

    问题: junit测试的时候报这个错:java.lang.verifyerror:bad type on orerand stack 原因:(多种,自行逐个排查) 1.class not find 引 ...

  6. Springboot 报application.properites文件找不到的解决方法

        部署项目遇到了找不到application.properties的问题.网上搜了找不到答案,后面经过测试发现,问题在于clean了maven之后,target包还没删除,所以编译的时候才会出现 ...

  7. 【转】【Flex】#010 操作XML文件(E4X)

    该教程转载来自于:http://blog.chinaunix.net/uid-14767524-id-2785506.html    [看到这边文章的位置,具体原作者未知] 经过一些排版的修改,其他内 ...

  8. codeforces 17D Notepad

    codeforces 17D Notepad 题意 题解 TBD 更新模板(phi.欧拉降幂) 代码 #include<bits/stdc++.h> using namespace std ...

  9. [DAViCHi/SeeYa/T-ARA][원더우먼][Wonder Woman]

    歌词来源:http://music.163.com/#/song?id=5371229 作曲 : 赵英秀 [作曲 : 赵英秀] [作曲 : 赵英秀] 作词 : K-Smith [作词 : KSmith ...

  10. 操作系统之Linux的内存分页管理

    内存是计算机的主存储器.内存为进程开辟出进程空间,让进程在其中保存数据.我将从内存的物理特性出发,深入到内存管理的细节,特别是了解虚拟内存和内存分页的概念. 内存 简单地说,内存就是一个数据货架.内存 ...