陆陆续续整理的机器学习的知识点,资料大多数来自网上,不做盈利目的,如果侵权请告知即删!如果文章中有错误的地方还请各位同学指正,,一起学习,一起进步!
每天都在更新中,记得收藏,每天进步一点点!!
一天1个机器学习知识点(一)(决策树,有无监督学习,SVM,梯度下降法,逻辑回归,NB)
一天1个机器学习知识点(二)(KNN,Kmeans,偏差方差,参数非参数模型,生成模型判别模型,正则化,概率,牛顿法,熵)
一天1个机器学习知识点(三)(损失函数,生成模型和判别模型,DBSCAN,OPTICS)
一天1个机器学习知识点(四)这部分主要更新集成学习的内容(RF,adaboost,GBDT,XGBoost等)
一天1个机器学习知识点(五)(特征工程相关,PCA,LDA等)
穿越---->深度学习知识点!!
目录
1.K-近邻算法(k-Nearest Neighbors,KNN)
1.1.KNN原理
K-近邻是一种分类算法,其思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
算法的步骤为(计算欧式距离,选择最近k个点,选择频率最高类别):
- 计算测试数据与各个训练数据之间的距离;
- 按照距离的递增关系进行排序;
- 选取距离最小的K个点;
- 确定前K个点所在类别的出现频率;
- 返回前K个点中出现频率最高的类别作为测试数据的预测分类。
1.2.K-Means或KNN中,通常使用欧式距离来表示最近的数据点之间的距离,有时候也使用曼哈度距离,对比两者的区别。
欧式距离最常见的是两个或多个点之间的距离表示法,又称为欧几里得距离。也就是通常所说的L2范数,欧式距离的缺点是它将样本的不同特征之间的差别等同看待,这一点有时候不能满足实际要求。
曼哈顿距离,也就是欧式空间中的在直角坐标系上两个点所形成的线段对轴产生的投影的距离总和。也就是我们所说的L1距离。例如,坐标(x1,y1)的点P1与坐标(x2, y2)的点P2的曼哈顿距离计算公式为:
1.3.一些大厂真题
近似误差:可以理解为对现有训练集的训练误差。
估计误差:可以理解为对测试集的测试误差。
在这个knn中其实设定的k值越小,得出的模型是越复杂的,因为k值越小会导致特征空间被划分成更多的子空间(可以理解为模型的项越多)。而k值越大得到的模型其实是越简单的 - - 所以当k值越小,对于训练集的预测更加精确,近似误差会越小(因为你选择了更加复杂的模型去预测训练集)。当k值越大,对于训练集的预测则不会那么准确,所以近似误差会越大(因为你选择了更加简单的模型去预测)。 而另一方面,由于设定了比较小的k值,模型比较复杂就会产生过度拟合(overfitting)的问题。
2.K均值聚类算法(K-means)
k-means算法是一种简单的迭代型聚类算法,采用距离作为相似性指标,从而发现给定数据集中的K个类,且每个类的中心是根据类中所有值的均值得到,每个类用聚类中心来描述。对于给定的一个包含n个d维数据点的数据集X以及要分得的类别K,选取欧式距离作为相似度指标,聚类目标是使得各类的聚类平方和最小,即最小化:
结合最小二乘法和拉格朗日原理,聚类中心为对应类别中各数据点的平均值,同时为了使得算法收敛,在迭代过程中,应使最终的聚类中心尽可能的不变。
2.1.算法流程
K-means是一个反复迭代的过程,算法分为四个步骤(选择中心,计算距离,更新中心,计算目标函数):
- 选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心;
- 对于样本中的数据对象,根据它们与这些聚类中心的欧氏距离,按距离最近的准则将它们分到距离它们最近的聚类中心(最相似)所对应的类;
- 更新聚类中心:将每个类别中所有对象所对应的均值作为该类别的聚类中心,计算目标函数的值;
- 判断聚类中心和目标函数的值是否发生改变,若不变,则输出结果,若改变,则返回2)。
2.2.超参数k的选择
K作为该算法唯一的超参数,是一把双刃剑
优点:选定K,模型的训练就不需要干预了,很简单
缺点:K的影响很大,K选不好,模型就很差,导致性能不稳定
选取方法:
1.经验。。。
2.手肘法
选若干个k,比如2,3,4,5,6
分别跑一遍K-Means,稳定后,得到5个损失(上面的那个公式)
一般损失先下降快,后下降慢,存在一个拐点,如下图
K=4可能是一个不错的选择
因为曲线像手肘,所以叫手肘法。。。
3.ISODATA
该方法的K是动态变化的
如何变化?
该算法有分裂和合并操作
分裂:一类变两类
合并:两类变一类
1.选定初始K0,一般最后的K的范围大概是0.5K0~2K0。所以,即使K可以动态变化,K0的选择也得多少靠点谱
2.设定每类最少的样本数,如果少于最少样本数,这个类不能分裂
3.计算方差评定一个类中所有样本的分散程度,分散程度大于阈值,并且满足2中的条件,进行分裂
4.计算两个质心的距离,小于阈值,两个类合并
其余步骤和普通K-Means一样,只是每次聚类结束,要进行分裂和合并操作
2.3随机的质心不好对性能影响很大
解决方法:K-Means++
该方法和K-Means仅在初始选择质心的时候不同:
随机选取第1个质心
选第n+1个质心时,计算剩余样本点与前n个质心的距离
离前n个质心距离越远,该样本点被选为第n+1个质心的概率越大
2.4一些大厂真题
遇到非凸数据集的时候,比较难收敛,而且对噪声敏感,同时数据局部最优
3.凸优化问题
对于目标函数,我们限定是凸函数;对于优化变量的可行域(注意,还要包括目标函数定义域的约束),我们限定它是凸集。同时满足这两个限制条件的最优化问题称为凸优化问题,这类问题有一个非常好性质,那就是局部最优解一定是全局最优解。接下来我们先介绍凸集和凸函数的概念。
3.1.凸集
则称该集合称为凸集。如果把这个集合画出来,其边界是凸的,没有凹进去的地方。直观来看,把该集合中的任意两点用直线连起来,直线上的点都属于该集合。
3.2.凸函数
如果去掉上面的等号,则函数是严格凸的。对于多元函数,如果它是凸函数,则其Hessian矩阵为半正定矩阵。如果Hessian矩阵是正定的,则函数是严格凸函数。Hessian矩阵是由多元函数的二阶偏导数组成的矩阵。
根据多元函数极值判别法,假设多元函数在点M的梯度为0,即M是函数的驻点,则有:
1.如果Hessian矩阵正定,函数在该点有极小值
2.如果Hessian矩阵负定,函数在该点有极大值
3.如果Hessian矩阵不定,还需要看更高阶的导数
这可以看做是一元函数极值判别法对多元函数对推广
是凸函数。
3.3.凸优化
凸优化问题可以形式化的写成:
其中x为优化变量;f为凸目标函数;C是优化变量的可行域,是一个凸集。这个定义给了我们证明一个问题是凸优化问题的思路,即证明目标函数是凸函数(一般是证明它的Hessian矩阵半正定),可行域是凸集。
3.4.局部最优和全局最优
凸优化问题有一个重要的特性:所有局部最优解都是全局最优解。这个特性可以保证我们在求解时不会陷入局部最优解,即如果找到了问题的一个局部最优解,则它一定也是全局最优解,这极大的简化了问题的求解。之所以凸优化问题的定义要求目标函数是凸函数而且优化变量的可行域是凸集,是因为缺其中任何一个条件都不能保证局部最优解是全局最优解。
4.偏差和方差
朴素贝叶斯算法简单的假设了各个特征之间是无关的,是一个被严重简化了的模型。所以,对于这样一个简单模型,大部分场合都会bias部分大于variance部分,也就是高偏差,低方差
5.生成模型和判别模型
前一篇文章7.3也有提到。
下一篇介绍比较详细
这篇文章总结的不错
6.参数模型和非参数模型
(我至今不太理解,希望有大佬能够指点一下)
在统计学中,参数模型通常假设总体服从某个分布,这个分布可以由一些参数确定,如正态分布由均值和标准差确定,在此基础上构建的模型称为参数模型;非参数模型对于总体的分布不做任何假设或者说是数据分布假设自由,只知道其分布是存在的,所以就无法得到其分布的相关参数,只能通过非参数统计的方法进行推断。
所以说,参数模型和非参数模型中的“参数”并不是模型中的参数,而是数据分布的参数。
参数模型:根据预先设计的规则,例如方差损失最小,进行学习,参数模型例子:回归(线性回归、逻辑回归,逻辑回归假设数据满足伯努利分布)模型;最好可以看一下或者直接进行一下相关的推导;根据规则,拥有少部分数据就可以;
非参数模型:不需要事先假设规则,直接挖掘潜在数据中的规则;非参数模型例子:KNN,决策树,挖掘数据潜在的特征,所以比较灵活;当你拥有许多数据而先验知识很少时,非参数学习通常很有用,此时你不需要关注于参数的选取。
总结
1、通过对比参数模型和非参数模型的特点,可以得知参数模型对训练数据的大小要求不如非参数模型高,因为参数模型通过对拟合函数进行假设,所以只需要对参数进行拟合即可;而非参数模型由于需要从数据中发掘数据之间关系,所以对数据量要求较高。
2、通常说到的机器学习的黑盒特性,一般指的就是非参数机器学习模型。因为它不需要做出假设,并且需要拟合很多参数,所以它的解释性就降低了。所以相比而言,参数机器学习模型由于对数据做出了理想的假设,所以得到的模型更加鲁棒,所以解释性也就更高。
参考:
7.概率、似然函数、后样概率
7.1概率和似然函数
最大似然函数和最大后验概率估计
概率是指在给定参数的情况下,样本的随机向量X=x的可能性。而似然表示的是在给定样本X=x的情况下,参数为真实值的可能性。一般情况,对随机变量的取值用概率表示。而在非贝叶斯统计的情况下,参数为一个实数而不是随机变量,一般用似然来表示。
形式上,二者都类似于P(x|θ)。 如果把P(x|θ)看做一个函数,那么:
- 如果固定住θ,把x当做自变量,这时候一般称作概率,概率要满足归一性——也就是对于所有x,概率值累加起来等于1;
- (逻辑回归用的就是极大似然函数)如果固定住x,把θ当做自变量,这时候一般称作似然函数,它描述的是当θ取某个值时,一个事件x理论上发生的可能性有多大——其侧重点在于对比不同的θ,所以不需要满足归一性,只要不同θ得到不同的可能性就行了,重在相对大小。之所以只看重相对大小,是因为我们一般用“对似然函数求极大值”的方法来获得极值点θ,作为概率模型的参数的估计值。
7.2 最大似然函数和最大后验概率估计
这篇文章介绍很详细
8.牛顿法的原理
8.1介绍
⽜顿法是梯度下降法的进一步发展,梯度下降法利用目标函数的一阶偏导数信息、以负梯度方向作为搜索方向,只考虑目标函数在迭代点的局部性质;而牛顿法不仅使用目标函数的一阶偏导数,还进一步利⽤了目标函数的二阶偏导数,这样就考虑了梯度变化的趋势,因而能更全面地确定合适的搜索方向加快收敛,它具二阶收敛速度。但牛顿法主要存在以下两个缺点:
- 对目标函数有较严格的要求。函数必须具有连续的一、二阶偏导数,海森矩阵必须正定。
- 极端相当复杂,除需要计算梯度以外,还需要计算二阶偏导数矩阵和它的逆矩阵。计算量、存储量均很大,且均以维数N的平方比增加,当N很大时这个问题更更加突出。
8.2 牛顿法与梯度下降法
梯度下降法和牛顿法相比,两者都是迭代求解,不过梯度下降法是梯度求解,而牛顿法是用二阶的海森矩阵的逆矩阵求解。相对而言,使用牛顿法收敛更快(迭代更少次数)。但是每次迭代的时间比梯度下降法长。至于为什么牛顿法收敛更快,通俗来说梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。
9.拟牛顿法的原理
⽜顿法虽然收敛速度快,但是计算过程中需要计算目标函数的二阶偏导数,计算复杂度较⼤。而且有时目标函数的海森矩阵无法保持正定,从而使⽜顿法失效。为了克服这两个问题,⼈们提出了拟牛顿法。这个方法的基本思想是:不⽤⼆阶偏导数而构造出可以近似海海森矩阵或者海森矩阵的逆的正定对称阵,在拟⽜顿的条件下优化目标函数。不同的构造⽅法就产生了不同的拟牛顿法。
也有人把“拟牛顿法”翻译成“准牛顿法”,其实都是表示“类似于牛顿法”的意思,因此只是对算法中⽤用来计算搜索方向的海森矩阵(或海森矩阵的逆)作了近似计算罢了。
10.分层抽样
在机器学习多分类任务中有时候需要针对类别进行分层采样,比如说类别不均衡的数据,这时候随机采样会造成训练集、验证集、测试集中不同类别的数据比例不一样,这是会在一定程度上影响分类器的性能的,这时候就需要进行分层采样保证训练集、验证集、测试集中每一个类别的数据比例差不多持平。
分层抽样利用事先掌握的信息,充分考虑了保持样本结构和总体结构的一致性,当总体由差异明显的几部分组成的时候,适合用分层抽样
11.各种熵
11.1.信息熵
类别的信息:信息量的度量就等于不确定性的多少。
为了计算熵,我们需要计算所有类别所有可能包含的信息期望值(由离散型随机变量的期望计算公式可知)
遍历相乘再相加,可以使用内积计算熵。
它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大。
信息熵,被用来度量信息的无序程度(信息熵越大,越无序,等于 0 时,意味着全部类别都相同,完全有序)
注:决策树计算信息增益和信息增益比就是用到信息熵
11.2.条件熵(Conditional entropy)
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性。条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 定义为 X 给定条件下 Y 的条件概率分布的熵对 X 的数学期望:
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 相当于联合熵
H
(
X
,
Y
)
H(X,Y)
H(X,Y)减去单独的熵
H
(
X
)
H(X)
H(X),即
H
(
Y
∣
X
)
=
H
(
X
,
Y
)
−
H
(
X
)
H(Y|X)=H(X,Y)−H(X)
H(Y∣X)=H(X,Y)−H(X),可以这样理解,描述 X 和 Y所需的信息是描述 X 自己所需的信息,加上给定 X 的条件下具体化 Y 所需的额外信息。证明如下:
11.3相对熵 (Relative entropy),也称KL散度 (Kullback–Leibler divergence)
相对熵可以用来衡量两个概率分布之间的差异,上面公式的意义就是求 p 与 q 之间的对数差在 p 上的期望值。
11.4交叉熵(Cross entropy)
现在有关于样本集的两个概率分布
p
(
x
)
p(x)
p(x) 和
q
(
x
)
q(x)
q(x),其中
p
(
x
)
p(x)
p(x)为真实分布,
q
(
x
)
q(x)
q(x) 非真实分布。如果用真实分布
p
(
x
)
p(x)
p(x) 来衡量识别别一个样本所需要编码长度的期望(平均编码长度)为:
如果使用非真实分布
q
(
x
)
q(x)
q(x) 来表示来自真实分布
p
(
x
)
p(x)
p(x)的平均编码长度,则是
(因为用
q
(
x
)
q(x)
q(x)来编码的样本来自于分布
q
(
x
)
q(x)
q(x),所以
H
(
p
,
q
)
H(p,q)
H(p,q) 中的概率是
p
(
x
)
p(x)
p(x))。此时就将
H
(
p
,
q
)
H(p,q)
H(p,q) 称之为交叉熵。
11.5.总结
1)信息熵是衡量随机变量分布的混乱程度,是随机分布各事件发生的信息量的期望值,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大;信息熵推广到多维领域,则可得到联合信息熵;
2)条件熵表示的是在 X给定条件下,Y 的条件概率分布的熵对 X的期望。
3)相对熵可以用来衡量两个概率分布之间的差异。
4)交叉熵可以来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
或者:
1)信息熵是传输一个随机变量状态值所需的比特位下界(最短平均编码长度)。
2)相对熵是指用 q 来表示分布 p 额外需要的编码长度。
3)交叉熵是指用分布 q 来表示本来表示分布 p 的平均编码长度。
12.正则化
这篇文章对正则化讲得很好。
L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓“惩罚”是指对损失函数中的某些参数做一些限制。
12.1.L2正则化为什么能降低过拟合程度?
正则化之所以能够降低过拟合的原因在于,正则化是结构风险最小化的一种策略实现。给loss function加上正则化项,能使得新得到的优化目标函数h = f+normal,需要在f和normal中做一个权衡(trade-off),如果还像原来只优化f的情况下,那可能得到一组解比较复杂,使得正则项normal比较大,那么h就不是最优的,因此可以看出加正则项能让解更加简单,通过降低模型复杂度,得到更小的泛化误差,降低过拟合程度。
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。
12.2.L1正则化和L2正则化区别
对于线性回归模型,使用L1正则化的模型建叫做Lasso回归,使用L2正则化的模型叫做Ridge回归(岭回归)
- L1正则化就是在loss
function后加正则项为L1范数,加上L1范数容易得到稀疏解(0比较多)。L1正则化是指权值向量w中各个元素的绝对值之和。L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。 - L2正则化就是loss function后加正则项为L2范数的平方,加上L2正则得到的解比较平滑(不是稀疏)。但是同样能够保证解中接近于0(但不是等于0,所以相对平滑)的维度比较多,降低模型的复杂度。L2正则化是指权值向量w中各个元素的平方和然后再求平方根。L2正则化可以防止模型过拟合;一定程度上,L1也可以防止过拟合
12.3.为什么 L1 正则可以产生稀疏模型(很多参数=0),而 L2 正则不会出现很多参数为0的情况?
答:
上面提到L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择