机器学习是怎么做的,在开始之前我们先熟悉一些在机器学习中常用数学表达方式。有输入数据、模型和输出,我们做的工作就是怎么将这些串起来让机器通过学习完成任务,可以听听李宏毅老师的有关机器学习通用套路。
输入数据,用 x 表示样本,下标 m 表示样本 x 的 m 特征,上标 i 表示第 i 个样本,大写 x 表示样本集合,y 表示样本输出
然后 x 于 y 在实际是存在函数关系 F(x) = y,然后通过假设我们找到 G 函数来拟合 F 我们用 G(x) 输出为 y hat 表示通过我们输入 x 到 假设 G 函数中得到输出,接下来我们计算 和 y 之间误差,然后就是以缩小他们之间误差为目标更新函数参数来实现机器学习过程。
感知机是机器感受外界的开端,感知机是神经网的基础,神经网络就在感知机基础上发展而来。所以今天先放下线性回归和logistic 回归。之前一直被 SVM 压制的神经网络。
每一个模型或者算法分享分为两个部分,第一个部分是理论部分,介绍模型背后算法和公式推导,第二个部分是这个模型实现,我都是基于 python 语言或者其他框架来实现的,您也可以根据之前理论一步一步用自己熟悉语言实现,但是还推荐使用 python、cpp 或 c 来实现。
然后我们就来看如何用数学方式来表示这个感知机,其实在机器学习问题中,主要工作就是找到一个函数来描述我们任务或者说问题。
大家看到这个函数,先不要紧张,尽量给大家解释清楚,我们都知道计算机的世界就是由数字组成的世界、确切地说是只有 0 和 1 的世界。所以计算机并不认识事物,我们需要将用数字描述一件事物来告诉计算机这是什么,事物可以用一个向量来表示,向量维度分别表示物体的不同特征。
这里需要用一些数学语言将这些事情说明白,在机器学习过程中,我们要培养一种能力,就是用数学符号和数字来表示事情。
那么我怎么用数学方式表达这件事(感知机进行而非累问题),我们要找到一函数输入样本返回一个类别,这样表达我想大家会理解。
那么我们用数学方式将上面公式进一步表示一下。
这大写 x 表示样本,因为样本是以一个向量表示,在随后公式会用大写 x 来表示向量。向量每一个维度表示样本特征,样本上标小 n 表示这是第 n 个样本。
我们将 z 外面套一层函数,这是 sign 函数,可以理解为阶越函数,就是当 z 大于某一个值时候函数会输出 1 而其他为 -1,我们用 1 和 -1 分别表示不同类别。然后我们可以将 theta 转移 z 函数中。
其实这里 theta 就是函数截距,也可以理解为偏置。这是 x1 就是 1 w0 就是这个函数截距
然后我们阶越函数将 z 包裹一下,当 z 大于 0 时候输出 1 表示正例样本而当 z 为其他值输出 -1 表示负例样本,所谓正例样本和负例样本就是代表两个类别。
下面公式也没有什么特别之处,就是将上面比较繁琐的公式换了一种表达方式,下面公式就是对上面公式简单表达方式。z 是数值,而 W 和 X 都是一个向量如上。W 的上标 T 符号表示对向量 W 的转置,就是行列变换,从 m x 1 向量变为 1 x m 的向量,这样 W
好到现在位置我们已经好到合适数学表达方式将这件事描述清楚,这里还需要明确一下,样本和标签是已知的,根据这些已知数据我们来这个函数的参数,也就是等于在给定模型后,通过更新参数来逼近真实函数。那么我们接下来工作就是如何更新参数来让函数输出值拟合真实值。
这里 t 表示时刻,每个时刻我们会输入一个样本,t 也可以理解次序,样本先后次序。Wt 表示 t 时刻权重(参数),如果在 t 时刻函数输出为 -1 而真实样本为 1 也就是函数没有给出正确的分类。上面公式就可以对权重进行更新,更新方式很简单也很直观,就是在 t 时刻权重上加上 yn 真实值乘以样本。不过理解下来还是有点绕,我们通过图来解释一下,这样就比较好理解
这里来说一说余弦函数(cos),cos 在 0 到 90 之间取值都是正数,而在 90 到 180 之间取值都是负数。那么当我们函数返回-1 而实际值为 1 时候,这里因为分母是对两个向量取模,所以分母为正数,当 theta 小于 90 时候向量为正数,那么 z 就是为大于 0 数,所以 sign 输出 1,反之亦然。
估计参数,可能某一个点会估计错误,
线性可分,
现在我们来换一个角度看这个问题
- 这里 eta 可以理解为学习率,现在还不理解学习率没有关系暂时就可以理解为小于 1 系数