机器学习的问题更多的对算法模型的优化,特征工程也属于对算法模型的优化,这一点在后面均有体现。
说明:本文是对部分机器学习的算法模型的思想进行抽取,不会出现详细的推导。
先看一下要掌握的算法有哪些,我个人觉得部分算法有点偏,不过应该是在某个领域里有应用而且效果很好,否则不会成为必掌握的算法。
1、线性函数的表示:
2、cost function,亦即最小二乘法估计:
3、为防止过拟合,加入正则化:
首先明确logistic回归不是回归,而是线性分类器。
1、logistic函数表达式为:
2、logistic回归主要是通过极大似然来估计待求参数 Θ 的值,样本的后验概率为:
3、可用凸优化理论中的牛顿法,梯度下降法等方法最小化cost function,此处使用梯度下降法求最优解:
缺点:
* 容易欠拟合,一般准确度不太高;
* 只能处理两分类问题(在此基础上衍生出来的softmax可以用于多分类),且必须线性可分。
决策树中关键点就是选择一个最优属性进行分枝,位于决策树上属性的重要度依次递减,信息增益可用于度量属性的重要度,因此要深入理解信息增益及其计算。
1、信息熵定义,n表示有n个分类类别:
2、增益率
3、基尼指数–CART决策树选择属性的标准
基尼值:
优点:计算量简单,可解释性强,比较适合处理有缺失属性值的样本,能够处理不相关的特征;
缺点:容易过拟合,对决策树进行剪枝处理以及使用随机森林算法都能减小过拟合现象。
1、贝叶斯计算公式:
2、为避开上面的问题,朴素贝叶斯分类器基于属性条件独立性假设,将上式变为:
3、Laplacian correction,如果P(x|c)中的某一项为0,则其联合概率的乘积也可能为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k, 分母加k的原因是使之满足全概率公式)。
优点:对小规模的数据表现很好,适合多分类任务,适合增量式训练。
缺点:对输入数据的表达形式很敏感。
有时候因为样本的产生和隐含变量有关(隐含变量是不能被观察出的变量)。
若基于 Θt 计算隐变量Z的概率分布 P(Z|X,Θt) ,则EM为:
* E步(Expectation):用参数 Θt 推断隐变量发布 P(Z|X,Θt) ,并计算对数似然关于Z的期望;
1、KNN的主要内容如下:
1. 计算训练样本和测试样本中每个样本点的距离(常见的距离度量有欧式距离,马氏距离等);
2. 对上面所有的距离值进行排序;
3. 选前k个最小距离的样本;
4. 根据这k个样本的标签进行投票,得到最后的分类类别;
2、如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过交叉验证获取。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。KNN算法对距离公式较为“敏感”;
3、近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。
优点:
1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2. 可用于非线性分类;
3. 训练时间复杂度为O(n);
4. 准确度高,对数据没有假设,对outlier不敏感;
缺点:
1. 计算量大,容易造成内存溢出,需要大量的内存;
2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
SVM 和 LDA 模型可谓是对数学能力和思维的极大考验,它的推导过程有必要理解掌握。
1、SVM核心思想一:最大间隔
将训练集中的正负样本最大程度的分隔开,那么该分隔线应位于训练样本中距离分隔边界垂直距离最近的样本点的“正中间”,这样的分割线具有最好的鲁棒性和泛化能力。
2、SVM核心思想二:决策公式
将上面的最大间隔公式统一起来,且决策边界上的点(support vector)要满足最大间隔要求,因为y只能取1或-1,所以决策公式为:
3、SVM核心思想三:目标函数
取决策边界上的正负样本点做向量运算,可得决策边界之间的距离为:
4、SVM核心思想四:优化理论
对下式进行优化,它本身就是一个convex quadratic programming–凸二次规划问题,能直接优化。
5、再回决策公式
现在得决策公式变为:
6、SVM的终极杀器:核方法–kernel
当样本线性不可分时,将样本映射到高维空间使其能线性可分,将﹤x, u﹥替换为其他核方法即可实现,其余部分推导类似。核函数:
7、SMO
发现我们还有 α 没有求出,这就是SMO存在得理由。SMO的思想:
* 选取一对需要更新的 αi 和 αj ,固定其他 α 参数;
* 求解更新后的 α 。
代入下式循环迭代直至满足要求。
8、Hinge loss
Hinge loss与logistic回归有关,线性版的SVM。
优点:
* 可用于线性/非线性分类,也可以用于回归;
* 低泛化误差;
* 容易解释;
缺点:
* 对参数和核函数的选择比较敏感;
* 原始的SVM只比较擅长处理二分类问题;
* 时间复杂度高O(n^3),不能承载大数据的要求.
SVM的终极核心是最大间隔,它的思想很重要。此处我并没有给图,不过结合资料看时没有问题的。
参考:
支持向量机通俗导论(理解SVM的三层境界)
周志华老师的《机器学习》
Ng老师的《machine learning》视频
林轩田老师的《机器学习技法》视频
七月在线冯老师的视频
在做特征工程时,id 一般都不用,这时可以根据id对数据进行聚类,然后再根据聚类结果给一个clustering id。在社交网络中对某人的社交关系也会使用聚类。
优点:
* (1)k-means算法是解决聚类问题的一种经典算法,算法简单、快速;
* (2)对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<
我们都知道当属性太多、维度过高会使得数据变稀疏从而加大计算的开销,有效信息被“埋藏得”更深,此时通过降低维度来缓解该情况,最常见的降维算法是:PCA算法和LDA算法,这里有一篇文章对此有详细的说明,再加上书籍的补充就很容易理解。四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
在这篇文章里面还介绍了另外的两种降维方法。
到此处,我们看到了每个算法都有各自的优缺点,那我们有什么办法可以尽量的避免一部分算法的缺陷吗?都这么说啦!肯定有的,但不能完全避免,只是减小算法缺陷在使用的过程中所造成的影响。下图是集成学习器的图示。
个体学习器之间依赖性强、必须串行生成的序列化方法,代表是Boosting;另一个是个体学习器之间的依赖性不强、可以同时生成的并行化方法,代表是Bagging和Random Forest。
1、Boosting的代表AdaBoost
Gradient Boosted Decision Tree(GBDT)的特点:
1. Adaboost的Regression版本;
2. 把残差作为下一轮的学习目标;
3. 最终的结果有加权和值得到,不再是简单的多数投票:
2、Bagging和Random Forest
Bagging对分类任务使用简单投票法,对回归问题使用简单的平均法。Bagging可以不用修改就可用于多分类、回归任务中,这点与AdaBoost不同。在像决策树和神经网络等易受样本扰动的学习器上效果较为明显。
Random Forest会随着个体学习器的增多,通常会收敛到更低的泛化误差,而且它的训练效率优于Bagging。
XGBoost可谓是kaggle比赛神奇啊,最近Microsoft开源了功能与XGBoost相同的库,叫LightGBM,它的速度和准确度稍优于XGBoost。
pLSA跟LDA的本质区别就在于它们去估计未知参数所采用的思想不同,前者采用的是频率派思想,后者采用的是贝叶斯派思想。LDA就是在pLSA的基础上加层贝叶斯框架,即LDA就是pLSA的贝叶斯版本。
LDA模型得公式推导很麻烦,但模型思路和我们的思维过程类似。拆分后可变为以下得5步骤:
1. 一个函数:gamma函数;
2. 四个分布:二项分布、多项分布、beta分布、Dirichlet分布;
3. 一个概念和一个理念:共轭先验和贝叶斯框架;
4. 两个模型:pLSA、LDA;
5. 一个采样:Gibbs采样
具体推导过程参考 通俗理解LDA主题模型
1、以下是两种常用的归一化方法:
1、min-max标准化(Min-Max Normalization)
也称为离差标准化,是对原始数据的线性变换,使结果值映射到[0 - 1]之间。转换函数如下:
2、归一化的作用
1. 去掉量纲和数值跨越幅度太大的影响;
2. 控制模型的复杂度,光滑性。复杂性越小且越光滑的目标函数泛化能力越强。而加入规则项能使目标函数复杂度减小,且更光滑。如梯度下降法;
3. 系数越小,模型越简单,而模型越简单则泛化能力越强(Ng宏观上给出的解释);
4. 可以看成是权值的高斯先验。
异常检测算法思路如下:
1. 选定容易出错的n个特征{x(i)1,x(i)2,…,x(i)n}作为变量;
2. 计算m个样本的平均值和方差:
其中的 ε 也是通过交叉验证得到的,也就是说在进行异常检测时,前面的 p(x) 的学习是用的无监督,后面的参数 ε 学习是用的有监督。那么为什么不全部使用普通有监督的方法来学习呢(即把它看做是一个普通的二分类问题)?主要是因为在异常检测中,异常的样本数量非常少而正常样本数量非常多,因此不足以学习到好的异常行为模型的参数,因为后面新来的异常样本可能完全是与训练样本中的模式不同。另外,上面是将特征的每一维看成是相互独立的高斯分布,其实这样的近似并不是最好的,但是它的计算量较小,因此也常被使用。更好的方法应该是将特征拟合成多维高斯分布,这时有特征之间的相关性,但随之计算量会变复杂,且样本的协方差矩阵还可能出现不可逆的情况(主要在样本数比特征数小,或者样本特征维数之间有线性关系时)。
常见对分布的处理
* 对于高斯分布的数据,直接运用以上算法就好;
* 但是对于非高斯分布的数据,虽然也可是使用上面的算法,但是效果不是很好,所以我们尽量将非高斯分布转化成(近似)高斯分布,然后再进行处理;
* 数据整体偏小,可以求ln(x)或者xa,0
Apriori是关联分析中比较早的一种方法,主要用来挖掘那些频繁项集合。其核心思想是:
1. 如果一个项目集合不是频繁集合,那么任何包含它的项目集合也一定不是频繁集合;
2. 如果一个项目集合是频繁集合,那么它的任何非空子集也是频繁集合。
这两句话看起来很简单,不过要体会到其中的深层次的含义可以去看看当时提出该算法的paper。
Aprioir需要扫描项目表多遍,从一个项目开始扫描,舍去掉那些不是频繁的项目,得到的集合称为L,然后对L中的每个元素进行自组合,生成比上次扫描多一个项目的集合,该集合称为C,接着又扫描去掉那些非频繁的项目,重复… 这样扫描其时间复杂度和数据库的I/O开销会很大。
具体的做法参考:《machine learning in action》这本书。
FP Growth是一种比Apriori更高效的频繁项挖掘方法,它只需要扫描项目表2次。其中第1次扫描获得当个项目的频率,去掉不符合支持度要求的项,并对剩下的项排序。第2遍扫描是建立一颗FP-Tree(frequent-patten tree)。这篇文章的讲解还是不错的:频繁项集挖掘算法之FPGrowth
博文:
整理本文的起点来源于该博文:机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
支持向量机通俗导论(理解SVM的三层境界)
四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
通俗理解LDA主题模型
该文档由Microsoft为使用自家的Azure云平台而写,但内容都是通用的。How to choose algorithms for Microsoft Azure Machine Learning
异常检测部分:机器学习——异常检测
频繁项集挖掘算法之FPGrowth
书籍部分:
《machine learning in action》–> 中文版《机器学习实战》
周志华《机器学习》
《PRML》
视频:
Ng老师的《machine learning》视频
林轩田老师的《机器学习技法》视频
七月在线冯老师的视频