有监督机器学习所做的工作可以用一种图来表示(通过标注的数据训练一个模型,通过模型对未知的数据进行预测):
训练的过程是让模型在标注过的数据上准确性更高,一般的过程是最小化损失函数(经验风险最小化)。最小化损失函数得到的结果不一定好,尤其是标注数据较小的情况下,容易产生过拟合现象,如下:
第4个模型的误差为0,但不是最优的模型,因为该模型仅仅是在标注数据上表现的很好,对于未知的数据的预测能力很差。过拟合是由于模型的复杂程度过高,那么可以将模型加入对复杂度的考虑(结构风险最小化),如下(模型正则化):
因为在得到模型之后需要验证模型的好坏,一般的做法是将标注数据分成几部分,一部分用来训练模型,另一部分用来检验模型的预测能力。通常通过精确率和召回率来评价一个模型的好坏:
- TP:将正类预测为正类数
- FN:将正类预测为负类数
- FP:将负类预测为正类数
- TN:将负类预测为负类数
---------- ---------- ---------- ---------- ---------- 分割线 ---------- ---------- ---------- ---------- ----------
感知机的作用是用来给数据打标,比如在二分类问题中{+1、-1}分别表示两类,下图中的直线(w·x + b = 0)就是一个感知机:
在维度更高的时候感知机就是一个超平面。求解感知机的过程就是从样本中计算出w、b,首先我们需要一个损失函数来评估w、b的好坏,最直观的是用误分点的个数来评估,但是这样很难评估(很难表示并且不可导),那么换个角度,考虑误分点到超平面的距离(肯定是越小越好):
这个东西并不好处理,考虑到分错的情况y和w·x + b的符号相反,那么所有误分类的距离之和就可以作为损失函数:
其中M是错误点的集合,解决这种问题一般使用SGD(随机梯度下降)算法,计算w、b的梯度如下:
然后随机选择一个分错的点进行更新(这就是SGD中随机的含义,用全局的梯度当然好,但是算起来比较麻烦):
这其中涉及到步长(学习率)。在直观上看来调整w、b的过程就是将超平面像选中的点移动一些以便超平面的位置相对好一些,而且可以证明对于线性可分的样本通过有限次调整可以使得超平面将两类点完全分开。下面一次看几种具体的方法。
---------- ---------- ---------- ---------- ---------- 分割线 ---------- ---------- ---------- ---------- ----------
首先来看k近邻算法:给定一个训练数据集,对新的输入实例,在训练集中找到最邻近的k个实例,它们中的多数属于某个类,就把该实例归为哪一类。话句话说就是通过输入的实例将空间划分成不同的区域:
显然k值的选择很讲究,太小的话选择的如果选择的样本点本身的误差比较大怎么办?如果选择太大的话很多较远的不怎么相关的样本会对结果产生影响。
在计算的时候如果线性扫描样本数据来选出k个邻近点的话,性能比较差,常用的优化方法是kd树:
在内存中保存的树形结构如下:
在给定目标节点寻找k邻近点,首先沿着路径可以找到叶子节点,然后从子节点递归回退的过程找到邻近节点。
---------- ---------- ---------- ---------- ---------- 分割线 ---------- ---------- ---------- ---------- ----------
在反垃圾邮件中第一次接触到贝叶斯算法,