监督学习
KNN
K-近邻算法是一个分类模型,原理是:存在一个已经标注好的训练集合,数据结构是特征集+label;我们通过比较未标注数据与已标注数据的特征之间的相似关系,取前k个最相似的已标注数据的label,出现次数最多的label即新数据的类别;
举个比较实在的例子:假设我们要识别人脸,我们要识别的人是一张变化比较大的照片;然后照片库是保存的很多人从小到大各式各样的照片,但都明确照片归属,我们通过聚焦于脸部的特征比如眼睛、鼻子、嘴巴等,将新照片和库中的所有照片特征进行比较,筛选出k张最相似的,我们发现大部分都是老王的照片,那么我们就可以判定照片是老王的
决策树
决策树是一种树形结构,其中每个内部节点表示一个特征上的判断,每个分支代表一个判断结果的输出,最后每个叶节点代表一种分类结果
决策树算法的核心在于决策树的构建,每次选择让整体数据香农熵(描述数据的混乱程度,分类偏离程度越高就越乱)减小最多的特征,使用其特征值对数据进行划分,每次消耗一个特征,不断迭代分类,直到所有特征消耗完
决策树的生成主要分以下两步,这两步通常通过学习已经知道分类结果的样本来实现。
- 节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子节点(如不是二叉树的情况会分成n个子节点)
- 阈值的确定:选择适当的阈值使得分类错误率最小
ps:每一步都需要保证熵是最小的
分类树不像KNN需要持续数据计算进行分类,决策树是训练好后抽象出来的分类规则;进行分类时,只需要根据树的结构一层层去判断直至到叶子节点为止;
朴素贝叶斯
简述
贝叶斯概率是一种将分类看做是概率问题的处理方法,将分类问题转化为对某个类别的置信;
在现实生活中以及人类大脑逻辑中都会应用到贝叶斯概率方法;
通常的概率指的是经典概率,是通过已知信息推测出未知事件的发生概率,这是一种正向概率;比如抽奖场景中,我们已知奖品分布就能够推测出抽出某个奖品的概率
然而生活中大部分场景并不是这样,信息都是缺失的;我们需要在信息不全的情况下做推论;
比如天气预报,明天下雨概率是80%,我们不可能把明天过上1000次,下雨800天;这时候我们都是通过上述贝叶斯公式进行推论,很多地方都可以见到贝叶斯定理的影子,是机器学习的核心方法之一。例如垃圾邮件过滤,中文分词,艾滋病检查,肝癌检查等
垃圾邮件场景
拿垃圾邮件过滤的场景对贝叶斯方法进行定性分析,可以将上述公式理解为
后验概率=先验概率*影响因子
后验概率:在事件B发生的条件下,事件A发生的概率;
先验概率:不知道其他条件B时事件A发生的概率;可以用我们的经典概率计算;
影响因子:在事件B发生的条件下,我们对A的判断会发生改变;需要加入影响因子修正
垃圾邮件场景中我们可以将某些词汇的出现当做B,而具体是哪些词汇一般是筛选垃圾邮件中TOP15以上最常出现的词汇作为集,计算时按照联合概率判断
A是邮件判断为垃圾的事件;
1、计算垃圾邮件的概率
先验概率计算
那么,垃圾邮件的概率p(A)即我们通过统计历史数据的标注进行先验概率计算:垃圾邮件数目/总邮件数
影响因子计算
p(B)就是通过统计词汇在多个文档中出现的概率,朴素贝叶斯场景下,我们认为词语之间相互独立,那么p(B)=p(B1)p(B2).........p(Bn)
p(B|A)=p(B1|A)p(B2|A).........p(Bn|A) ;影响因子中两个值的计算在于样本量不同,上面的指垃圾邮件中词汇出现的概率;下面指在全量邮件中出现概率;
先验概率*影响因子即垃圾邮件的概率
2、按照同样的方法计算出现词汇A的情况下正常邮件的概率
3、通过比较正常与垃圾的概率(相除),我们可以得出分类结果
总结
如果我能掌握一个事情的全部信息,我当然能计算出一个客观概率(古典概率、正向概率)。
可是生活中绝大多数决策面临的信息都是不全的,我们手中只有有限的信息。既然无法得到全面的信息,我们就在信息有限的情况下,尽可能做出一个好的预测。也就是,在主观判断的基础上,可以先估计一个值(先验概率),然后根据观察的新信息不断修正(可能性函数)。
逻辑回归(LR)
LR算法是一个二分类模型,输出结果为0与1;生活中有很多现象都是分类任务:判断这个是不是肿瘤啦,判断这个人这次会不会考试通过,计算系统推荐的广告会不会点?
这些个分类问题都会概括为两个特点:
1、每个问题都可能被多个特征所影响,最终结果是多个特征的共同作用 (回归)
2、在特征组合影响下最终输出结果是两个极值,是与否?喜欢与不喜欢? (逻辑)
回归
在处理第一个问题时,我们一般通过回归方程来解决,不同的特征会有不同的权重w,然后再加和
逻辑
基于第二个特性,我们通过SIGMOD函数来表征
y会随着x值发生近跃迁变化,sigmoid函数是一个s形的曲线,它的取值在[0, 1]之间,在远离0的地方函数的值会很快接近0/1
求参数w
那么组合起来,就是在参数W的条件下,输入特征X后,P会根据阈值从而给出预测y的值(0或者1);在CTR的一些场景中P可以作为点击的概率使用
存在大量已经有的数据,需要通过梯度算法得到能够是的预测误差最小的W值
RL在二维特征上是一个一个分类平面,在高维特征上表现为超平面
用LR进行业务时,我们需要人工进行大量的特征工程
支持向量机SVM
SVM就是一种二类分类模型,他的基本模型是的定义在特征空间上的间隔最大的线性分类器,学习策略是间隔最大化。
以二维空间为例,图中的直线就是我们想要的分类器;我们可以直观的判断H3最好;H1是分类错误,而H2虽然分类成功但是泛化能力不强,一旦新增样本极有可能出现错误;H3就有很强的泛化能力,这里所谓的间隔最大的分类器就是指分类器距离最近类别元素的距离最大,间隔最大的就是最佳分类器
进一步说拓展:数据点若是n维向量,我们用n-1维的超平面来分开这些点。但是仍然可能有许多超平面可以把数据分类。最佳超平面的一个合理选择就是以最大间隔把两个类分开的超平面。因此,SVM选择能够使离超平面最近的数据点的到超平面距离最大的超平面。
SVM在实际使用中会出现几种情况
1、线性可分-硬间隔
当训练数据线性可分时,通过硬间隔最大化可以学习得到一个线性分类器,即硬间隔SVM,如上图的的H3。
2、线性SVM-软间隔
有可能出现线性不可分的情况,解决该问题的一个办法是允许SVM在少量样本上出错,即将之前的硬间隔最大化条件放宽一点
3、非线性SVM-核技巧
前面介绍的都是线性问题,但是我们经常会遇到非线性的问题(例如异或问题),此时就需要用到核技巧(kernel trick)将线性支持向量机推广到非线性支持向量机:用一个变换将原空间的数据映射到新空间(例如更高维甚至无穷维的空间);然后在新空间里用线性方法从训练数据中学习得到模型。
SVM和KNN都是分类模型,但不同的是SVM更有实用性;SVM跟决策树一样给出了一个标准-分类界面,这个标准可以直接使用进行分类判断,而KNN需要和已分类数据进行比较,计算量大;
AdaBoost元算法
通过组合多个弱分类器来构建一个强分类器。
我们为训练数据中的每一个样本都赋予其一个权重,这些权重构成了向量D,一开始,这些权重都初始化成相等值,然后每次添加一个弱分类器对样本进行分类,从第二次分类开始,将上一次分错的样本的权重提高(对之前的错误更敏感),分对的样本权重降低,持续迭代。
此外,对于每个弱分类器而言,每个分类器也有自己的权重,取决于它分类的加权错误率,加权错误率越低,则这个分类器的权重值α越高,最后综合多个弱分类器的分类结果和其对应的权重α得到预测结果
这样下来,每个分类器犯错的地方都会有其他更多的分类器进行纠正,每一个样本背后都有大量的分类器可以正确判断,综合起来利用群体的力量做正确的事儿,不能说是各取所长,更像是避其所短;
无监督学习
K-均值聚类算法
聚类算法,是把距离作为特征,通过距离对比的迭代方式,快速地把一群样本分成几个类别的过程。
1、在样本中随机选择K个点,作为每个类别的初始中心点,这K是自己定的,假如你想将样本分成3个类K就等于3,4个类K就等于4;
2、计算所有样本离这K个初始中心点的距离并分别进行比较,选出其中最近的距离并把这个样本归到这个初始中心点的类别里,即总共划分成K个类别;
3、舍弃原来的初始中心点,在划分好的K个类别里分别计算出新的中心点,使得这些中心点距离类别里的所有样本的距离之和最小;
4、判断新获得的中心点是否与旧中心点一样,如不一样则回到第2步,重新计算所有样本离这K个新的中心点的距离并进行比较,选出其中最近的距离并归到这个新的中心点的类别里,继续下面的步奏;如一样聚类完成收敛。