互信息算法
① 全面归纳距离和相似度计算方法
距离(distance,差异程度)、相似度(similarity,相似程度)方法可以看作是以某种的距离函数计算元素间的距离,这些方法作为机器学习的基础概念,广泛应用于如:Kmeans聚类、协同过滤推荐算法、相似度算法、MSE损失函数等等。本文对常用的距离计算方法进行归纳以及解析,分为以下几类展开:
对于点x=(x1,x2...xn) 与点y=(y1,y2...yn) , 闵氏距离可以用下式表示:
闵氏距离是对多个距离度量公式的概括性的表述,p=1退化为曼哈顿距离;p=2退化为欧氏距离;切比雪夫距离是闵氏距离取极限的形式。
曼哈顿距离 公式:
欧几里得距离公式:
如下图蓝线的距离即是曼哈顿距离(想象你在曼哈顿要从一个十字路口开车到另外一个十字路口实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源,也称为城市街区距离),红线为欧几里得距离:
切比雪夫距离起源于国际象棋中国王的走法,国际象棋中国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1,y1)走到B格(x2,y2)最少需要走几步?你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。有一种类似的一种距离度量方法叫切比雪夫距离。
切比雪夫距离就是当p趋向于无穷大时的闵氏距离:
距离函数并不一定是距离度量,当距离函数要作为距离度量,需要满足:
由此可见,闵氏距离可以作为距离度量,而大部分的相似度并不能作为距离度量。
闵氏距离也是Lp范数(如p==2为常用L2范数正则化)的一般化定义。
下图给出了一个Lp球( ||X||p = 1 )的形状随着P的减少的可视化图:
距离度量随着空间的维度d的不断增加,计算量复杂也逐增,另外在高维空间下,在维度越高的情况下,任意样本之间的距离越趋于相等(样本间最大与最小欧氏距离之间的相对差距就趋近于0),也就是维度灾难的问题,如下式结论:
对于维度灾难的问题,常用的有PCA方法进行降维计算。
假设各样本有年龄,工资两个变量,计算欧氏距离(p=2)的时候,(年龄1-年龄2)² 的值要远小于(工资1-工资2)² ,这意味着在不使用特征缩放的情况下,距离会被工资变量(大的数值)主导, 特别当p越大,单一维度的差值对整体的影响就越大。因此,我们需要使用特征缩放来将全部的数值统一到一个量级上来解决此问题。基本的解决方法可以对数据进行“标准化”和“归一化”。
另外可以使用马氏距离(协方差距离),与欧式距离不同其考虑到各种特性之间的联系是(量纲)尺度无关 (Scale Invariant) 的,可以排除变量之间的相关性的干扰,缺点是夸大了变化微小的变量的作用。马氏距离定义为:
马氏距离原理是使用矩阵对两两向量进行投影后,再通过常规的欧几里得距离度量两对象间的距离。当协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离;如果协方差矩阵为对角阵,其也可称为正规化的欧氏距离。
根据向量x,y的点积公式:
我们可以利用向量间夹角的cos值作为向量相似度[1]:
余弦相似度的取值范围为:-1~1,1 表示两者完全正相关,-1 表示两者完全负相关,0 表示两者之间独立。余弦相似度与向量的长度无关,只与向量的方向有关,但余弦相似度会受到向量平移的影响(上式如果将 x 平移到 x+1, 余弦值就会改变)。
另外,归一化后计算欧氏距离,等价于余弦值:两个向量x,y, 夹角为A,欧氏距离D=(x-y)^2 = x 2+y 2-2|x||y|cosA = 2-2cosA
协方差是衡量多维数据集中,变量之间相关性的统计量。如下公式X,Y的协方差即是,X减去其均值 乘以 Y减去其均值,所得每一组数值的期望(平均值)。
如果两个变量之间的协方差为正值,则这两个变量之间存在正相关,若为负值,则为负相关。
皮尔逊相关系数数值范围也是[-1,1]。皮尔逊相关系数可看作是在余弦相似度或协方差基础上做了优化(变量的协方差除以标准差)。它消除每个分量标准不同(分数膨胀)的影响,具有平移不变性和尺度不变性。
卡方检验X2,主要是比较两个分类变量的关联性、独立性分析。如下公式,A代表实际频数;E代表期望频数:
Levenshtein 距离是 编辑距离 (Editor Distance) 的一种,指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
像hallo与hello两个字符串编辑距离就是1,我们通过替换”a“ 为 ”e“,就可以完成转换。
汉明距离为两个等长字符串对应位置的不同字符的个数,也就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:1011101 与 1001001 之间的汉明距离是 2,“toned” 与 “roses” 之间的汉明距离是 3
另外的,对于字符串距离来说,不同字符所占的份量是不一样的。比如”我乐了“ 与【“我怒了”,”我乐了啊” 】的Levenshtein 距离都是1,但其实两者差异还是很大的,因为像“啊”这种语气词的重要性明显不如“乐”,考虑字符(特征)权重的相似度方法有:TF-IDF、BM25、WMD算法。
Jaccard 取值范围为0~1,0 表示两个集合没有重合,1 表示两个集合完全重合。
但Dice不满足距离函数的三角不等式,不是一个合适的距离度量。
基础地介绍下信息熵,用来衡量一个随机变量的不确定性程度。对于一个随机变量 X,其概率分布为:
互信息用于衡量两个变量之间的关联程度,衡量了知道这两个变量其中一个,对另一个不确定度减少的程度。公式为:
如下图,条件熵表示已知随机变量X的情况下,随机变量Y的信息熵,因此互信息实际上也代表了已知随机变量X的情况下,随机变量Y的(信息熵)不确定性的减少程度。
JS 散度解决了 KL 散度不对称的问题,定义为:
群体稳定性指标(Population Stability Index,PSI), 可以看做是解决KL散度非对称性的一个对称性度量指标,用于度量分布之间的差异(常用于风控领域的评估模型预测的稳定性)。
psi与JS散度的形式是非常类似的,如下公式:
PSI的含义等同P与Q,Q与P之间的KL散度之和。
DTW 距离用于衡量两个序列之间的相似性,适用于不同长度、不同节奏的时间序列。DTW采用了动态规划DP(dynamic programming)的方法来进行时间规整的计算,通过自动warping扭曲 时间序列(即在时间轴上进行局部的缩放),使得两个序列的形态尽可能的一致,得到最大可能的相似度。(具体可参考[5])
图结构间的相似度计算,有图同构、最大共同子图、图编辑距离、Graph Kernel 、图嵌入计算距离等方法(具体可参考[4][6])。
度量学习的对象通常是样本特征向量的距离,度量学习的关键在于如何有效的度量样本间的距离,目的是通过训练和学习,减小或限制同类样本之间的距离,同时增大不同类别样本之间的距离,简单归类如下[2]:
最后,附上常用的距离和相似度度量方法[3]:
② 决策树(Decision Tree)
通俗来说,决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话:
女儿:多大年纪了?
母亲:26。
女儿:长的帅不帅?
母亲:挺帅的。
女儿:收入高不?
母亲:不算很高,中等情况。
女儿:是公务员不?
母亲:是,在税务局上班呢。
女儿:那好,我去见见。
这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见。假设这个女孩对男人的要求是:30岁以下、长相中等以上并且是高收入者或中等以上收入的公务员,图1表示了女孩的决策逻辑。
如果你作为一个女生,你会优先考虑哪个条件:长相?收入?还是年龄。在考虑年龄条件时使用25岁为划分点,还是35岁为划分点。有这么多条件,用哪个条件特征先做if,哪个条件特征后做if比较优呢?还有怎么确定用特征中的哪个数值作为划分的标准。这就是决策树机器学习算法的关键了。
首先,我们需要熟悉信息论中熵的概念。熵度量了事物的不确定性,越不确定的事物,它的熵就越大。具体的,随机变量X的熵的表达式如下:
如抛一枚硬币为事件 , , ,
掷一枚骰子为事件 , ,
,显然掷骰子的不确定性比投硬币的不确定性要高。
熟悉了单一变量的熵,很容易推广到多个个变量的联合熵,这里给出两个变量X和Y的联合熵表达式:
有了联合熵,又可以得到条件熵的表达式H(X|Y),条件熵类似于条件概率,它度量了我们在知道Y以后X剩下的不确定性。表达式:
我们刚才提到 度量了 的不确定性,条件熵 度量了我们在知道 以后 剩下的不确定性,那么 呢?它度量了 在知道 以后不确定性减少程度,这个度量我们在信息论中称为互信息,记为 。
信息熵 ,联合熵 ,条件熵 ,互信息 之间的关系由图2所示:
在决策树的ID3算法中,互信息 被称为信息增益。ID3算法就是用信息增益来判断当前节点应该用什么特征来构建决策树。信息增益大,则越适合用来分类。
下面我们用SNS社区中不真实账号检测的例子说明如何使用ID3算法构造决策树。为了简单起见,我们假设训练集合包含10个元素:
设L、F、H和D表示日志密度、好友密度、是否使用真实头像和账号是否真实,下面计算各属性的信息增益:
因此日志密度的信息增益是0.276。用同样方法得到H和F的信息增益分别为0.033和0.553。因为F具有最大的信息增益,所以第一次分裂选择F为分裂属性,分裂后的结果图3表示:
在上图的基础上,再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
但是ID3算法中还存在着一些不足之处:
1.ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途。
2.ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为 ,另一个变量为3个值,各为 ,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大。(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大)如河校正这个问题呢?为了解决这些问题我们有了C4.5算法。
对于第一个问题,不能处理连续特征, C4.5的思路是将连续的特征离散化。比如m个样本的连续特征A有m个,从小到大排列为 。则C4.5取相邻两样本值的平均数,一共取得m-1个划分点,其中第i个划分点 表示为: 。对于这m-1个点,分别计算以该点作为二元分类点时的信息增益。选择信息增益最大的点作为该连续特征的二元离散分类点。比如取到的增益最大的点为 ,取大于 为类别1,小于 为类别2。这样我们就做到了连续特征的离散化。
对于第二个问题,信息增益作为标准容易偏向于取值较多的特征。C4.5中提出了信息增益比:
即特征 的对数据集 的信息增益与特征 信息熵的比,信息增益比越大的特征和划分点,分类效果越好。某特征中值得种类越多,特征对应的特征熵越大,它作为分母,可以校正信息增益导致的问题。
回到上面的例子:
同样可得: , 。
因为F具有最大的信息增益比,所以第一次分裂选择F为分裂属性,分裂后的结果图3表示。
再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
看完上述材料,我们知道在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择。在C4.5算法中,采用了信息增益比来选择特征,以减少信息增益容易选择特征值种类多的特征的问题。但是无论是ID3还是C4.5,都是基于信息论的熵模型的,这里面会涉及大量的对数运算。能不能简化模型同时也不至于完全丢失熵模型的优点呢?有!CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。
在分类问题中,假设有 个类别,第 个类别的概率为 ,则基尼系数为:
对于给定的样本 ,假设有 个类别,第 个类别的数量为 ,则样本的基尼系数为:
特别的,对于样本D,如果根据特征A的某个值a,把D分成D1和D2两部分,则在特征A的条件下,D的基尼系数为:
回到上面的例子:
同理得: , 。
因为L具有最小的基尼系数,所以第一次分裂选择L为分裂属性。
再递归使用这个方法计算子节点的分裂属性,最终就可以得到整个决策树。
小伙伴们如果觉得文章还行的请点个赞呦!!同时觉得文章哪里有问题的可以评论一下 谢谢你!
③ 决策树(Decision Tree)
决策树是一种非参数有监督的机器学习方法,可以用于解决回归问题和分类问题。通过学习已有的数据,计算得出一系列推断规则来预测目标变量的值,并用类似流程图的形式进行展示。决策树模型可以进行可视化,具有很强的可解释性,算法容易理解,以决策树为基础的各种集成算法在很多领域都有广泛的应用。
熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,信息熵代表着一个事件或一个变量等所含有的信息量。 在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。
发生概率低的事件比发生概率高的事件具有更大的不确定性,需要更多的信息去描述他们,信息熵更高。
我们可以用计算事件发生的概率来计算事件的信息,又称“香农信息”( Shannon Information )。一个离散事件x的信息可以表示为:
h(x) = -log(p(x))
p() 代表事件x发生的概率, log() 为以二为底的对数函数,即一个事件的信息量就是这个事件发生的概率的负对数。选择以二为底的对数函数代表计算信息的单位是二进制。因为概率p(x)小于1,所以负号就保证了信息熵永远不为负数。当事件的概率为1时,也就是当某事件百分之百发生时,信息为0。
熵( entropy ),又称“香农熵”( Shannon entropy ),表示一个随机变量的分布所需要的平均比特数。一个随机变量的信息熵可以表示为:
H(x) = -sum(each k in K p(k)log(p(k)))
K表示变量x所可能具有的所有状态(所有事件),将发生特定事件的概率和该事件的信息相乘,最后加和,即可得到该变量的信息熵。可以理解为,信息熵就是平均而言发生一个事件我们得到的信息量大小。所以数学上,信息熵其实是事件信息量的期望。
当组成该随机变量的一个事件的概率为1时信息熵最小,为0, 即该事件必然发生。当组成该随机变量的所有事件发生的概率相等时,信息熵最大,即完全不能判断那一个事件更容易发生,不确定性最大。
当一个事件主导时,比如偏态分布( Skewed Probability Distribution ),不确定性减小,信息熵较低(low entropy);当所有事件发生概率相同时,比如均衡分布( Balanced Probability Distribution ),不确定性极大,信息熵较高(high entropy)。
由以上的香农信息公式可知,信息熵主要有三条性质:
- 单调性 。发生概率越高的事件,其所携带的信息熵越低。比如一个真理的不确定性是极低的,那么它所携带的信息熵就极低。
- 非负性 。信息熵不能为负。单纯从逻辑层面理解,如果得知了某个信息后,却增加了不确定性,这也是不合逻辑的。
- 可加性 。即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和。
若两事件A和B同时发生,两个事件相互独立。 p(X=A,Y=B) = p(X = A)*p(Y=B) , 那么信息熵为 H(A,B) = H(A) + H(B) 。但若两事件不相互独立,那么 H(A,B) = H(A) + H(B) - I(A,B) 。其中 I(A,B) 是互信息( mutual information,MI ),即一个随机变量包含另一个随机变量信息量的度量。即已知X的情况下,Y的分布是否会改变。
可以理解为,两个随机变量的互信息度量了两个变量间相互依赖的程度。X 和 Y的互信息可以表示为:
I(X;Y) = H(X) - H(X|Y)
H(X)是X的信息熵,H(X|Y)是已知Y的情况下,X的信息熵。结果的单位是比特。
简单来说,互信息的性质为:
- I(X;Y)>=0 互信息永远不可能为负
- H(X) - H(X|Y) = I(X;Y) = I (Y;X) = H(Y) - H(Y|X) 互信息是对称的
-当X,Y独立的时候, I(X;Y) = 0 互信息值越大,两变量相关性越强。
-当X,Y知道一个就能推断另一个的时候, I(X;Y) = H(Y) = H(X)
在数据科学中,互信息常用于特征筛选。在通信系统中互信息也应用广泛。在一个点到点的通信系统中,发送信号为X,通过信道后,接收端接收到的信号为Y,那么信息通过信道传递的信息量就是互信息 I(X,Y) 。根据这个概念,香农推导出信道容量(即临界通信传输速率的值)。
信息增益( Information Gain )是用来按照一定规则划分数据集后,衡量信息熵减少量的指数。
那数据集的信息熵又是怎么计算的呢?比如一个常见的0,1二分类问题,我们可以计算它的熵为:
Entropy = -(p(0) * log(P(0)) + p(1) * log(P(1)))
当该数据集为50/50的数据集时,它的信息熵是最大的(1bit)。而10/90的数据集将会大大减少结果的不确定性,减小数据集的信息熵(约为0.469bit)。
这样来说,信息熵可以用来表示数据集的纯度( purity )。信息熵为0就表示该数据集只含有一个类别,纯度最高。而较高的信息熵则代表较为平衡的数据集和较低的纯度。
信息增益是提供了一种可以使用信息熵计算数据集经过一定的规则(比如决策树中的一系列规则)进行数据集分割后信息熵的变化的方法。
IG(S,a) = H(S) - H(S|a)
其中,H(s) 是原数据集S的信息熵(在做任何改变之前),H(S|a)是经过变量a的一定分割规则。所以信息增益描述的是数据集S变换后所节省的比特数。
信息增益可以用做决策树的分枝判断方法。比如最常用CART树( Classification and Regression Tree )中的分枝方法,只要在python中设置参数 criterion 为 “entropy” 即可。
信息增益也可以用作建模前的特征筛选。在这种场景下,信息增益和互信息表达的含义相同,会被用来计算两变量之间的独立性。比如scikit-learn 中的函数 mutual_info_classiif()
信息增益在面对类别较少的离散数据时效果较好,但是面对取值较多的特征时效果会有 偏向性 。因为当特征的取值较多时,根据此特征划分得到的子集纯度有更大的可能性会更高(对比与取值较少的特征),因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。举一个极端的例子来说,如果一个特征为身份证号,当把每一个身份证号不同的样本都分到不同的子节点时,熵会变为0,意味着信息增益最大,从而该特征会被算法选择。但这种分法显然没有任何实际意义。
这种时候,信息增益率就起到了很重要的作用。
gR(D,A)=g(D,A)/HA(D)
HA(D) 又叫做特征A的内部信息,HA(D)其实像是一个衡量以特征AA的不同取值将数据集D分类后的不确定性的度量。如果特征A的取值越多,那么不确定性通常会更大,那么HA(D)的值也会越大,而1/HA(D)的值也会越小。这相当于是在信息增益的基础上乘上了一个惩罚系数。即 gR(D,A)=g(D,A)∗惩罚系数 。
在CART算法中,基尼不纯度表示一个随机选中的样本被分错类别的可能性,即这个样本被选中的概率乘以它被分错的概率。当一个节点中所有样本均为一种时(没有被分错的样本),基尼不纯度达到最低值0。
举例来说,如果有绿色和蓝色两类数据点,各占一半(蓝色50%,绿色50%)。那么我们随机分类,有以下四种情况:
-分为蓝色,但实际上是绿色(❌),概率25%
-分为蓝色,实际上也是蓝色(✔️),概率25%
-分为绿色,实际上也是绿色(✔️),概率25%
-分为绿色,但实际上是蓝色(❌),概率25%
那么将任意一个数据点分错的概率为25%+25% = 50%。基尼不纯度为0.5。
在特征选择中,我们可以选择加入后使数据不纯度减少最多的特征。
噪音数据简单来说就是会对模型造成误导的数据。分为类别噪声( class noise 或 label noise )和 变量噪声( attribute noise )。类别噪声指的的是被错误标记的错误数据,比如两个相同的样本具有不同的标签等情况。变量噪声指的是有问题的变量,比如缺失值、异常值和无关值等。
决策树其实是一种图结构,由节点和边构成。
-根节点:只有出边没有入边。包含样本全集,表示一个对样本最初的判断。
-内部节点:一个入边多个出边。表示一个特征或是属性。每个内部节点都是一个判断条件,包含数据集中从根节点到该节点所有满足条件的数据的集合。
-叶节点:一个入边无出边。表示一个类,对应于决策结果。
决策树的生成主要分为三个步骤:
1. 节点的分裂 :当一个节点不够纯(单一分类占比不够大或者说信息熵较大)时,则选择将这一节点进行分裂。
2. 决策边界的确定 :选择正确的决策边界( Decision Boundary ),使分出的节点尽量纯,信息增益(熵减少的值)尽可能大。
3. 重复及停止生长 :重复1,2步骤,直到纯度为0或树达到最大深度。为避免过拟合,决策树算法一般需要制定树分裂的最大深度。到达这一深度后,即使熵不等于0,树也不会继续进行分裂。
下面以超级知名的鸢尾花数据集举例来说明。
这个数据集含有四个特征:花瓣的长度( petal length )、花瓣的宽度( petal width )、花萼的长度( sepal length )和花萼的宽度( sepal width )。预测目标是鸢尾花的种类 iris setosa, iris versicolor 和 iris virginica 。
建立决策树模型的目标是根据特征尽可能正确地将样本划分到三个不同的“阵营”中。
根结点的选择基于全部数据集,使用了贪婪算法:遍历所有的特征,选择可以使信息熵降到最低、基尼不纯度最低的特征。
如上图,根节点的决策边界为' petal width = 0.8cm '。那么这个决策边界是怎么决定的呢?
-遍历所有可能的决策边界(需要注意的是,所有可能的决策边界代表的是该子集中该特征所有的值,不是以固定增幅遍历一个区间内的所有值!那样很没有必要的~)
-计算新建的两个子集的基尼不纯度。
-选择可以使新的子集达到最小基尼不纯度的分割阈值。这个“最小”可以指两个子集的基尼不纯度的和或平均值。
ID3是最早提出的决策树算法。ID3算法的核心是在决策树各个节点上根据 信息增益 来选择进行划分的特征,然后递归地构建决策树。
- 缺点 :
(1)没有剪枝
(2)只能用于处理离散特征
(3)采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征(例如,如果存在唯一标识属性身份证号,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。)
C4.5 与ID3相似,但对ID3进行了改进:
-引入“悲观剪枝”策略进行后剪枝
-信息增益率作为划分标准
-将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
-可以处理缺失值
对于缺失值的处理可以分为两个子问题:
(1)在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
C4.5 中对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
(2)选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
C4.5 的做法是将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。
(1)剪枝策略可以再优化;
(2)C4.5 用的是多叉树,用二叉树效率更高;
(3)C4.5 只能用于分类;
(4)C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
(5)C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。
可以用于分类,也可以用于回归问题。CART 算法使用了基尼系数取代了信息熵模型,计算复杂度更低。
CART 包含的基本过程有 分裂,剪枝和树选择 。
分裂 :分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
剪枝 :采用“代价复杂度”剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
树选择 :用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。
(1)C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
(2)C4.5 只能分类,CART 既可以分类也可以回归;
(3)CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
(4)CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
(5)CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。
(1)决策树易于理解和解释,可以可视化分析,容易提取出规则
(2)可以同时处理分类型和数值型数据
(3)可以处理缺失值
(4)运行速度比较快(使用Gini的快于使用信息熵,因为信息熵算法有log)
(1)容易发生过拟合(集成算法如随机森林可以很大程度上减少过拟合)
(2)容易忽略数据集中属性的相互关联;
(3)对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向。
写在后面:这个专辑主要是本小白在机器学习算法学习过程中的一些总结笔记和心得,如有不对之处还请各位大神多多指正!(关于决策树的剪枝还有很多没有搞懂,之后弄明白了会再单独出一篇总结哒)
参考资料链接:
1. https://machinelearningmastery.com/what-is-information-entropy/
2. https://zhuanlan.hu.com/p/29679277
3. https://machinelearningmastery.com/information-gain-and-mutual-information/
4. https://victorzhou.com/blog/gini-impurity/
5. https://sci2s.ugr.es/noisydata
6. https://towardsdatascience.com/understanding-decision-trees-once-and-for-all-2d891b1be579
7. https://blog.csdn.net/weixin_36586536/article/details/80468426
8. https://zhuanlan.hu.com/p/85731206
④ 求信息熵的计算方法!!
H(x)=lb,应该是求平均互信息熵。
熵的计算
⑤ 聚类算法(上)06
这篇文章的整体排版主要是根据个人的博客来哒,如果感兴趣的话可以去我的自己搭建的个人博客看这篇 文章 。
聚类算法很多,所以和讲回归算法一样,分成了上下,上中主要讲了传统的K-Means算法以及其相应的优化算法入K-Means++,K-Means||和Canopy等。下中主要讲了另外两种的思路的聚类算法,即层次聚类和密度聚类。
聚类算就是怼大量未知标注的数据集,按照数据 内部存在的数据特征 将数据集 划分为多个不同的类别 ,使类别内的数据比较相似,类别之间的数据相似度比较小,属于 无监督学习 。
从定义就可以看出,聚类算法的关键在于计算样本之间的 相似度 ,也称为 样本间的距离 。
说到聚类算法,那肯定核心就是计算距离的公式了,目前常用的有以下几种。
闵可夫斯基距离(Minkowski) :公式2.1
KL距离(相对熵) :
思考下条件熵的定义,简单的来说就是在放生一件事情的时候,发生另一件事的概率。公式如下公式2.7.
注:这里书的概率不是实指概率,而是熵表达的含义。这个公式其实就是条件熵的公式。
杰卡德相似系数(Jaccard) :
这个很好理解,它的核心就是使用两个集合的交集和并集的比率来代表两者的相似度,也就是说重合的越多越相似。公式如下,公式2.8.
Pearson相关系数 :
这个就是考研数学中的相关系数,表达就是两者之间的想关系,所以直接拿来用就好了,公式如下公式2.9。
给定一个有M个对象的数据集,构建一个具有k个簇的模型,其中k<=M。满足 以下条件:
基本思想:
对于给定的类别数目k,首先给定初始划分,通过迭代改变样本和簇的隶属关系,使的每次处理后得到的划分方式比上一次的好,即 总的数据集之间的距离和变小了
K-means的核心算法如下:
再循环中的第二步,我们移动了中心点的位置,把中心点移到了隶属于该中心点类别的所有样本的中间,并使用样本的均值作为位置。这样子看似是拍脑袋想的移动策略,其实是可以推导出来的。正如聚类算法思想所指出的,我们要让所有的点到自己的分类的中心点的欧几里得距离最小,所以我们设置目标放称为公式4.1,公式中的1/2是为了之后求导运算方便。我们为了让目标函数尽可能的小,所以使用了之前一直在使用的思考方式,对其使用梯度下降算法,求导后得到公式4.2,之后令其等于0,就得到了公式4.3。
最后这个看似不错的算法,其实有着不小的缺点,那就是 初值敏感 。我们来仔细想一想,如果两个不小心随机生成的初值落到了一个类别中,两者的距离还特别近,这中情况下就很难正确分类了。除此之外,由于移动策略中使用的是均值,也就是说如果集合中含有非常大的误差点的话,这样子会是中心点的设置偏离正确点很远,所以很多时候我们改用 中值来更新中心点 ,这就是我们说的K-Mediods聚类,即K中值聚类。
总结下K-means算法
优点:
由于K-Means对初始中心点非常敏感,我们这里就尝试着通过二分法弱化初始中心点。这种算法的具体步骤如下:
我们在这个算法中提到了SSE,这个可以是簇内所有样本点,到其中心点的距离的总和,代表着簇内的点是不是高度相关。计算公式如下公式4.4。
可以看出在这种算法下,很好的避开了,两个中心点都在一起的情况。
K-Means++做的改善,是直接对初始点的生成位置的选择进行优化的,他的初始点生成策略如下:
Canopy属于一种“粗略地”聚类算法,简单的来说就是,不那么追求自动获得最优解,而是引入了一种人为规定的先验值进行聚类,具体步骤如下:
注:Canopy算法得到的最终结果的值,聚簇之间是可能存在重叠的,但是不会存在 某个对象不属于任何聚簇的情况
显然,这种算法虽然快,但是很难生成满足我们应用的模型,所以通常我们将它作为解决K-Means初值敏感的方案,他们合在一起就是Canopy+K-Means算法。
顺序就是先使用Canopy算法获得K个聚类中心,然后用这K个聚类中心作为K-Means算法。这样子就很好的解决了K-Means初值敏感的问题。
Mini Batch K-Means算法是K-Means算法的一种优化变种,采用小规模的数据子集,来减少计算时间。其中采用小规模的数据子集指的是每次训练使用的数据集是在训练算法的时候随机抽取的数据子集。Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。
它的算法步骤如下:
聚类算法的衡量标准有很多,包括均一性、完整性、V-measure、调整兰德系数(ARI ,Adjusted Rnd Index)、调整互信息(AMI,Adjusted Mutual Information)以及轮廓系数等等。
均一性:一个簇中只包含一个类别的样本,则满足均一性。其实也可以认为就是正确率,即每个聚簇中正确分类的样本数占该聚簇总样本数的比例和。其公式如下公式5.1。
完整性:同类别样本被归类到相同簇中,则满足完整性。每个聚簇中正确分类的样本数占该类型的总样本数比例的和,通俗的来说就是,我们已分类类别中,分类正确的个数。
其公式如下,公式5.2:
在实际的情况中,均一性和完整性是往往不能兼得的,就好像抓特务时的矛盾一样,到底是保证每个抓的人都是特务,还是宁可错抓也不放过一个特务,之间的取舍很难把握。所以再一次贯彻,鱼和熊掌不可兼得,我们就加权,于是得到的就是V-measure,其公式如下公式5.3:
兰德系数(RI,Rand index) ,我用中文看了不少讲兰德系数的博客,其中的文字说明几乎都是相同的,对个人的理解帮助不是特别大,于是用英文查的。最终理解了这个系数的参数的意思,想看英文说明的,个人觉得还挺好懂的参考 这里 。以下是我个人的讲解。
首先,将原数据集中的元素进行两两配对形成一个新的数据集,我们称之为S数据集。这时候,我们将原数据集,根据两种不同的策略分别划分成r份和s份,并对这两个数据集命名为X和Y。在这里我们可以看出,X和Y的元素是相同的,只是他们的划分方式不同。
接下来我们来思考,S数据集中,每个元素中的两个样本,在X和Y中只有两种可能,就是两个样本都在一个子集中,或者不在一个子集中,那么对于S中的一个元素,只有四种可能性。
接下来引入, 调整兰德系数(ARI,Adjusted Rnd Index) ,ARI取值范围 ,值越大,表示聚类结果和真实情况越吻合。从广义的角度来将,ARI是衡量两个数据分布的吻合程度的,公式5.5如下:
调整互信息,整体的流程很像ARI,AMI则是对MI进行调整。而MI是使用信息熵来描述的。那么互信息表示了什么呢,首先先看下 维基网络的定义 :
之前我们说到的衡量指标都是有标签的,这里的轮廓系数则是不包含标签的评价指标。