机器学习基础

L1-norm和L2-norm的区别及L1的稀疏性原理

来自:知乎
L1 正则化 增加了所有权重 w 参数的绝对值之和逼迫更多 w 为零,也就是变稀疏( L2 因为其导数也趋 0, 奔向零的速度不如 L1 给力了)。我们对稀疏规则趋之若鹜的一个关键原因在于它能实现特征的自动选择。
L2 正则化 增加所有权重 w 参数的平方之和,逼迫所有 w 尽可能趋向零但不为零(L2 的导数趋于零)。因为在未加入 L2 正则化发生过拟合时,拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大,在某些很小的区间里,函数值的变化很剧烈,也就是某些 w 值非常大。为此,L2 正则化的加入就惩罚了权重变大的趋势。
稀疏性
L1 正则的本质其实是为模型增加了“模型参数服从零均值拉普拉斯分布”这一先验知识。
L2 正则的本质其实是为模型增加了“模型参数服从零均值正态分布”这一先验知识。

  • 角度一、解空间的形状
    原函数等高曲线,和某个菱形相交的时候及其容易相交在坐标轴(比如上图),也就是说最终的结果,解的某些维度及其容易是 0。

解空间的严谨证明:假设现在我们是一维的情况下 h ( w ) = f ( w ) + C ∣ w ∣ h(w) = f(w) + C|w| h(w)=f(w)+Cw ,其中 h ( w ) h(w) h(w) 是目标函数, f ( w ) f(w) f(w) 是没加 L1 正则化项前的目标函数, C ∣ w ∣ C|w| Cw 是 L1 正则项,要使得 0 点成为最值可能的点,虽然在 0 点不可导,但是我们只需要让 0 点左右的导数异号,即 h l ′ ( 0 ) h r ′ ( 0 ) = ( f ′ ( 0 ) − C ) ( f ′ ( 0 ) + C ) < 0 h'_l (0) h'_r (0) = (f'(0)-C)(f'(0)+C)<0 hl(0)hr(0)=(f(0)C)(f(0)+C)<0 即可也就是 f ′ ( 0 ) > C f'(0)>C f(0)>C 的情况下,0 点都是可能的最值点。

  • 角度二、贝叶斯先验
    拉普拉斯分布在0极值点是一个尖峰,参数取0的可能性更高。
    在这里插入图片描述

代价函数、目标函数、损失函数的区别

损失函数(Loss Function) 是用来评估模型好坏程度,即预测值f(x)与真实值的不一致程度,通常表示为L(Y, f(x))的一个非负的浮点数。
损失函数(Loss Function) 直接作用于单个样本,用来表达样本的误差
代价函数(Cost Function) 作用于整个训练集,是整个样本集的平均误差,对所有损失函数值的平均
目标函数(Object Function) 是我们最终要优化的函数,也就是代价函数+正则化函数(经验风险+结构风险)
m i n J ( θ ) = 1 n ∑ i = 1 n L ( y i , f ( x i ; θ ) ) + λ Φ ( θ ) minJ(\theta )=\frac{1}{n}\sum_{i=1}^{n}L(y_{i}, f(x_{i};\theta)) + \lambda \Phi (\theta ) minJ(θ)=n1i=1nL(yi,f(xi;θ))+λΦ(θ)

其中,第一部分是代价函数,L代表损失函数;第二部分是正则化函数(也可以称为惩罚项),可以试L1,也可以试L2或者其他正则函数。整个表达式是要找到是目标函数最好的值。

样本不平衡问题

  • 扩大数据集
  • 数据集重采样
  • 人工产生数据样本
  • 基于异常检测的方式
  • 尝试不同的分类算法
  • 对小类错分进行加权惩罚
  • 从重构分类器的角度出发

过拟合与欠拟合

过拟合: 模型对训练数据呈现过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。
欠拟合: 模型在训练和预测时表现都不好的情况。

降低“过拟合”风险:
1、从数据入手,获取更多的数据,可以学习到更多有效特征,减小噪声影响。图像问题上可以使用数据增强。
2、降低模型复杂度。避免模型拟合过多噪声。
3、正则化。L1、L2正则化;避免权重过大带来的过拟合风险。
4、集成学习。把多个模型集成在一起,如Bagging
5、Dropout,也有集成学习的思想,相当于训练了不同的网络参数。也能起到一定的正则化作用。
6、early stop
7、BN
降低“欠拟合”风险:
1、添加新特征。挖掘新特征,构造组合特征(可以通过FM、GDBT等)
2、增加模型复杂度,增强模型的学习能力。
3、减小正则化系数。

信息熵、KL散度、交叉熵

KL散度与交叉熵区别与联系

熵的定义
s ( x ) = − ∑ i P ( x i ) l o g P ( x i ) s(x) = -\sum_{i}P(x_i)logP(x_i) s(x)=iP(xi)logP(xi)
x x x 指的不同的事件比如喝茶, P ( x i ) P(xi) P(xi) 指的是某个事件发生的概率比如喝红茶的概率。对于一个一定会发生的事件,其发生概率为1, S ( x ) = − l o g ( 1 ) ∗ 1 = − 0 ∗ 1 = 0 S(x)=−log(1)∗1=−0∗1=0 S(x)=log(1)1=01=0,信息量为0。

  • 越不可能发生的事件信息量越大, 比如“我不会死”这句话信息量就很大。而确定事件的信息量就很低,比如“我是我妈生的”,信息量就很低甚至为0。
  • 独立事件的信息量可叠加。比如“a. 张三今天喝了阿萨姆红茶,b. 李四前天喝了英式早茶”的信息量就应该恰好等于a+b的信息量,如果张三李四喝什么茶是两个独立事件。

KL散度——衡量两个事件/分布之间的不同

离散分布
D K L ( A ∣ ∣ B ) = ∑ i P ( A i ) l o g ( P A ( x i ) P B ( x i ) ) = ∑ i P ( A i ) l o g ( P A ( x i ) ) − ∑ i P ( A i ) l o g ( P B ( x i ) ) D_{KL}(A||B) = \sum_{i}P(A_i)log(\frac{P_A(x_i)}{P_B(x_i)}) = \sum_{i}P(A_i)log(P_A(x_i)) - \sum_{i}P(A_i)log(P_B(x_i)) DKL(AB)=iP(Ai)log(PB(xi)PA(xi))=iP(Ai)log(PA(xi))iP(Ai)log(PB(xi))

连续分布
D K L ( A ∣ ∣ B ) = ∫ a ( x i ) l o g ( a ( x ) b ( x ) ) D_{KL}(A||B) = \int a(x_i)log(\frac{a(x)}{b(x)}) DKL(AB)=a(xi)log(b(x)a(x))

此处我们介绍默认的计算方法:KL散度,有时候也叫KL距离,一般被用于计算两个分布之间的不同。看名字似乎跟计算两个点之间的距离也很像,但实则不然,因为KL散度不具备有对称性。在距离上的对称性指的是A到B的距离等于B到A的距离。
如果PA=PB,即两个事件分布完全相同,那么KL散度等于0。观察公式2.1,可以发现减号左边的就是事件A的熵,请记住这个发现。
交叉熵
H ( A , B ) = − ∑ i P A ( x i ) l o g P B ( x i ) H(A,B) = -\sum_{i}P_A(x_i)logP_B(x_i) H(A,B)=iPA(xi)logPB(xi)
此处最重要的观察是,如果S(A)S(A)是一个常量,那么DKL(A∣∣B)=H(A,B),也就是说KL散度和交叉熵在特定条件下等价。这个发现是这篇回答的重点。
同时补充交叉熵的一些性质:

  • 和KL散度相同,交叉熵也不具备对称性:H(A,B)≠H(B,A),此处不再赘述。
  • 从名字上来看,Cross(交叉)主要是用于描述这是两个事件之间的相互关系,对自己求交叉熵等于熵。即 H(A,A)=S(A)H(A,A)=S(A),注意只是非负而不一定等于0。

逻辑回归 Logistic Regression

【机器学习】逻辑回归(非常详细)
关于检查熵、信息熵、KL散度
L1正则先验分布是Laplace分布,L2正则先验分布是Gaussian分布

在这里插入图片描述

为什么 LR 模型要使用 sigmoid 函数,背后的数学原理

首先,我们在建模预测 Y|X,并认为 Y|X 服从bernoulli distribution,所以我们只需要知道 P(Y|X);其次我们需要一个线性模型,所以 P(Y|X) = f(wx)。接下来我们就只需要知道 f 是什么就行了。而我们可以通过最大熵原则推出的这个 f,就是sigmoid。

伯努利分布的指数族形式就是sigmoid函数,

LR 为什么不可以用MSE作为损失函数

原因总结:
MSE 会有梯度消失现象
MSE 的导数非凸函数,求解最优解困难

  1. 梯度消失公式证明:
    f ( x ) = θ x + b f(x)=\theta x+b f(x)=θx+b ,记为 s。
    在这里插入图片描述
    只关注其中单项的公式,并简化可得:
    在这里插入图片描述
    可见, 当 h 趋近于 0 时或者趋近于 1 时,该 Loss 的导数都会趋近为 0,从而造成梯度消失现象。

  2. 非凸函数公式证明
    关注 L ′ ( θ ) L{}'(\theta) L(θ) 其二阶导数,可以得出其二阶导数矩阵即 Hessian 矩阵不是正定矩阵。 该导数是非凸函数,不是凸函数,难以优化。
    在这里插入图片描述
    h ( 1 − h ) 在 ( 0 , 1 ) h(1-h) 在(0,1) h(1h)(0,1)内都大于 0, 假设 y=0 时, L ′ ′ ( θ ) L{}''(\theta) L(θ)则由3h^2-2h 决定。
    因为 3 h 2 − 2 h 3h^2-2h 3h22h的根为0, 2 3 \frac{2}{3} 32, 即其在 [0,1] 范围内有正有负。 从而得出 L ′ ′ ( θ ) L{}''(\theta) L(θ)有正有负,即为非凸函数。

逻辑回归的优缺点:

优点:
结构简单,可解释性强,从特征的权重可以看到不同特征对最后结果的影响。
训练速度快,分类时,计算量只和特征数目相关,占用计算资源少。
输出结果方便调整,结果都是概率值,可以很容易调整阈值实现分类。
效果不错,只要特征工程做的好,效果就不会太差。
缺点:
准确率不是太高,因为结构简单,很难拟合复杂数据的真实分布
很难处理数据不平衡的问题,如果正负样本的比例差距较大,模型区分能力不会很好。
处理非线性数据比较麻烦,在不引入其他方法的情况下,只能处理线性可分的数据。
逻辑回归本身无法筛选特征,有时候会用gbdt来筛选特征,然后再上逻辑回归。

支持向量机 SVM

【机器学习】支持向量机 SVM(非常详细)

手推SVM以及KKT条件
在这里插入图片描述

SVM核函数的选择

如果 Feature 的数量很大,跟样本数量差不多,这时候选用 LR 或者是 Linear Kernel 的 SVM。因为往往是线性可分的,可以采用线性的。
如果 Feature 的数量比较小,样本数量一般,不算大也不算小,选用 SVM+Gaussian Kernel。 特征数理少的话,求内积的时候需要消耗很多计算。
如果 Feature 的数量比较小,而样本数量很多,需要手工添加一些 feature 变成第一种情 况。

SVM可以自己选择核函数么

SVM 为什么要从原始问题变为对偶问题来求解

  1. 对偶问题将原始问题中的约束转为来对偶问题中的等式约束
  2. 方便核函数的引入
  3. 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。

SVM 优缺点

优点:

  1. 有严格的数学理论支持,可解释性强,不依靠统计方法,从而简化了通常的分类和回归问题;
  2. 能找出对任务至关重要的关键样本(即:支持向量);
  3. 采用核技巧之后,可以处理非线性分类/回归任务;
  4. 最终决策函数只由少数的支持向量所确定,计算的复杂性取决于支持向量的数目,而不是样本空间的维数,这在某种意义上避免了“维数灾难”。

缺点:

  1. 训练时间长。当采用 SMO 算法时,由于每次都需要挑选一对参数,因此时间复杂度为 [公式] ,其中 N 为训练样本的数量;
  2. 当采用核技巧时,如果需要存储核矩阵,则空间复杂度为 [公式] ;
  3. 模型预测时,预测时间与支持向量的个数成正比。当支持向量的数量较大时,预测计算复杂度较高。
  4. 因此支持向量机目前只适合小批量样本的任务,无法适应百万甚至上亿样本的任务。

LR 和SVM的区别和联系

1)LR和SVM的联系
都是监督的分类算法。
都是线性分类方法 (不考虑核函数时)。
都是判别模型。
2)LR和SVM的不同
损失函数的不同,LR是对数损失函数,SVM是hinge损失函数。
SVM不能产生概率,LR可以产生概率。
SVM自带结构风险最小化,LR则是经验风险最小化。
SVM会用核函数而LR一般不用核函数。
LR和SVM在实际应用的区别:根据经验来看,对于小规模数据集,SVM的效果要好于LR,但是大数据中,SVM的计算复杂度受到限制,而LR因为训练简单,可以在线训练,所以经常会被大量采用。

决策树 DT

【机器学习】决策树(上)——ID3、C4.5、CART(非常详细)
【机器学习】决策树(中)——Random Forest、Adaboost、GBDT (非常详细)
【机器学习】决策树(下)——XGBoost、LightGBM(非常详细)

信息增益、信息增益率、基尼指数

数据集的信息熵:
H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D) = -\sum_{k = 1}^K\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} H(D)=k=1KDCklog2DCk

针对某个特征 A,对于数据集 D 的条件熵H(D|A) 为
H ( D ∣ A ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ ( − ∑ k = 1 K ∣ C i k ∣ ∣ D i ∣ l o g 2 ∣ C i k ∣ ∣ D i ∣ ) H(D|A) = -\sum_{i = 1}^n\frac{|D_i|}{|D|}H(D_i)\\ = -\sum_{i = 1}^n\frac{|D_i|}{|D|}(-\sum_{k = 1}^K\frac{|C_{ik}|}{|D_i|}log_2\frac{|C_{ik}|}{|D_i|}) H(DA)=i=1nDDiH(Di)=i=1nDDi(k=1KDiCiklog2DiCik)

信息增益 = 信息熵 - 条件熵:
G a i n ( D , A ) = H ( D ) − H ( D ∣ A ) Gain(D,A) = H(D) - H(D|A) Gain(D,A)=H(D)H(DA)

信息增益率 :

G a i n r a t i o ( D , A ) = G a i n ( D , A ) H A ( D ) , H A ( D ) = − ∑ n = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ Gain_{ratio}(D,A) = \frac{Gain(D,A)}{H_A(D)},\\ H_A(D) = -\sum_{n = 1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} Gainratio(D,A)=HA(D)Gain(D,A),HA(D)=n=1nDDilog2DDi

基尼指数

G i n i ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ ( 1 − ∣ C k ∣ ∣ D ∣ ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 G i n i ( D ∣ A ) = − ∑ n = 1 n ∣ D i ∣ ∣ D ∣ G i n i ( D i ) Gini(D) = -\sum_{k = 1}^K\frac{|C_k|}{|D|}(1-\frac{|C_k|}{|D|})\\ = 1-\sum_{k = 1}^K(\frac{|C_k|}{|D|})^2Gini(D|A)\\ = -\sum_{n = 1}^n\frac{|D_i|}{|D|}Gini(D_i) Gini(D)=k=1KDCk(1DCk)=1k=1K(DCk)2Gini(DA)=n=1nDDiGini(Di)

当 CART 为二分类,其表达式为:
G i n i ( D ∣ A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D|A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2) Gini(DA)=DD1Gini(D1)+DD2Gini(D2)

GBDT分类

XGBoost、LightGBM @Ming

XGBoost 相对于普通 GBDT 的实现,可能具有以下的一些优势:

1)显式地将树模型的复杂度作为正则项加在优化目标公式
2)推导里用到了二阶导数信息,而普通的GBDT只用到一阶
3)允许使用column(feature) sampling来防止过拟合,借鉴了Random Forest的思想,sklearn里的gbm好像也有类似实现。
4)实现了一种分裂节点寻找的近似算法,用于加速和减小内存消耗。
5)节点分裂算法能自动利用特征的稀疏性。
6)data事先排好序并以block的形式存储,利于并行计算
7)cache-aware, out-of-core computation,这个我不太懂。。
8)支持分布式计算可以运行在MPI,YARN上,得益于底层支持容错的分布式通信框架rabit。

GDBT模型、XGBoost和LightGBM之间的区别与联系
xgboost和lightgbm区别

1、切分算法(切分点的选取)
2、占用的内存更低,只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8
2、LightGBM直接支持类别特征
4、决策树生长策略不同
XGBoost采用的是带深度限制的level-wise生长策略。level-wise过一次数据可以能够同时分裂同一层的叶子,容易进行多线程优化,不容易过拟合;但不加区分的对待同一层叶子,带来了很多没必要的开销(实际上很多叶子的分裂增益较低,没必要进行搜索和分裂)

LightGBM采用leaf-wise生长策略,每次从当前所有叶子中找到分裂增益最大(数据量最大)的一个叶子,进行分裂,如此循环;但会生长出比较深的决策树,产生过拟合(因此LightGBM在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合)

K均值聚类K-means

【机器学习】K-means(非常详细)

K-means聚类算法中K值如何选择?

  1. 数据的先验知识,或者数据进行简单分析能得到

  2. 基于变化的算法:即定义一个函数,随着K的改变,认为在正确的K时会产生极值。如Gap
    Statistic Jump Statistic 。可以这么理解,给定一个合理的类簇指标,比如平均半径或直径,只要我们假设的类簇的数目等于或者高于真实的类簇的数目时,该指标上升会很缓慢,而一旦试图得到少于真实数目的类簇时,该指标会急剧上升

  3. 基于结构的算法:即比较类内距离、类间距离以确定K。这个也是最常用的办法,如使用平均轮廓系数,越趋近1聚类效果越好;如计算类内距离/类间距离,值越小越好;等。其中轮廓系数(silhouette coefficient)。结合了凝聚度和分离度。计算公式如下

其中 [公式] 向量到所有它属于的簇中其它点的距离的平均, [公式] 向量到所有非本身所在簇中其它点的距离的平均距离

  1. 基于一致性矩阵的算法:即认为在正确的K时,不同次聚类的结果会更加相似,以此确定K

  2. 基于层次聚类:即基于合并或分裂的思想,在一定情况下停止从而获得K

  3. 基于采样的算法:即对样本采样,分别做聚类;根据这些结果的相似性确定K。如,将样本分为训练与测试样本;对训练样本训练分类器,用于预测测试样本类别,并与聚类的类别比较

  4. 使用Canopy Method算法进行初始划分

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值