一、高斯混合模型GMM
GMM算法(服从混合正态分布)作为EM算法族的一个例子,它指定了各个参与杂合的分布都是高斯分布,即分布参数表现为均值Mu和方差Sigma。通过EM算法作为计算使用的框架,迭代地算出各个高斯分布的参数。
二、GMM和k-means的比较
相同点
均为无监督方法,都是迭代执行的算法,且迭代的策略也相同:算法开始执行时先对需要计算的参数赋初值,然后交替执行两个步骤,一个步骤是对数据的估计(k-means是估计每个点所属簇;GMM是计算隐含变量的期望;);第二步是用上一步算出的估计值重新计算参数值,更新目标参数(k-means是计算簇心位置;GMM是计算各个高斯分布的中心位置和协方差矩阵)
不同点
1)需要计算的参数不同:k-means是簇心位置;GMM是各个高斯分布的参数
2)计算目标参数的方法不同:k-means是计算当前簇中所有元素的位置的均值;GMM是基于概率的算法,是通过计算似然函数的最大值实现分布参数的求解的。
3)依据不同:K-means聚类利用数据点之间的欧式距离大小,将数据划分到不同的类别,欧式距离较短的点处于同一类。算法结果直接返回的是数据点所属的类别。
GMM假设所有数据点来自多个参数不同的高斯分布,给出的是每一个观测点由哪个高斯分量生成的概率,算法结果返回的是数据点属于不同类别的概率。
4)严谨性来说,用概率进行描述数据点的分类,GMM显然要比K-mean好很多。
5)一个更流行的做法是先用 K-means (已经重复并取最优值了)得到一个粗略的结果,然后将其作为初值(只要将 K-means 所得的 聚类中心传给 GMM即可),再用 GMM 进行细致迭代
三、时间序列模型之灰色系统与灰色预测法
灰色系统是相对于黑色系统和白色系统而言的。
白色系统:系统的内部特征是完全已知的,即系统的信息是完全充分的。
黑色系统:一个系统的内部信息对外界来说是一无所知的,只能通过他与外界的联系来加以观测研究。
灰色系统:一部分信息是已知的,另一部分信息是未知的,系统内各因素之间具有不确定关系。其特点是‘少数据建模’,着重研究‘外延明确,内涵不明确’的对象。
灰色系统是指“部分信息已知,部分信息未知“的”小样本“,”贫信息“的不确定系统,以灰色模型(G,M)为核心的模型体系。
灰色预测法:灰色预测法是一种对含有不确定因素的系统进行预测的方法 。它通过鉴别系统因素之间发展趋势的相异程度,即进行关联分析,并对原始数据进行生成处理来寻找系统变动的规律,生成有较强规律性的数据序列,然后建立相应的微分方程模型,从而预测事物未来发展趋势的状况。它用等时间距离观测到的反应预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或者达到某一特征量的时间。
优点:对于不确定因素的复杂系统预测效果较好,且所需样本数据较小;
缺点:基于指数率的预测没有考虑系统的随机性,中长期预测精度较差。
适用情形
• 序列性:用等时距观测到的反映预测对象特征的一系列数量值构造灰色预测模型,预测未来某一时刻的特征量,或达到某一
特征量的时间。(时间性或者说序列性是灰色预测的很重要的一个特征点)
• 少数据性:原始数据序列可以少到只有4个数据。
四、Boosting,AdaBoost,GBDT,XGBoost,LightGBM
Boosting方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。其基本思想是根据当前模型损失函数的负梯度信息来训练新加入的弱分类器,然后将训练好的弱分类器以累加的形式结合到现有模型中。这个过程是在不断地减小损失函数,使得模型偏差不断降低。但Boosting的过程并不会显著降低方差。这是因为Boosting的训练过程使得各弱分类器之间是强相关的,缺乏独立性,所以并不会对降低方差有作用。Boosting是一个加法模型,它是由若干个基函数及其权值乘积之和的累加,要想办法使损失函数的期望取最小值,又因为是加法模型,所以我每一步只对其中一个基函数及其系数进行求解,这样逐步逼近损失函数的最小值,也就是说要使损失函数最小,那就得使新加的这一项刚好等于损失函数的负梯度,这样不就一步一步使得损失函数最快下降。
AdaBoost:提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。这样一来,那些没有得到正确分类的数据,由于其权值的加大而受到后一轮的弱分类器的更大关注,于是,分类问题就被一系列的弱分类器“分而治之”。至于第二个问题,即弱分类器的组合,AdaBoost采取加权多数表决的方法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率较大的弱分类器的权值,使其在表决中起较小的作用。
GBDT和其它Boosting算法一样,通过将表现一般的数个模型(通常是深度固定的决策树)组合在一起来集成一个表现较好的模型。抽象地说,模型的训练过程是对一任意可导目标函数的优化过程。通过反复地选择一个指向负梯度方向的函数,该算法可被看做在函数空间里对目标函数进行优化。因此可以说Gradient Boosting = Gradient Descent + Boosting。
XGBoost是对GBDT的优化,原始的GBDT算法基于经验损失函数的负梯度来构造新的决策树,只是在决策树构建完成后再进行剪枝。而XGBoost在决策树构建阶段就加入了正则项。XGBoost通过对目标函数做二阶泰勒展开,从而求出下一步要拟合的树的叶子节点权重(需要先确定树的结构),从而根据损失函数求出每一次分裂节点的损失减小的大小,从而根据分裂损失选择合适的属性进行分裂。
lightGBM,基于决策树算法的分布式梯度提升框架,包含两个关键点:light即轻量级,GBM 梯度提升机。LightGBM是XGBoost的改进版,相比于前者,它添加了很多新的方法来改进模型,包括:并行方案、基于梯度的单边检测、排他性特征捆绑等。
五、AdaBoost V.S. GBDT
和AdaBoost一样,Gradient Boosting也是重复选择一个表现一般的模型并且每次基于先前模型的表现进行调整。不同的是,AdaBoost是通过提升错分数据点的权重来定位模型的不足而Gradient Boosting是通过算梯度(gradient)来定位模型的不足。因此相比AdaBoost, Gradient Boosting可以使用更多种类的目标函数,而当目标函数是均方误差时,计算损失函数的负梯度值在当前模型的值即为残差。而AdaBoost只给出了损失函数为指数损失函数。
六、xgboost vs GBDT
(1)GBDT迭代时只考虑了一阶导数,xgboost迭代时考虑了一阶、二阶导数,xgboost可以自定义损失函数,只需要一阶、二阶可导;
(2)xgboost在损失函数中添加了正则化项,防止过拟合;
(3)传统GBDT以决策树为基本分类器,xgboost还支持其他线性分类器,这时候xgboost相当于带正则化项的LR回归、线性回归;
(4)xgboost还引入了衰减(shrinkage,相当于学习速率)、列抽样,降低过拟合可能性;
(5)xgboost对于缺失值可以自动学习出分裂方向;
(6)训练事先排好序并以block的形式存储,可以并行计算,寻找特征的最佳分割点;
(7)由于底层支持容错的分布式通信框架rabit,xgboost支持分布式计算,可以运行在MPI,YARN上
七、lightGBM vs XGBoost
1)XGBoost使用基于预排序的决策树算法,每遍历一个特征就需要计算一次特征的增益,时间复杂度为O(datafeature)。
而LightGBM使用基于直方图的决策树算法,直方图的优化算法只需要计算K次,时间复杂度为O(Kfeature)
2)XGBoost使用按层生长(level-wise)的决策树生长策略,LightGBM则采用带有深度限制的按叶子节点(leaf-wise)算法。在分裂次数相同的情况下,leaf-wise可以降低更多的误差,得到更好的精度。leaf-wise的缺点在于会产生较深的决策树,产生过拟合。
3)支持类别特征,不需要进行独热编码处理
4)优化了特征并行和数据并行算法,除此之外还添加了投票并行方案
5)采用基于梯度的单边采样来保持数据分布,减少模型因数据分布发生变化而造成的模型精度下降
6)特征捆绑转化为图着色问题,减少特征数量
八、特征工程
时间戳处理
时间戳属性通常需要分离成多个维度比如年、月、日、小时、分钟、秒钟。分解类别属性
一些属性是类别型而不是数值型,举一个简单的例子,由{红,绿、蓝}组成的颜色属性,最常用的方式是把每个类别属性转换成二元属性,即从{0,1}取一个值。因此基本上增加的属性等于相应数目的类别,并且对于你数据集中的每个实例,只有一个是1(其他的为0),这也就是独热(one-hot)编码方式(类似于转换成哑变量)。
3.分箱/分区
将数值型属性转换成类别呈现更有意义,同时能使算法减少噪声的干扰,通过将一定范围内的数值划分成确定的块。举个例子,我们预测一个人是否拥有某款衣服,这里年龄是一个确切的因子。其实年龄组是更为相关的因子,所有我们可以将年龄分布划分成1-10,11-18,19-25,26-40等。
- 交叉特征
将两个或更多的类别属性组合成一个。当组合的特征要比单个特征更好时,这是一项非常有用的技术。数学上来说,是对类别特征的所有可能值进行交叉相乘。
假如拥有一个特征A,A有两个可能值{A1,A2}。拥有一个特征B,存在{B1,B2}等可能值。然后,A&B之间的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},并且你可以给这些组合特征取任何名字。但是需要明白每个组合特征其实代表着A和B各自信息协同作用。一个更好地诠释好的交叉特征的实例是类似于(经度,纬度)。
特征选择
自动选出对于解决问题最有用的特征子集,减少特征数量、降维,使模型泛化能力更强,减少过拟合,增强对特征和特征值之间的理解特征缩放
某些特征比其他特征拥有高得多的跨度值。举个例子,将一个人的收入和他的年龄进行比较,更具体的例子,如某些模型(像岭回归)要求你必须将特征值缩放到相同的范围值内。通过缩放可以避免某些特征比其他特征获得大小非常悬殊的权重值。特征提取
特征提取涉及到从原始属性中自动生成一些新的特征集的一系列算法,降维算法就属于这一类。特征提取是一个自动将观测值降维到一个足够建模的小数据集的过程。对于列表数据,可使用的方法包括一些投影方法,像主成分分析和无监督聚类算法。对于图形数据,可能包括一些直线检测和边缘检测,对于不同领域有各自的方法。
九、预处理函数
使用sklearn中的preproccessing库来进行数据预处理
十、为什么进行独热编码?
特征并不总是连续值,而有可能是分类值,如果将分类值用数字表示,效率会高很多。但是,即使转化为数字表示后,上述数据也不能直接用在我们的分类器中。因为,分类器往往默认数据数据是连续的,并且是有序的。为了解决上述问题,其中一种可能的解决方法是采用独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
例如:
自然状态码为:000,001,010,011,100,101
独热编码为:000001,000010,000100,001000,010000,100000
可以这样理解,对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
这样做的好处主要有:
解决了分类器不好处理属性数据的问题
在一定程度上也起到了扩充特征的作用
十一、特征选择的常见方法:
特征选择算法可能会用到评分方法来排名和选择特征,比如相关性或其他确定特征重要性的方法,更进一步的方法可能需要通过试错,来搜索出特征子集。
还有通过构建辅助模型的方法,逐步回归就是模型构造过程中自动执行特征选择算法的一个实例,还有像Lasso回归和岭回归等正则化方法也被归入到特征选择,通过加入额外的约束或者惩罚项加到已有模型(损失函数)上,以防止过拟合并提高泛化能力。
根据特征选择的形式又可以将特征选择方法分为3种:
Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。
Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
使用sklearn中的feature_selection库来进行特征选择
1.Filter
方差选择法:使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。
相关系数法:使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。
卡方检验:经典的卡方检验是检验定性自变量对定性因变量的相关性。选择卡方值排在前面的K个特征作为最终的特征选择
互信息法:经典的互信息也是评价定性自变量对定性因变量的相关性的,选择互信息排列靠前的特征作为最终的选取特征
2.Wrapper
递归特征消除法:使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。
3.Embedded
基于惩罚项的特征选择法:使用带惩罚项的基模型,除了筛选出特征外,同时也进行了降维。由于L1L1范数有筛选特征的作用,因此,训练的过程中,如果使用了L1L1范数作为惩罚项,可以起到特征筛选的效果
基于树模型的特征选择法:训练能够对特征打分的预选模型:GBDT、RandomForest和Logistic Regression等都能对模型的特征打分,通过打分获得相关性后再训练最终模型
十二、 如何证明根号2是无理数
反证法:
假设根号2是有理数,那么假设根号2=m/n(m,n都是正整数,且m,n互质,如果不互质,那么我们还可以约分,就没有意义了)
根号2=m/n 两边平方化简 得 2n2=m2
于是m一定要是偶数,可以设m=2s 其中s是正整数
那么2n2=4s2 化简n2=2s2
于是n也一定要是偶数,于是 m n 都是偶数 还可以继续约分,这就和假设m n互质相矛盾了,所以假设不成立,即根号2是无理数