笔记内容包括第一部分5-8全章,大部分为使用经验
支持向量机(简称SVM)是一个功能强大并且全面的机器学习
模型,它能够执行线性或非线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一,任何对机器学习感兴趣的人都应该在工具箱中配备一个。SVM特别适用于中小型复杂数据集的分类。
在Scikit-Learn的SVM类中,可以通过超参数C来控制这个平衡:C值越小,则街道越宽,但是间隔违例也会越多。
LinearSVC类会对偏置项进行正则化,所以你需要先减去平均
值,使训练集集中。如果使用StandardScaler会自动进行这一步。此外,请确保超参数loss设置为"hinge",因为它不是默认值。最后,为了获得更好的性能,还应该将超参数dual设置为False,除非特征数量比训练实例还多。
增加gamma值会使钟形曲线变得更窄,因此每个实例的影响范围随之变小:决策边界变得更不规则,开始围着单个实例绕弯。反过来,减小gamma值使钟形曲线变得更宽,因而每个实例的影响范围增大,决策边界变得更平坦。所以就像是一个正则化的超参数:模型过度拟合,就降低它的值,如果拟合不足则提升它的值(类似超参数C)。
还有一些其他较少用到的核函数,例如专门针对特定数据结构的核函数。字符串核常用于文本文档或是DNA序列(如使用字符串子序列核或是基于莱文斯坦距离的核函数)的分类。
先从线性核函数开始尝试,特别是训练集非常大或特征非常多
的时候。如果训练集不太大,你可以试试高斯RBF核,大多数情况下它都非常好用。如果你还有多余的时间和计算能力,你可以使用交叉验证和网格搜索来尝试一些其他的核函数,特别是那些专门针对你的数据集数据结构的核函数。
与SVM一样,决策树也是一种多功能的机器学习算法,它可以实现分类和回归任务,甚至是多输出任务。它们功能强大,能够拟合复杂的数据集。
决策树的特质之一就是它们需要的数据准备工作非常少。特
别是,完全不需要进行特征缩放或集中。
对于小型训练集(几千个实例以内),ScikitLearn可以通过对数据预处理(设置presort=True)来加快训练,但是
对于较大训练集而言,可能会减慢训练的速度。
基尼不纯度的计算速度略微快一些,所以它是个不错的默认选择。它们的不同在于,基尼不纯度倾向于从树枝中分裂出最常见的类别,而信息熵则倾向于生产更平衡的树。
为避免过度拟合,需要在训练过程中降低决策树的自由度。
在Scikit-Learn中,这由超参数max_depth控制(默认值为None,意味着无限制)。减小max_depth可使模型正则化,从而降低过度拟合的风险。
DecisionTreeClassifier类还有一些其他的参数,同样可以限决策树的形状:min_samples_split(分裂前节点必须有的最小样本数),min_samples_leaf(叶节点必须有的最小样本数量),min_weight_fraction_leaf(跟min_samples_leaf一样但表现为加权实例总数的占比)max_leaf_nodes(最大叶节点数量),以及max_features(分裂每个节点评估的最大特征数量)。增大超参数min_*或是减小max_*将使模型正则化。
还可以先不加约束地训练模型,然后再对不必要的节点进行
剪枝(删除)。
更概括地说,决策树的主要问题是它们对训练数据中的小变化非常敏感。
例如,你可以训练一组决策树分类器,每一棵树都基于训练集不同的随机子集进行训练。做出预测时,你只需要获得所有树各自的预测,然后给出得票最多的类别作为预测结果(见第6章最后一道练习)。这样一组决策树的集成被称为随机森林,尽管很简单,但它是迄今可用的最强大的机器学习算法之一。
硬投票分类器、软投票分类器
当预测器尽可能互相独立时,集成方法的效果最优。获得多
种分类器的方法之一就是使用不同的算法进行训练。这会增加它们犯不同类型错误的机会,从而提升集成的准确率。
还有另一种方法是每个预测器使用的算法相同,但是在不同的训练集随机子集上进行训练。采样时如果将样本放回,这种方法叫作bagging(bootstrap aggregating的缩写,也叫自举汇聚法);采样时样本不放回,这种方法则叫用pasting。
在Scikit-Learn中,创建BaggingClassifier时,设置oob_score=True,就可以请求在训练结束后自动进行包外评估。
随机森林在树的生长上引入了更多的随机性:分裂节点时不再是搜索最好的特征,而是在一个随机生成的特征子集里搜索最好的特征。这导致决策树具有更大的多样性,(再一次)用更高的偏差换取更低的方差,总之,还是产生了一个整体性能更优的模型。
Scikit-Learn在训练结束后自动计算每个特征的重要性。通过变量feature_importances_你就可以访问到这个计算结果。所以,如果想快速了解什么是真正重要的特征,随机森林是一个非常便利的方法,特别是当你需要执行特征选择的时候。
提升法(Boosting,最初被称为假设提升) 是指可以将几个弱学习器结合成一个强学习器的任意集成方法。大多数提升法的总体思路是循环训练预测器,每一次都对其前序做出一些改正。可用的提升法有很多,但目前最流行的方法是AdaBoost和梯度提升。
如果你的AdaBoost集成过度拟合训练集,你可以试试减少估
算器数量,或是提高基础估算器的正则化程度。
另一个非常受欢迎的提升法是梯度提升(Gradient Boosting)。跟AdaBoost一样,梯度提升也是逐步在集成
中添加预测器,每一个都对其前序做出改正。不同之处在于,它不是像AdaBoost那样在每个迭代中调整实例权重,而是让新的预测器针对前一个预测器的残差进行拟合。
投影和流形学习