主要总结一下数据挖掘十大经典算法,包括各自优缺点, 适用数据场景,做个小笔记,分享一下
数据挖掘主要分为分类算法,聚类算法和关联规则三大类,这三类基本上涵盖了目前商业市场对算法的所有需求。而这三类里又包含许多经典算法。用简单的大白话来介绍数据挖掘十大经典算法原理
算法分类
连接分析:PageRank
关联分析:Apriori
分类算法:C4.5,CART,朴素贝叶斯,SVM,KNN,Adaboost
聚类算法:K-Means,EM
conda config --add channels https://pypi.mirrors.ustc.edu.cn/simple/
一、PageRank
推荐:
以网页之间的超链接个数和质量作为主要因素分析网页的重要性
Pagerank核心思想,顺带了解两个基础概念(入链、出链):
1、如果一个网页被很多其它网页链接到(入链),说明这个网页很重要,它的PageRank值也会相应较高;
2、如果一个PageRank值很高的网页链接到另外某个网页(出链),那么那个网页的PageRank值也会相应地提高。
原理:
网页影响力=阻尼影响力+所有入链页面的加权影响力之和
- 一个网页的影响力:所有入链的页面的加权影响力之和。
- 一个网页对其他网页的影响力贡献为:自身影响力/出链数量。
- 阻尼影响力:无法通过入链页面的影响力计算的影响力,通过阻尼系数计算
阻尼系数q ,来源于特殊情况(没有出链的网页或者用户直接从地址栏输入访问),其意义是,在任意时刻,用户到达某页面后并继续向后浏览的概率。 1- q= 0.15就是用户停止点击,随机跳到新URL的概率。
类似的思想衍生出TextRank、TF-IDF(词频-逆文档频率)
TF词频:某个词在文章中的出现次数/文章总次数
IDF逆文档频率:log(语料库文档总数/包含该词的文档数+1)
TF-IDF的主要思想:字词的重要性随着它在文件中出现的次数成正比增加(TF),同时随着它在语料库中出现的频率成反比下降(IDF)。如果某个单词在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
二、Apriori(关联分析)
最有影响的挖掘数据的关联规则,频繁项集的算法。(啤酒尿布例子)
频繁项集:经常一起出现的物品的集合
关联规则:两种物品之间可能存在很强的关系
原理:
1、支持度
某个物品组合(项集)出现的次数与总次数之间的比例
2、置信度
A发生的情况下B发生的概率是多少
3、提升度
衡量物品A的出现,对物品B的出现概率提升的程度
提升度(A>B) = 置信度(A>B) / 支持度(B)
提升度>1,有提升;提升度=1,无变化;提升度<1,下降
三、C4.5
属于分类决策树算法,其核心是ID3算法. C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进:
- 克服了用信息增益选择属性时偏向选择取值多的属性的不足,用信息增益率来选择属性;
(信息增益率:增益度量和分裂信息度量) - 在树构造过程中进行剪枝;
- 能够完成对连续属性的离散化处理;
- 能够对不完整数据进行处理。
四、CART
Classification And Regression Tree分类回归树,即可做分类树也可做回归树。
分类树:处理离散数据,也就是数据种类有限的数据,输出的是样本的类别。如:预测明天是阴、晴还是雨
回归树:可以对连续型的数值进行预测,输出的是一个数值,数值在某个区间内都有取值的可能。如:预测明天的气温是多少度
CART是一棵二叉树
当CART是分类树时,与C4.5算法类似,只是采用 基尼系数 作为节点分裂的依据
CART在构造分类树的时候会选择基尼系数最小的属性作为属性的划分。
基尼系数:反应了样本的不确定度,基尼系数越小,说明样本之间的差异性小,不确定程度低。
当CART是回归树时,采用样本的最小方差值作为节点分裂的依据
五、SVM
在区分样本点,同时,努力保证边界样本点到分类器的距离尽可能远,这意味着两个类别之间的距离放大,更容易区分
原理
找到具有最小间隔的样本点,然后拟合出一个到这些样本点距离和最大的线段/平面。
硬间隔:数据是线性分布的情况,直接给出分类。
软间隔:设置容错率,允许一定量的样本分类错误。
核函数:非线性分布的数据映射为线性分布的数据。
六、KNN
通过测量不同特征值之间的距离来进行分类(监督学习)
原理
计算待分类物体与其他物体之间的距离,对于K个最近的邻居,所占数量最多的类别,预测为该分类对象的类别。
计算步骤
1、根据场景,定义空间(欧式空间)和选取距离计算方式
2、计算待分类物体与其他物体之间的距离。
3、统计距离最近的K个邻居。
4、找到K个最近的邻居,所占数量最多的类别,预测为该分类对象的类别。
缺点:1、当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数;2、计算量较大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点;3、可理解性差,无法给出像决策树那样的规则
七、AdaBoost
原理:
用多个弱分类器训练成一个强分类器
将一系列的弱分类器以不同的权重比组合作为最终分类选择
计算过程
1、初始化训练数据(每个样本)的权值分布:如果有N个样本,则每一个训练的样本点最开始时都被赋予相同的权重:1/N。
2、训练弱分类器。在训练过程中,如果某个样本已经被准确地分类,那么在构造下一次训练集中,它的权重就被降低;相反,如果某个样本点没有被准确地分类,那么它的权重就得到提高。同时,得到这次弱分类器对应的权重。然后,更新权值后的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去,直到到达预设置的弱分类器的数量
3、将各个训练得到的弱分类器组合成强分类器。各个弱分类器的训练过程结束后,分类误差率小的弱分类器的话语权较大,其在最终的分类函数中起着较大的决定作用,而分类误差率大的弱分类器的话语权较小,其在最终的分类函数中起着较小的决定作用。换言之,误差率低的弱分类器在最终分类器中占的比例较大,反之较小。
八、朴素贝叶斯
朴素贝叶斯的朴素在于各个特征之间相互独立(如:高富帅,白富美)
朴素贝叶斯的原理:根据一些先验概率计算Y变量属于某个类别的后验概率
P(A):先验概率,即在B事件发生之前,对A事件概率的一个判断。
P(B|A):条件概率,又叫似然概率,事件 B 在另外一个事件 A 已经发生条件下的发生概率。
P(A|B):后验概率,即在B事件发生之后,对A事件概率的重新评估
P(A|B) = P(B|A) P(A) / P(B)
一个通俗的理解:求出了P(瓜熟 | 瓜蒂脱落) 即后验概率,表示在“瓜蒂脱落”的条件下,“瓜熟”的概率,那么如何求得在“瓜熟”的情况下,“瓜蒂脱落”的概率呢。
P(瓜熟|瓜蒂脱落)=P(瓜蒂脱落|瓜熟) P(瓜熟) / P(瓜蒂脱落)
九、K-Means
属于聚类算法,把n的对象根据他们的属性分为k个分割,k < n。与处理混合正态分布的最大期望算法很相似,因为他们都试图找到数据中自然聚类的中心。它假设对象属性来自于空间向量,并且目标是使各个群组内部的均 方误差总和最小(无监督学习)
原理:
1、随机从数据集中选取K个样本当做质心
2、对于数据集中的每个点,计算距离每个质心的距离,并把它归为距离最近的那个cluster
3、更新新的质心位置
4、重复2、3,直到质心不再改变
优点:无监督学习,不需要标注数据
缺点:1、性能不如监督学习,2、k的选择极大影响分类的效果,3、对于样本的分布也很敏感
十、EM
极大似然估计
假设我们需要调查我们学校学生的身高分布。我们先假设学校所有学生的身高服从正态分布 [公式] 。(注意:极大似然估计的前提一定是要假设数据总体的分布,如果不知道数据分布,是无法使用极大似然估计的),这个分布的均值 和方差未知,如果我们估计出这两个参数,那我们就得到了最终的结果。那么怎样估计这两个参数呢?
前提条件有几个问题:
问题一:抽到这200人的概率是多少?
每个样本都是独立抽取,没有关系,相互独立,抽到200个学生的概率就是每个人的概率乘积,即为联合概率
这里为什么要取对数?
1、取对数之后累积变为累和,求导更加方便
2、概率累积会出现数值非常小的情况,比如1e-30,由于计算机的精度是有限的,无法识别这一类数据,取对数之后,更易于计算机的识别(1e-30以10为底取对数后便得到-30)。问题二:学校那么多学生,为什么就恰好抽到了这 200 个人 ( 身高) 呢?
问题三:那么怎么极大似然函数?
极大似然估计总结:
可以把极大似然估计看作反推,先知道结果,再去寻求出现这个结果可能性最大的条件,用作估计值。
假如不知道学校男女比例,你走在路上,碰到100个人,发现男生就有90个 (结果),这时候你可以推断这个学校的男女比例更有可能为 9:1 (条件),这就是极大似然估计。
极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。用已知某个随机样本满足某种概率分布,但其中具体的参数不清楚,通过若干次试验,观察其结果,利用结果推出参数的大概值。
极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率极大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。
求极大似然函数估计值的一般步骤:
(1)写出似然函数;
(2)对似然函数取对数,并整理;
(3)求导数,令导数为 0,得到似然方程;
(4)解似然方程,得到的参数。
极大似然函数的应用
应用一 :回归问题中的极小化平方和 (极小化代价函数)
最小二乘估计:最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值和观测值之差的平方和最小
求解方法是通过梯度下降算法,训练数据不断迭代得到最终的值。
极大似然法:最合理的参数估计量应该使得从模型中抽取 m 组样本观测值的概率极大,也就是似然函数极大,就是极大似然函数等价于极小化代价函数。
这时可以发现,此时的极大化似然函数和最初的最小二乘损失函数的估计结果是等价的。但是要注意这两者只是恰好有着相同的表达结果,原理和出发点完全不同
应用二:分类问题中极小化交叉熵 (极小化代价函数)
在分类问题中,交叉熵的本质就是似然函数的极大化,极大似然函数又等价于极小化代价函数
另外开一篇博客写《极大似然估计与最小化交叉熵损失或者KL散度为什么等价》,这是一个有趣的话题
EM算法
上面的问题升级一下,原来的假设学校所有学生的身高服从正态分布,为了更贴近实际情况,男生和女生是分别服从两种不同的正态分布,那么该怎样评估学生的身高分布呢?
(注意:EM算法和极大似然估计的前提是一样的,都要假设数据总体的分布,如果不知道数据分布,是无法使用EM算法的)。
方案就是,随便抽出100个男的和100个女的,分别进心极大似然估计,但是我们是要求所有学生的身高正态分布,所以要整体抽取,但是抽取得到的每个样本都不知道是从哪个分布来的。那怎么办呢?
EM考虑的问题就变成两个了,一个是样本是男是女,二是男女对应的身高正态分布参数是多少,这两个问题相互依赖:
1、知道了男女,可以用极大似然对男女各自的身高分布进行估计
2、反之,知道了男女的分布参数,才知道这个样本可能是男生还是女生
这样相互循环依赖,总要打破僵局,先初始化一个值,再不停变化,迭代着不断互相推导,最终收敛一个解
EM的意思是“Expectation Maximization”,具体方法为:
1、先设定男生和女生的身高分布参数(初始值)
2、然后计算出每个人更可能属于第一个还是第二个正态分布中的(例如,这个人的身高是180,那很明显,他极大可能属于男生),这个是属于Expectation 一步;
3、我们已经大概地按上面的方法将这 200 个人分为男生和女生两部分,我们就可以根据之前说的极大似然估计分别对男生和女生的身高分布参数进行估计(这不变成了极大似然估计了吗?极大即为Maximization)这步称为 Maximization;
4、然后,当我们更新这两个分布的时候,每一个学生属于女生还是男生的概率又变了,那么我们就再需要调整E步;
……如此往复,直到参数基本不再发生变化或满足结束条件为止。