PyTorch与Scikit-Learn实战:构建分类模型——第2章

其它章节内容请见
机器学习之PyTorch和Scikit-Learn

本章中我们会使用所讲到的机器学习中的第一类算法中两种算法来进行分类:感知机(perceptron)和自适应线性神经元(adaptive linear neuron)。我们先使用Python逐步实现感知机,然后对鸢尾花数据集训练来分出不同花的品种。这有助于我们理解用于分类的机器学习算法概念以及如何用Python进行有效的实现。

接着对自适应线性神经元优化基础的讨论会为我们在
第3章 使用Scikit-Learn的机器学习分类器之旅
中通过scikit-learn机器学习库使用更高级的分类器奠定基础。

本章中的主要内容有:

  • 理解机器学习算法
  • 使用pandas、NumPy和Matplotlib读取、处理及可视化数据
  • 用Python实现两分类问题的线性分类器

人工神经元-一瞥机器学习早期史

在深入讨论感知机和相关算法前,我们先了解下机器学习起源的简史。为理解生物大脑的工作原理进而设计人工智能(AI),Warren McCulloch和Walter Pitts于1943年发表了第一个简化大脑细胞的概念,称为
McCulloch-Pitts(MCP)
神经元(《神经活动内在思想的逻辑演算》
W. S. McCulloch

W. Pitts
,《数学生物物理学通报》,5(4): 115-133, 1943)。

生物神经元与大脑中处理和传递化学和电信号的神经细胞相互关联,见图2.1:

图2.1: 处理化学和电信号的神经元

McCulloch和Pitts将这种神经细胞描述为一个带二元输出的简单逻辑门,多个信号到达树突(dendrites),然后被集成到细胞体中,如果累积的信息超过了某一门槛,会生成一个输出信号由轴突(axon)传递。

几年后,Frank Rosenblatt发表了根据MCP神经模型发表了第一个感知机学习规则的概念(《感知机:一个感知和识别自动机》,
F. Rosenblatt
, 康奈尔航空实验室, 1957)。根据他的感知机规则,Rosenblatt提出了一种算法,可以自动学习最佳权重系数,然后乘以输入特征来决定神经元是否传输信号。在监督学习和分类领域,这一算法可用于预测新的数据点属于哪一类。

人工神经元的正式定义

更正式些,我们可以将人工神经元放到有两个类(0和1)的二元分类上下文。然后我们可以定义一个决策函数

,接收一定输入值的线性组合
x
,以及权重向量
w
,其中
z
称为净输入
z

w
1
x
1 +
w
2
x
2 + … +
w
m
x
m:

如果我们示例中的净输入
x
(i)大于所定义的阈值θ,我们预测为类1,否则为类0。在感知机算法中,决策函数

,是单位阶跃函数的一种变体:

为简化稍后的代码实现,我们可能过几个步骤来修改这一设置。首先,将阈值θ移到等式的左边:

其次,我们将偏置单元(
bias unit
)定义为

并使其成为净输入的一部分:

z

w
1
x
1 + … +
w
m
x
m +
b

w
T
x
+
b

第三,根据所引入的偏置单元以及上面对净输入
z
的重新定义,可将决策函数重新定义如下:

线性代数基础:点乘和矩阵转置

在后面的小节中,我们会频繁使用线性代数中的基本符号。例如,我们会将
x

w
值乘积的和简写为向量点乘,而上标
T
表示的是转置,是一种将列向量转换为行向量或是行向量转换为列向量的运算。比如,假设有如下两个列向量:

那么,我们可以将向量
a
的转置写作
a
T = [
a
1
a
2
a
3],并将点乘写作:

此外,还可以对矩阵应用转置运算将其沿对角线进行翻转,如:

注意转置运算是严格地定义于矩阵之上的,但是在机器学习中,我们使用向量来指代
n
× 1或1 ×
m
矩阵。

本书中,我们只会使用线性代数中非常基础的概念,但如果读者需要快速补习下线性代数,可以读一下Zico Kolter的《线性代数复习和参考》,非常的不错,可通过
http://www.cs.cmu.edu/~zkolter/course/linalg/linalg_notes.pdf
免费获取。

图2.2描绘了如何通过感知的决策函数将净输入
z

w
T
x
+
b
压缩为二元输出(0或1) (左图)以及如何使用它来通过线性决策边界区分两个类(右图):

图2.2:为二元分类问题生成线性决策边界的阈值函数

感知机学习法则

MCP神经元以及Rosenblatt的阈值感知机模式整体的概念是使用还原法(reductionist approach)来模仿大脑中单个神经元的工作方法:要么有反应,要么没反应。因此Rosenblatt的经典感知机规则相对简单,感知机算法可总结为如下步骤:

  1. 将权重和偏置单元初始为0或较小的随机数

  2. 对于每个训练样本
    x
    (i):

    1. 计算输出值
    2. 更新权重和偏置单元

这里的输出值为稍早定义的单位跃阶函数所预测的类标签,偏置单元会同步更新,权重向量
w
中的每个权重
w
j,可更正式地写为:

更新值(Δ值)按如下方式计算:

注意与偏置单元一同,每个权重
w
j都对应一个特征
x
j,在数据集中,涉及到了对更新值

的决定,定义参见上图。此外η为学习率(通常是0.0 和1.0之间的常量),
y
(i)是第
i
个样本的真实类标签,

为预测类标签。重要要注意偏置单元和权重向量中的所有权重都同步更新,也就是说只有在通由各自的更新值,



更新好偏置单元及所有权重之后,才会重新计算预测标签

。具体来说,对于二维数据集,我们会将更新写作:

在使用Python实现感知机规则前,我们先通过一个简单实验来描绘这种学习规则的简单和美妙。在感知机正确预估类标签的两个场景中,偏置单元和权重保持不变,因为更新值为0:

(1)

(2)

但预测错误时,权重就会被推向正目标类或负目标类的方向:

(3)

(4)

为更好理解多重因子特征值,

,我们再来看一个简单示例,其中:

假设

并且我们错误地将该样本归类为
0
。这时,我们会将相应的权重总共增加2.5,这样其净输入

会在我们下次遇到这一样本更为正向,因而也更有可能高于单位跃阶函数的阈值并将该样本决定为类1:

权重的更新



成一定比例。比如,有另一个样本,

,被错误地归类为了类0,我们会将决策边界推到更大以让下次能对样本进行正确地归类:

重点要注意感知机收敛的前提是两个类一定是线性可分的,也就是说这两个类必须要能够通过线性决策边界完美分割。(感兴趣的读者可以在作者的讲课笔记中找到收敛的证明:
https://sebastianraschka.com/pdf/lecture-notes/stat453ss21/L03_perceptron_slides.pdf
)。图2.3中导示了线性可分割和线性不可分割场景的可视化示例:

图2.3:线性可分割和线性不可分割类的示例

如果两个不能通过线性决策边界分割,我们可以对训练数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值