【有监督学习】积累与发现

线性回归

最小二乘法小结

如何梯度下降呢?损失函数我放这了 J ( θ ) = 1 2 ( X θ − Y ) T ( X θ − Y ) J(\mathbf\theta) = \frac{1}{2}(\mathbf{X\theta} - \mathbf{Y})^T(\mathbf{X\theta} - \mathbf{Y}) J(θ)=21(XθY)T(XθY),爱会不会

感知机

感知机原理小结

在《统计学习方法》中,定义的方式有一些不同,如下图所示
【有监督学习】积累与发现_第1张图片
书中所提到了“不考虑 1 ∥ w ∥ \frac{1}{\|w\|} w1”,实际意思是说不会影响解,
对于最小化问题 − 1 ∥ w ∥ ∑ y i ( w x i + b ) -\frac {1} {\|w\|}\sum y_i(wx_i+b) w1yi(wxi+b)来说,如果我们添加一个条件 ∥ w ∥ = 1 \|w\|=1 w=1后(注意,添加这个条件之后,并不会对原问题的意义进行改变,仍然是在找经验误差最小的分类面,但加入说要是假设分子为1,那这个优化问题的意义就改变了),优化问题变成了 − 1 1 ∑ y i ( w x i + b ) -\frac {1} {1}\sum y_i(wx_i+b) 11yi(wxi+b),得到一组解 w 1 = [ w 11 , w 12 . . . ] , b 1 w_1=[w_{11},w_{12}...],b_1 w1=[w11,w12...],b1;然后把这个条件改成 ∥ w ∥ = 2 \|w\|=2 w=2后,优化问题变成了 − 1 2 ∑ y i ( w x i + b ) -\frac {1} {2}\sum y_i(wx_i+b) 21yi(wxi+b),得到了第二组解 w 2 = [ w 21 , w 22 . . . ] , b 2 w_2=[w_{21},w_{22}...],b_2 w2=[w21,w22...],b2,很容易能看出这两个优化问题是完全相同的,并且第一组解和第二组解的对应项的比例是相同的,比如 w 11 w 21 = w 21 w 22 = b 1 b 2 = 1 2 \frac{w_{11}}{w_{21}}=\frac{w_{21}}{w_{22}}=\frac{b_{1}}{b_{2}}=\frac{1}{2} w21w11=w22w21=b2b1=21,也就是说不仅两个优化问题的最终大小一样,所代表的的分类面也一样
进而能说明的是,即使不对 w w w进行约束,无论 w w w在优化过程中会怎样变化,最终的解所代表的分类面也都是唯一的,反正最终的最优解中 ∥ w ∥ \|w\| w都是一个常数 a a a
另外刘建平的博客里有另一种解释方法,即把样本所处的n维特征空间扩充为n+1维,就是把那个常数1也当做特征的一个维度,样本就从 x = [ x 1 , x 2 , . . . ] x=[x_1,x_2,...] x=[x1,x2,...]变成了 x = [ 1 , x 1 , x 2 , . . . ] x=[1,x_1,x_2,...] x=[1,x1,x2,...],并且参数空间也从n维扩充到了n+1维,参数就从 w , b w,b w,b变成了 θ = [ b , w ] \theta=[b,w] θ=[b,w],于是点到新空间的分类面的距离就变成了 θ x ∥ θ ∥ \frac{\theta x}{\|\theta\|} θθx,所以无论 θ \theta θ是多大都不影响最终的解。因为当求得了 J ( θ ) = ∑ x ∈ M θ T x J(\theta)=\sum_{x\in M}\theta^Tx J(θ)=xMθTx的最小值后,这个的解就是原问题的解

最近邻

详解KDTree

查找的时候,先看兄弟节点和自己节点的交界面(垂直于轴的)距离,小于当前最小距离,那就到兄弟里找,然后再看和父节点的兄弟有没有相交。

《机器学习实战》学习笔记——基于sklearn使用 KNN

用balltree找某个目标点target的所属的时候,我猜应该是从上往下依次比较target点距离左球与右球的球心的距离,距离哪个球心更近,就走哪条路径

Logistics

逻辑斯蒂回归(Logistic Regression)

永远记住, P ( y = 1 ∣ X , w ) = e w T x 1 + e w T x P(y=1|X,w)=\frac{e^{w^Tx}}{1+e^{w^Tx}} P(y=1X,w)=1+ewTxewTx,是因为二分类问题中一般 f ( x ) > 0 f(x)>0 f(x)>0就判定为 y ^ = 1 \hat{y}=1 y^=1,另外LR二分类模型中,样本类别是{0,1},其实也可以是别的,只不过这样好定义损失函数。
上面博客有错误,对似然函数最大化应该是梯度上升而不是下降
d σ d a = σ ( a ) ( 1 − σ ( a ) ) \frac{d\sigma}{da}=\sigma(a)(1-\sigma(a)) dadσ=σ(a)(1σ(a))

Logistic回归和Softmax回归理解

求解一样是写似然, L ( θ 1 , . . . , θ k ) = ∏ i = 1 n ∏ j = 1 k I { y i = j } p ( y i = j ∣ x i ) L(\theta_1,...,\theta_k)=\prod_{i=1}^n \prod_{j=1}^k I\{y_i=j\}p(y_i=j|x_i) L(θ1,...,θk)=i=1nj=1kI{yi=j}p(yi=jxi) k k k为类别数目,LR处理多分类,要么one vs one,one vs all或者直接用softmax回归

SVM

SMO优化算法(Sequential minimal optimization)
支持向量机通俗导论(理解SVM的三层境界)

理解函数距离 y ( w T x + b ) y(w^Tx+b) y(wTx+b)的含义,如果当前分类面能正确分类,呢嘛这个值就是正的,如果分类错误,这个值就是负的,因此我们希望找到一个分类面,能够让函数距离的最小值尽可能的大,于是就可以引出下面的核心。
支持向量机的核心:支持向量机的模型构建意义是找到一个分类超平面,能够把特征空间中的样本全部正确分类的同时,保证距离分类超平面最近的样本能够尽可能远离这个分类超平面,距离的评估用的是几何间隔,于是就有了如下优化问题(称这个优化问题为问题A),其中 r ^ \hat{r} r^就是距离分类超平面最近的样本(支持向量)距离分类平面的函数距离,并且在线性可分的情况下,超平面两侧的支持向量的到超平面的距离相同,都是 r ^ \hat{r} r^
问 题 A : max ⁡ w , b r ^ ∥ w ∥ , s . t .   y i ( w T x i + b ) ≥ r ^ 问题A:\max_{w,b} \frac{\hat{r}}{\|w\|},s.t.\ y_i(w^Tx_i+b)\ge\hat{r} A:w,bmaxwr^,s.t. yi(wTxi+b)r^

并且同时,无论这个距离分类超平面最近的样本是样本集中的哪个点、位置在哪,都将这个点到达分类超平面的函数距离设置为1,于是原问题就变成了新的优化问题(称这个优化问题为问题B 问 题 B : max ⁡ w , b 1 ∥ w ∥ , s . t .   y i ( w T x i + b ) ≥ 1 问题B:\max_{w,b} \frac{1}{\|w\|},s.t.\ y_i(w^Tx_i+b)\ge1 B:w,bmaxw1,s.t. yi(wTxi+b)1

可以从如下两个角度来理解:第一,函数间隔的大小收到点与分类面的相对位置和分类超平面的参数的两方面的影响,一旦支持向量确定,那么更改分类超平面的参数就会等比例的放大或者缩小函数间隔,而这个函数间隔的变化并不会让分类超平面变化。第二,设置距离分类超平面最近的样本到平面的函数间隔为1,其实类似于在设置单位,训练集一旦确定,分类面也一定是确定的
这里我想给出我自己的理解方法,在问题A的基础上人为添加一个条件 r ^ = 1 \hat{r}=1 r^=1,得到如下优化问题,称之为问题C,很容易知道问题C的解可能不是问题A的解,但这两个问题代表的超平面一定是同一个超平面
问 题 C : max ⁡ w , b r ^ ∥ w ∥ s . t .   y i ( w T x i + b ) ≥ r ^ r ^ = 1 \begin{aligned}问题C:&\max_{w,b} \frac{\hat{r}}{\|w\|}\\ s.t.&\ y_i(w^Tx_i+b)\ge\hat{r}\\ &\hat{r}=1 \end{aligned} C:s.t.w,bmaxwr^ yi(wTxi+b)r^r^=1

如果我们现在解开了问题A,得到的解 w A ∗ , b A ∗ w_A^*,b_A^* wA,bA,这个解代表了SVM的分类超平面,但这个解并不一定是问题C的解,但如果对 w A ∗ , b A ∗ w_A^*,b_A^* wA,bA进行等比例的放大或者缩小得到 w C ∗ , b C ∗ w_C^*,b_C^* wC,bC使得 r ^ = 1 \hat{r}=1 r^=1成立,那么这个 w C ∗ , b C ∗ w_C^*,b_C^* wC,bC就是问题C的解,但注意, w A ∗ , b A ∗ w_A^*,b_A^* wA,bA w C ∗ , b C ∗ w_C^*,b_C^* wC,bC代表的平面是同一个平面
而由于问题C相当于在问题B上添加了约束,所以其可行域比问题B更小,所以如果问题C有解,这个解也一定是问题B的解
所以仅仅从分类面的同一性角度来说, w B ∗ , b B ∗ w_B^*,b_B^* wB,bB w A ∗ , b A ∗ w_A^*,b_A^* wA,bA是同一个分类面,问题A与问题B也就等价了,解的具体是多大就无所谓了

文中有下式
[外链图片转存失败(img-x6nbXZlB-1564109706637)(https://img-my.csdn.net/uploads/201301/11/1357838696_3314.png)]
之所以 b ∗ b^* b是这个,是因为那两个max和min对应的是分类面两边的支持向量,而且分类面肯定过这两个支持向量的中点
至于为什么非支持向量样本对应的的 α i = 0 \alpha_i=0 αi=0,是因为首先非支持向量不是距离分类面最近的点,所以满足 y i ( w T x i + b ) > 1 y_i(w^Tx_i+b)\gt1 yi(wTxi+b)>1,又因为解要满足KKT条件,即 α i y i ( w T x i + b ) = 0 \alpha_iy_i(w^Tx_i+b)=0 αiyi(wTxi+b)=0,所以有如上结论
核函数存在的意义:原本的思路是将低维空间 x ∈ R d x\in R^d xRd通过函数 ϕ \phi ϕ映射到高维空间 ϕ ( x ) ∈ R d + m \phi(x)\in R^{d+m} ϕ(x)Rd+m,把原本线性不可分的数据变成高维空间的线性可分数据,然后在高维空间求解如下问题,从而计算分类面参数去做SVM
max ⁡ w , b 1 ∥ w ∥ , s . t .   y i ( w T ϕ ( x ) + b ) ≥ 1 且 w ∈ R d + m \max_{w,b} \frac{1}{\|w\|},s.t.\ y_i(w^T\phi(x)+b)\ge1且w\in R^{d+m} w,bmaxw1,s.t. yi(wTϕ(x)+b)1wRd+m
这有着维度爆炸的问题,那么核函数的出现告诉我们没有必要先映射后在高维空间求解,在低维空间同样可以完成这个事情,为什么呢?因为求解SVM的对偶问题的时候,我们需要的仅仅是训练集中任意两个样本的内积而已,要做的就仅仅是在求解对偶问题的时候,把两个向量的内积变成高维空间下的内积就可以了,而核函数就是一种用来算高维空间内积的函数
SMO的KKT条件可以推出这个KKT条件说明,在两条间隔线外面的点,对应 α \alpha α为0,在两条间隔线里面的对应 α \alpha α为C,在两条间隔线上的样本的 α \alpha α在0和C之间。
求解对偶问题的时候软间隔的约束条件没了,是因为当 0 ≤ α ≤ C 0\le\alpha\le C 0αC隐含了软间隔的约束条件

支持向量机(SVM)的特点与不足
SVM中,高斯核为什么会把原始维度映射到无穷多维?
SVM的两个参数 C 和 gamma

gamma参数理解,gamma越小,那么核函数的输出会越大,进而导致当缩小gamma的时候,会使得最后判别方程的输入变化更剧烈,因此导致模型有更大的能力拟合训练数据

机器学习–svm不同核函数介绍及选择

svm的损失等价于优化合页损失,推导见西瓜书,统计学习方法里写的有错

多核学习

从 SVM 到多核学习 MKL
特征提取-特征后期融合-多核学习方法(MKL)

贝叶斯方法

贝叶斯学派:认为参数是随机变量,数据是确定值
所谓的后验概率是结果出现之后对概率的修正

算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)
朴素贝叶斯算法原理小结

贝叶斯决策(后验概率最大化)西瓜书这块讲的好一些
假设可能的样本类标记为 { c 1 , . . . , c N } \{c_1,...,c_N\} {c1,...,cN},而 λ i j \lambda_{ij} λij是将真实标记为 c j c_j cj的样本分类为 c i c_i ci的损失,样本 x x x来自于后验分布 P ( c k ∣ x ) P(c_k|x) P(ckx),如何求将一个已知的样本 x x x被分类为 c i c_i ci时的误差呢?
假设这个样本 x x x的类是 c 1 c_1 c1,那么将其分类为 c i c_i ci的误差为 λ i 1 \lambda_{i1} λi1,发生这样的事情的概率是 P ( c 1 ∣ x ) P(c_1|x) P(c1x)
假设这个样本 x x x的类是 c 2 c_2 c2,那么将其分类为 c i c_i ci的误差为 λ i 2 \lambda_{i2} λi2,发生这样的事情的概率是 P ( c 2 ∣ x ) P(c_2|x) P(c2x)
可以看到“将一个已知的样本 x x x被分类为 c i c_i ci时的误差”是一个随机变量,那么这个随机变量的期望是多少呢?很简单, R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|x)=\sum_{j=1}^{N}\lambda_{ij}P(c_j|x) R(cix)=j=1NλijP(cjx),这个就是在样本 x x x上预测的期望损失或条件风险。
进一步,假设我们现在手上有一个判定器 h h h,它把样本 x x x判定为 h ( x ) h(x) h(x)类,那么 h ( x ) h(x) h(x)的在全部数据损失的期望或总体风险就是 R ( h ) = E x [ R ( h ( x ) ∣ x ) ] R(h)=\mathbb{E}_x[R(h(x)|x)] R(h)=Ex[R(h(x)x)]。要最小化它,每个 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)x)都是最小的就可以了。直白的说,只要判定器 h h h对于给定的样本 x x x做出的决策,可以使得 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)x)尽可能小就行。如果损失是0-1损失,那么 h ( x ) = a r g m a x c P ( c ∣ x ) h(x)=argmax_{c}P(c|x) h(x)=argmaxcP(cx)就满足要求了,就是说决策器每次的输出都是 P ( c ∣ x ) P(c|x) P(cx)最大时的那个c就可以了。
朴素贝叶斯是怎么用贝叶斯决策的了呢?因为 P ( c i ∣ x ) P(c_i|x) P(cix)事先是未知的,所以朴素贝叶斯要先去学习 P ( c i ∣ x ) P(c_i|x) P(cix),然后做的事就一样了 【有监督学习】积累与发现_第2张图片
说来生气,之前和组里的老师和同学讨论这个问题的时候,我说这个值是极大似然估计出来的,他们说极大什么极大,这不就明摆着的么,呵呵= =
这个式子实在太通俗易懂了,所以没人追究他是怎么来的,这个式子讲的是:我们一共有 N N N个样本,其中 c k c_k ck类的样本有 a a a个,那么随机采样出现 c k c_k ck的概率就是 a N \frac{a}{N} Na
设从样本集中随机采样一个样本是 c k c_k ck类的概率为 θ \theta θ,设采样 N N N次结果中出现了 a a a c k c_k ck类的事件为 A A A,那么似然函数为 L ( θ ) = P ( A ∣ θ ) = C N a θ a ( 1 − θ ) N − a L(\theta)=P(A|\theta)=C_N^a\theta^a(1-\theta)^{N-a} L(θ)=P(Aθ)=CNaθa(1θ)Na于是对似然函数求导为 ∂ L ∂ θ = C N a θ a − 1 ( 1 − θ ) N − a − 1 [ a ( 1 − θ ) − ( N − a ) θ ] \frac{\partial L}{\partial \theta}=C_N^a\theta^{a-1}(1-\theta)^{N-a-1}[a(1-\theta)-(N-a)\theta] θL=CNaθa1(1θ)Na1[a(1θ)(Na)θ],等于0时,刚好有 θ = a N \theta=\frac{a}{N} θ=Na

贝叶斯线性回归(Bayesian Linear Regression

感觉贝叶斯回归并没用到贝叶斯估计,用的反而是高斯先验+MAP
贝叶斯回归怎么做的:感觉写的不清不楚,我自己理解了一下,模型还是 y = w T x y=w^Tx y=wTx w T w^T wT是个随机变量。假设这个时候已经有了参数的先验分布 P ( w ) P(w) P(w),然后来了一批数据 D D D,然后用MAP更新参数w,就是最大化 l n p ( θ ∣ D ) ln p(\theta|D) lnp(θD)就好了= =,就这么简单。。。我的疑问是,增量训练过程中,先验分布的参数是怎么更新的?
在这里插入图片描述
上面图片公示有错,应该是 p ( w ∣ α ) p(w|\alpha) p(wα)
这个看线性回归模型的概率解释,你看那个 β \beta β是咋求出来的,是先用MLE确定了新的 w M L E w_{MLE} wMLE之后,带回去再用MLE估计 β \beta β
那贝叶斯回归的时候可能就是,用MAP求出新的 w M A P w_{MAP} wMAP,然后带回去,再用MAP求新的 β , α \beta,\alpha β,α,反复更新参数。不过也有可能是三者同时更新的,谁知道呢。

概率图模型

这块推荐先去看西瓜书的概率图模型,讲解的很浅但是很明白,适合入门

理解马尔可夫平稳条件
从贝叶斯方法谈到贝叶斯网络
概率图论PGM的D-Separation(D分离)

西瓜书上也有判断独立性的方法,那个存疑,但是比较好记
贝叶斯网络的概率求解
【有监督学习】积累与发现_第3张图片
p ( x 1 , x 2 , x 3 , x 4 , x 5 ) p(x_1,x_2,x_3,x_4,x_5) p(x1,x2,x3,x4,x5),首先写出普通求解方法,即 p ( x 1 , x 2 , x 3 , x 4 , x 5 ) = p ( x 1 ) p ( x 2 ∣ x 1 ) p ( x 3 ∣ x 2 , x 1 ) p ( x 4 ∣ x 3 , x 2 , x 1 ) p ( x 5 ∣ x 4 , x 3 , x 2 , x 1 ) p(x_1,x_2,x_3,x_4,x_5)=p(x_1)p(x_2|x_1)p(x_3|x_2,x_1)p(x_4|x_3,x_2,x_1)p(x_5|x_4,x_3,x_2,x_1) p(x1,x2,x3,x4,x5)=p(x1)p(x2x1)p(x3x2,x1)p(x4x3,x2,x1)p(x5x4,x3,x2,x1)
简单来看,首先我们知道给定 x 2 x_2 x2 x 1 x_1 x1 x 3 x_3 x3独立,给定 x 3 x_3 x3 x 4 x_4 x4 x 1 , x 2 x_1,x_2 x1,x2独立,给定 x 3 x_3 x3 x 5 x_5 x5 x 1 , x 2 , x 4 x_1,x_2,x_4 x1,x2,x4独立,因此 p ( x 3 ∣ x 2 , x 1 ) = p ( x 3 ∣ x 2 ) , p ( x 4 ∣ x 3 , x 2 , x 1 ) = p ( x 4 ∣ x 3 ) , p ( x 5 ∣ x 4 , x 3 , x 2 , x 1 ) = p ( x 5 ∣ x 3 ) p(x_3|x_2,x_1)=p(x_3|x_2),p(x_4|x_3,x_2,x_1)=p(x_4|x_3),p(x_5|x_4,x_3,x_2,x_1)=p(x_5|x_3) p(x3x2,x1)=p(x3x2),p(x4x3,x2,x1)=p(x4x3),p(x5x4,x3,x2,x1)=p(x5x3)
推导的话,核心就是首先判断独立条件,然后运用分子分母同除去构造独立,从而将概率分开变成概率的乘积,举例来说,此时我们知道给定 x 3 x_3 x3 x 4 x_4 x4 x 1 , x 2 x_1,x_2 x1,x2独立,那么
p ( x 4 ∣ x 3 , x 2 , x 1 ) = p ( x 4 , x 3 , x 2 , x 1 ) p ( x 3 , x 2 , x 1 ) = p ( x 4 , x 3 , x 2 , x 1 ) / p ( x 3 ) p ( x 3 , x 2 , x 1 ) / p ( x 3 ) = p ( x 4 ∣ x 3 ) p ( x 2 , x 1 ∣ x 3 ) p ( x 2 , x 1 ∣ x 3 ) \begin{aligned} p(x_4|x_3,x_2,x_1)=&\frac{p(x_4,x_3,x_2,x_1)}{p(x_3,x_2,x_1)}\\ =&\frac{p(x_4,x_3,x_2,x_1)/p(x_3)}{p(x_3,x_2,x_1)/p(x_3)}=\frac{p(x_4|x_3)p(x_2,x_1|x_3)}{p(x_2,x_1|x_3)} \end{aligned} p(x4x3,x2,x1)==p(x3,x2,x1)p(x4,x3,x2,x1)p(x3,x2,x1)/p(x3)p(x4,x3,x2,x1)/p(x3)=p(x2,x1x3)p(x4x3)p(x2,x1x3)

决策树

决策树算法原理(上)

为什么信息增益倾向于选择多的特征,直观来讲,选特征数目多的,输出的叶子节点会更纯,可以让每个叶子节点更纯
假设数据中的每个人都是一个样本,每个人的姓名都不同,那么信息增益就会选择姓名作为最佳属性,因为按姓名分裂后,每个叶子节点只包含一条记录,而每个叶子只属于一类(信息增益最大),因此纯度最高。但是这样的分类没有意义。
举个实际数据例子,假如一个两类问题之中,总样本数目为4,其中正样本数目为2,负样本数目为2,并且该样本有 a , b a,b a,b两个特征,其中特征 a a a的取值可以是 a 1 , a 2 a_1,a_2 a1,a2,总样本之中,特征 a , b a,b a,b当取不同值的,样本分布情况如下表,如:特征 a a a取值为 a 1 a_1 a1的样本数目为2,其中正负样本数目均为1。
可以算出总样本的熵 H ( D ) = − 1 2 ∗ l o g 1 2 − 1 2 ∗ l o g 1 2 H(D)=-\frac{1}{2}*log\frac{1}{2}-\frac{1}{2}*log\frac{1}{2} H(D)=21log2121log21
当特征选a的时候, H ( D ∣ a ) = − 2 4 ( 1 2 ∗ l o g 1 2 + 1 2 ∗ l o g 1 2 ) − 2 4 ( 1 2 ∗ l o g 1 2 + 1 2 ∗ l o g 1 2 ) H(D|a)=-\frac{2}{4}(\frac{1}{2}*log\frac{1}{2}+\frac{1}{2}*log\frac{1}{2})-\frac{2}{4}(\frac{1}{2}*log\frac{1}{2}+\frac{1}{2}*log\frac{1}{2}) H(Da)=42(21log21+21log21)42(21log21+21log21)
当特征选b的时候, H ( D ∣ b ) = − 1 4 ∗ l o g 1 1 − 1 4 ∗ l o g 1 1 − 1 4 ∗ l o g 1 1 − 1 4 ∗ l o g 1 1 H(D|b)=-\frac{1}{4}*log\frac{1}{1}-\frac{1}{4}*log\frac{1}{1}-\frac{1}{4}*log\frac{1}{1}-\frac{1}{4}*log\frac{1}{1} H(Db)=41log1141log1141log1141log11
所以 [ H ( D ) − H ( D ∣ b ) ] > [ H ( D ) − H ( D ∣ a ) ] [H(D)-H(D|b)]>[H(D)-H(D|a)] [H(D)H(Db)]>[H(D)H(Da)],但此时选择特征取值更多的特征是因为b特征好,而不是因为多才选他的,“倾向选择取值更多的特征”不一定就是坏事,因为熵和分类误差率的单调性完全一致,因此即使有着“倾向选择取值更多的特征”的性质,也不会使得一个不好的特征的信息增益比一个好的特征高;但仍不能否认,仅从数据的角度来看b特征就是比a特征好。甚至把问题再深入一点,假设下面表格中样本数目都乘以一百万,数据量足够大的时候b特征仍能保持一个特别好分类结果,那么也就证明了b特征就是一个很好的特征。

特征a取值 样本数目 正样本数目 负样本数目
a 1 a_1 a1 2 1 1
a 2 a_2 a2 2 1 1
特征b取值 样本数目 正样本数目 负样本数目
b 1 b_1 b1 1 1 0
b 2 b_2 b2 1 0 1
b 3 b_3 b3 1 1 0
b 4 b_4 b4 1 0 1

信息熵是描述数据的混乱程度的,公式为 H ( X ) = − ∑ i = 1 n p i l o g p i H(X) = -\sum\limits_{i=1}^{n}p_i logp_i H(X)=i=1npilogpi,既然是混乱程度,那就要有一个关注的角度,比如现在把世界上所有的哺乳动物都抓进来作为我们的数据,我们现在从物种的角度看这个数据,那这个数据乱的不得了,熵也一定特别高;但如果我们现在关注的是是不是胎生的,那这批数据纯的不得了,因为全是胎生的,熵为0。
回到机器学习,对于数据 D D D来说,其关于类别的混乱程度 H c l a s s ( D ) = − ∑ k = 1 K ∣ D k ∣ ∣ D ∣ l o g 2 ∣ D k ∣ ∣ D ∣ H_{class}(D) = -\sum\limits_{k=1}^{K}\frac{|D_k|}{|D|}log_2\frac{|D_k|}{|D|} Hclass(D)=k=1KDDklog2DDk,其中 D k D_k Dk D D D中类别为 k k k的样本集;其关于特征 A A A的混乱程度 H A ( D ) = − ∑ i = 1 V ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D) = -\sum\limits_{i=1}^{V}\frac{|D^{i}|}{|D|}log_2\frac{|D^{i}|}{|D|} HA(D)=i=1VDDilog2DDi,其中 D i D^{i} Di D D D中特征 A A A取值为 a i a_i ai的样本集; H A ( D ) H_A(D) HA(D)就是信息增 益率的分母,一般来说,特征 A A A取值越多, H A ( D ) H_A(D) HA(D)会越大,因为数据 D D D里的样本在特征值 A A A取各个值的都有,那就说明从 A A A特征的角度,这个数据乱嘛

机器学习笔记(7)——C4.5决策树中的缺失值处理

信息熵公式 Σ − p l o g p \Sigma -plog p Σplogp,把 p p p换成用权重计算就行了

c4.5为什么使用信息增益比来选择特征? - 夕小瑶的回答 - 知乎

正经解释了信息增益率的特点,“样本数越少,对概率的估计结果的方差就会越大”这段话的需要解释一下:比如估计投一枚均匀的硬币得到正面的概率,每次实验只投4次,每次都用频率估计概率,做1000次实验,那么每次实验得到的结果,放在一起,方差一定特别大;而如果修改为每次实验投10000次,那么这些结果的方差一定很小。进一步地,如果我们只取一次实验结果作为最终实验结果,只投4次得到的结果有很大概率是不贴近0.5的(也就是说结果有偏向),而投10000次得到的结果很大概率贴近0.5(结果没有偏向)。
而体现到机器学习的特征选择上,如果某个特征的可选择的值多,如果把这个特征作为分支,如果那么每个分支的样本数目较少,由上面的理论,样本在该特征上的样本类别分布有较大可能性是有偏的,以两类问题为例,如果在特征 A A A上取值为 a i a_i ai样本的类别的真实的分布是5:5,如果我们只有10个样本,两类样本多一个少一个会对熵造成很大影响,不同类别的样本比例是4:6至6:4的概率只有0.65625。但如果我们有100个样本呢,样本比例是40:60到60:40之间的概率高达0.9648。于是由于这10个样本上,不同类别的样本比例在4:6至6:4之外的概率更高,因此计算的信息熵更有可能会比真实的小一些,这全是因为我们样本太少了。数据集的不充足以及客观存在的大数定律导致取值多的特征在计算条件熵时容易估计出偏小的条件熵
信息增益为什么会偏向于特征值多的特征?基于上面的道理再往前想一步,如果现在样本数目一定,特征 A A A可取的特征值多,那以特征 A A A进行将样本划分开,得到的多个样本集都会较小,小会发生什么?数据不充足,不充足会发生啥?这个样本集的条件熵偏小,偏小怎么了?信息增益就大了呗。

决策树算法原理(下)

最好的特征以及最好的分隔点为 A , s = a r g m i n A , s ∣ D 1 ∣ ∣ D ∣ G I N I ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G I N I ( D 2 ) A,s=argmin_{A,s}\frac{|D_1|}{|D|}GINI(D_1)+\frac{|D_2|}{|D|}GINI(D_2) A,s=argminA,sDD1GINI(D1)+DD2GINI(D2)
其中 D 1 , D 2 D_1,D_2 D1,D2是将 D D D通过 s s s划分成的两个部分,具体怎么划分得看变量是离散还是连续
CART回归的时候就是找分隔之后损失最小的

scikit-learn决策树算法类库使用小结
CCP剪枝请见个人统计学习方法一书上90页的笔记
决策树的剪枝问题
决策树-剪枝算法(二)

悲观剪枝:
对于某个子树,这个以 t t t为根节点的子树 T t T_t Tt e T = ∑ E i + 0.5 L ∑ N i e_T=\frac{\sum E_i+0.5L}{\sum N_i} eT=NiEi+0.5L,其中 E i , N i , L E_i,N_i,L Ei,Ni,L分别是第 i i i个叶子节点的分错的样本、总样本,以及叶子节点的数目。那么也就是说,叶子节点增加的越快,同时如果 E i E_i Ei减小的越慢, e e e就会越大。这实际上是一种叶子节点数和误差率的trade-off,相当于每增加一个叶子节点,就给损失加一个0.5的惩罚项。同样,对于剪枝以后的误差为 e t = E + 0.5 N e_t=\frac{E+0.5}{N} et=NE+0.5,算得方法一致。然后把 e e e看做二项分布的 P P P,如果 E ( e T ) E(e_T) E(eT)大过 E ( e t ) E(e_t) E(et)一个 v a r ( e T ) var(e_T) var(eT),那么说明这个子树叶子数目增长的速度快于损失下降的速度
CCP剪枝和PEP剪枝思路差不多, α \alpha α的作用都是用来平衡树的复杂度和损失,CCP的最后一步就是在找一个最合适的 α \alpha α

集成学习

集成学习原理小结
Bagging与随机森林算法原理小结
RandomForest特征重要度问题
集成学习之Adaboost算法原理小结

统计学习方法中146页的解释
【有监督学习】积累与发现_第4张图片【有监督学习】积累与发现_第5张图片
由8.4式可知,每一次迭代后每个样本权值变化公式为
w m + 1 , i = w m , i Z m e x p ( − α m y i G m ( x i ) ) = w m − 1 , i Z m − 1 Z m e x p ( − α m − 1 y i G m − 1 ( x i ) ) e x p ( − α m y i G m ( x i ) ) = w 1 , i ∏ k = 1 m Z k e x p ( ∑ k = 1 m − α k y i G k ( x i ) ) = 1 N ∏ k = 1 m Z k e x p ( ∑ k = 1 m − α k y i G k ( x i ) ) \begin{aligned} w_{m+1,i}&=\frac{w_{m,i}}{Z_m}exp(-\alpha_m y_i G_m(x_i))\\ &=\frac{w_{m-1,i}}{Z_{m-1}Z_m}exp(-\alpha_{m-1} y_{i} G_{m-1}(x_{i}))exp(-\alpha_m y_i G_m(x_i))\\ &=\frac{w_{1,i}}{\prod_{k=1}^m{Z_k}}exp(\sum_{k=1}^m-\alpha_{k} y_{i} G_{k}(x_{i}))\\ &=\frac{1}{N\prod_{k=1}^m{Z_k}}exp(\sum_{k=1}^m-\alpha_{k} y_{i} G_{k}(x_{i})) \end{aligned} wm+1,i=Zmwm,iexp(αmyiGm(xi))=Zm1Zmwm1,iexp(αm1yiGm1(xi))exp(αmyiGm(xi))=k=1mZkw1,iexp(k=1mαkyiGk(xi))=Nk=1mZk1exp(k=1mαkyiGk(xi))
并且 f m − 1 ( x ) = ∑ k = 1 m − 1 α k G k ( x ) f_{m-1}(x)=\sum_{k=1}^{m-1}\alpha_kG_k(x) fm1(x)=k=1m1αkGk(x),所以有
w m , i = 1 N ∏ k = 1 m − 1 Z k e x p ( − y i f m − 1 ( x ) ) = 1 N ∏ k = 1 m − 1 Z k w ˉ m , i w_{m,i}=\frac{1}{N\prod_{k=1}^{m-1}{Z_k}}exp(-y_i f_{m-1}(x))=\frac{1}{N\prod_{k=1}^{m-1}{Z_k}}\bar{w}_{m,i} wm,i=Nk=1m1Zk1exp(yifm1(x))=Nk=1m1Zk1wˉm,i
并且由于 Z k Z_k Zk对任意样本都相同,并且 α > 0 \alpha>0 α>0是一个恒定值,当 ∑ i = 1 n w ˉ m i I ( y i ≠ G ( x i ) ) \sum_{i=1}^{n}\bar{w}_{mi}I(y_i\ne G(x_i)) i=1nwˉmiI(yi=G(xi))最小的时候,8.21同时最小,因此说 G m ∗ G_m^* Gm就是AdaBoost算法之中第m轮输出的基本分类器
在Adaboost回归的时候,道理和分类差不多,先计算最大误差,然后用这个最大误差对每个样本计算相对误差,相对误差越大的样本提升权重越多

梯度提升树(GBDT)原理小结

GBDT相对于BDT(提升树)好在哪呢,为什么一定要用负梯度来拟合呢?
如果我们把所有的样本的输出看做一个向量 F = { f 1 , . . . , f n } F=\{f_1,...,f_n\} F={f1,...,fn},那么损失可以看做关于这个向量的函数,那就简单了,梯度下降呗,找到负梯度方向 Δ F \Delta F ΔF,然后让新树去拟合 Δ F \Delta F ΔF就可以了。
如果我们用的是平方损失,那么在训练新树的时候,就要针对 L ( y , f m − 1 ( x ) + T ( x ; θ m ) ) = [ y − f m − 1 ( x ) − T ( x ; θ m ) ] 2 = [ r − T ( x ; θ m ) ] 2 L(y,f_{m-1}(x)+T(x;\theta_m))=[y-f_{m-1}(x)-T(x;\theta_m)]^2=[r-T(x;\theta_m)]^2 L(y,fm1(x)+T(x;θm))=[yfm1(x)T(x;θm)]2=[rT(x;θm)]2这时候新的树恰好需要拟合残差而已,但如果这个损失是个别的损失,那新树要去拟合的就不是残差了;而实际上可以把 L L L看做以 f f f为自变量的函数,于是对 L L L关于 f f f进行梯度下降得到 ∂ L ∂ f \frac{\partial L}{\partial f} fL,也就是说当自变量 f f f沿着负梯度方向的时候, L L L减小最快,那么在实际数据中要做的就是学习一个新模型,使得当输入为 x x x时输出值为 ∂ L ∂ f \frac{\partial L}{\partial f} fL,把这个模型加回给之前的模型,就完成了对 L L L的梯度下降工作
用指数损失只是近似adaboost,GDBT的学习率相当于adaboost的 α \alpha α,只不过adaboost的 α \alpha α会变
在GBDT回归的时候,每一个新的弱分类器的叶子节点个数可能都不一样,GBDT回归的核心之一在于每个叶子节点的值的选择
GBDT分类的时候,本质上还是将分类问题转化成回归问题,去拟合损失的梯度,解释见下面
二分类转多分类有点类似于Logits转Softmax
多元GBDT分类的每个 f k ( x ) f_k(x) fk(x)代表的是针对“是第k类样本”和“不是第k类样本”的分类模型

GBDT处理二分类问题

这篇文章把GBDT处理分类问题时候讲的明白了一些,说白了就是把损失函数换成 L ( y , F ) = l o g ( 1 + e x p ( − 2 y F ) ) , y ∈ { − 1 , 1 } L(y,F)=log(1+exp(-2yF)),y \in\{-1,1\} L(y,F)=log(1+exp(2yF)),y{1,1},然后就是求梯度了 ∂ L ∂ F \frac{\partial L}{\partial F} FL,之后就没区别了
这里我是这样理解的,首先对于原始样本 D D D训练一个二分类树 T p r e T_{pre} Tpre,然后GBDT中的第一棵树并不是 T p r e T_{pre} Tpre,而是 T 1 ( x ) = 1 2 l o g [ P r ( y = 1 ∣ x ) P r ( y = − 1 ∣ x ) ] T_1(x)=\frac{1}{2}log[\frac{Pr(y=1|x)}{Pr(y=-1|x)}] T1(x)=21log[Pr(y=1x)Pr(y=1x)],其中概率是由 T p r e T_{pre} Tpre输出的。然后求梯度,下一次就按着回归的方法生成回归树 T 2 , . . . , T m {T_2,...,T_m} T2,...,Tm了。然后把树加起来的输出就是 F ( x ) = 1 2 l o g [ P r ( y = 1 ∣ x ) P r ( y = − 1 ∣ x ) ] F(x)=\frac{1}{2}log[\frac{Pr(y=1|x)}{Pr(y=-1|x)}] F(x)=21log[Pr(y=1x)Pr(y=1x)]

GBDT原理与实践-多分类篇

每次生成的k颗树,所以就相当于整体的one vs rest训练了k个GBDT模型,每个模型都是用来判断是第k类和不是第k类,最终的输出是通过一个类似于softmax输出概率

一步一步理解GB、GBDT、xgboost
机器学习教程 之 梯度提升方法:GBDT及其扩展模型XGBoost

展开成泰勒二阶之后,对展开项进行重写,写成叶子节点的形式,然后如果分裂后损失降低,那就分裂,否则不分裂。
找分割点的时候,类似于CART树的CCP过程,比较某个叶子节点继续分裂好还是不分裂好,而且只看这一个节点的就行了;感觉只在特征选取的时候用了GINI,其他时候如分割点和叶子结点的确定,都是新的方法

xgboost如何处理缺失值
【算法】关于xgboost特征重要性的评估
Complete Guide to Parameter Tuning in XGBoost (with codes in Python)
Lightgbm基本原理介绍

GOSS算法好理解,在GBM里需要用损失对每个样本的 f ( x ) f(x) f(x)求梯度,梯度大的留下,然后梯度小的少用点
EFB算法,首先是把互斥的特征bundle在一起,每个bundle里都存了一部分特征,这些特征是互斥的,paper上说互斥的意思就是很少同时取非零值,比如说有三个特征ABC,当A取值为1的时候,BC的取值只有0,当B取值为1的时候,AC取值只有0,那么就可以把这三个特征绑定成一个特征D,当这个特征D取值为1的时候,就说明ABC里取值有一个为1。
那个算法的外循环的意思是,先处理度大的特征,后处理度小的特征,因为度大的特征更不容易与其他特征互斥,内循环的意思就是,每新来一个特征,用这个特征与已有的bundle进行计算(具体就是计算这个新特征和当前bundle里的特征们的冲突,这个冲突越大代表互斥程度越小,额= =,因为冲突小于一定程度的时候,说明这个新特征可以被丢进当前bundle里),然后用直方图的方法,把每个bundle里的特征合并成1个特征
阿里的PPT非常好

What makes LightGBM lightning fast?

综合

感知机、线性回归、逻辑回归的简单对比

你可能感兴趣的:(机器学习与数据挖掘)