//2015年5月1日
//摘自http://blog.csdn.net/u013599826/article/details/45418707
//还有一个模块是关注机器学习在工业界运用时所做的优化算法;特别是协同过滤、关联规则
四、逻辑斯蒂回归
和普通线性回归相比,在类别变量的使用上有了突破。
实际上是一层人工神经网络,训练方式等同最大熵
广义线性模型:因变量不同分布:多重线性,逻辑斯蒂,泊松回归
优点:实现简单;分类时速度快;输出的是一个概率值(重要)
输出的是一个概率值:实际使用时往往不是取P>0.5的去做预测,可能是取top100等等。
缺点:线性模型不咋样;容易欠拟合;只处理二分类问题;需要大样本量;
问题是很多人不会用逻辑斯蒂回归,类别变量要处理成多个dummy变量就不说了。对连续变量该算法是有假设的。
假设了x与logit(P)呈线性关系。往往不符合此假设,实践中应考虑使用dummy变量,可获得非线性特性。
注意:往往考到最优化算法,梯度下降等等。对大数据量用随机梯度下降。还会考到逻辑回归算法的推导
五、朴素贝叶斯:
注意一:朴素贝叶斯如何处理连续特征?
假设服从高斯分布
注意二:如果中的某一项为0,则其联合概率的乘积也可能为0,即2中公式的分子为0,为了避免这种现象出现,一般情况下会将这一项初始化为1,当然为了保证概率相等,分母应对应初始化为2(这里因为是2类,所以加2,如果是k类就需要加k,术语上叫做laplace光滑, 分母加k的原因是使之满足全概率公式)。
朴素贝叶斯的优点:对小规模的数据表现很好;适合多分类任务;适合增量式训练(重要)。
适合增量式训练:数据流;一个算法不一定有权限访问之前的样本来进行训练,如处理spam。
缺点:对数据稀疏问题过于敏感(laplace光滑);假设特征间独立不相关(决策树可稍微解决一下)
其实朴素贝叶斯的缺点其他算法也解决不了,朴素贝叶斯的真正缺点是作为一个生成模型,它的准确率不高。
六、决策树:
搞清楚ID3,C4.5,随机森林的区别
ID3 :多叉树;递归过程;子集含有单个特征后返回调用处
C4.5:用信息增益率而不是信息增益选择特征,克服了选择偏向取值多的特征;剪枝;连续属性离散化;对缺失值的处理
决策树的优点:
计算量简单;可解释性强(指出树的深度往往过大,已经失去了可解释性);比较适合处理有缺失属性值的样本;能够处理不相关的特征;
缺点:
预测还是比较慢;容易过拟合(后续出现了随机森林,减小了过拟合现象);
七、KNN算法:
会要求写出算法步骤;KNN在实际使用上使用KD Tree;
如何选择一个好的K值:如何选择一个最佳的K值,这取决于数据。一般情况下,在分类时较大的K值能够减小噪声的影响。但会使类别之间的界限变得模糊。一个较好的K值可通过各种启发式技术来获取,比如,交叉验证。另外噪声和非相关性特征向量的存在会使K近邻算法的准确性减小。
近邻算法具有较强的一致性结果。随着数据趋于无限,算法保证错误率不会超过贝叶斯算法错误率的两倍。对于一些好的K值,K近邻保证错误率不会超过贝叶斯理论误差率。
KNN算法的优点:
1. 思想简单,理论成熟,既可以用来做分类也可以用来做回归;
2. 可用于非线性分类;
3. 训练时间复杂度为O(n);
4. 准确度高,对数据没有假设,对outlier不敏感;
缺点:
1. 计算量大;
2. 样本不平衡问题(即有些类别的样本数量很多,而其它样本的数量很少);
3. 需要大量的内存;
重点是指出:
KNN最大的优点是,其特殊的算法思想,对某些问题特别适用。
维度灾难在KNN中的完美体现,不相关特征会严重影响KNN的准确性;
KNN中各种距离计算方式,非欧空间的距离计算公式。
SVM和KNN一起用,SVM得到的是数据全局的规律,而KNN关注数据local的规律
八、SVM:(肯定会考kernel)
要学会如何使用libsvm以及一些参数的调节经验(重要),另外需要理清楚svm算法的一些思路
按照道理,svm简单理论应该到此结束。不过还是要补充一点,即在预测时有:
那个尖括号我们可以用核函数代替,这也是svm经常和核函数扯在一起的原因。
SVM算法优点:
可用于线性/非线性分类,也可以用于回归;
正确率高,低泛化误差;
缺点:
对参数和核函数的选择比较敏感;
不能给出一个概率值;
原始的SVM只比较擅长处理二分类问题;
计算复杂度不高,但其实还是比较困难;
SVM如何选择kernel:线性核,径向基核,多项式核;多核学习;
九、Boosting:
主要以Adaboost为例,首先来看看Adaboost的流程图,如下:
Boosting算法的优点:
低泛化误差;
容易实现,分类准确率较高,没有太多参数可以调;
缺点:
对outlier比较敏感;
重点是当别人只能说出bagging,adaboosting时,你要提到 gradient boosting 算法
gradient boosting运用之GDBT:
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),好像在阿里内部用得比较多(所以阿里算法岗位面试时可能会问到),它是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的输出结果累加起来就是最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。
GBDT是回归树,不是分类树。其核心就在于,每一棵树是从之前所有树的残差中来学习的。
关于GDBT的介绍可以可以参考:GBDT(MART) 迭代决策树入门教程 | 简介。