机器学习|《python机器学习基础教程》笔记(第2章监督学习)(第2部分)

这是《python机器学习基础教程》的第二章——监督学习第二部分,上一章笔记中说到朴素贝叶斯分类器,这次继续其他的学习算法
决策树 决策树是广泛应用于回归和分类问题的一种模型,其实决策树就和我一开始认为的机器学习的策略有点类似,就是很多很多的if判断语句,来决定最后的结果。学习决策树,就是学习一系列的if/else问题,使我们可以得到最后的答案。决策树的模型若不进行一些干预,很容易产生过拟合的状态,模型会用大量的if/else语句,使得模型在训练数据上达到100%的效果,但是很明显,泛化能力将大打折扣。防止决策树过拟合,也就是控制决策树的复杂度(越深的树,对应越多的if/else,决策树也就越复杂),主要有两种方法,一是及早停止树的继续生长,也叫预剪枝。另外一种是先构造树,待构造完毕后,删除或者折叠信息量较少的节点,这也叫后剪枝

from sklearn.tree import DecisionTreeClassifier,DecisionTreeRegressor

sklearn 中的决策树实现了预剪枝,我们可以传入参数 max_depth = x 来控制树的深度。
至于决策树的可视化可以使用tree模块来查看,这里不多讲,因为可以预见,当树的深度较大时,查看整个树的结构本身,几乎完全看不出什么有用的信息,还好,我们有方法可以查看树的某些信息,我们可以直接查看决策树的某些属性来查看构建该决策树时的特性的重要程度,在属性feature_importances_ 中,这个属性的值将体现出特征的重要性,不过要注意,如果某个特征的feature_importances_属性值很小,并不能说明该特征和结果无关,只能说该特征没有被决策树选中,有可能其他特征以及包含该特征的信息。另外,feature_importances_始终是一个正值,所以它无法反应特征影响的是正结果还是负结果。另外决策树还有一个特点,利用决策树进行回归分析时,结果不能外推,也就是不能用于训练集意外的数据,那岂不是对于回归问题就没有用了?怎么说呢,作者说到这是树预测的特殊性质。若是提供的预测数据超过了训练数据的范围,树则无法进行预测了,但是若是预测数据在训练数据范围内,还是可以给出预测结果的,我是这么理解。
决策树非常容易过拟合(即使进行了预剪枝),泛化能力较差,所以通常,我们都会使用集成的方法来代替单棵决策树,也就是下面介绍的森林。
决策树集成 集成:合并多个机器学习模型来构建更强大的模型,已经证明有两种集成模型对于大量的分类和回归问题都有很好的效果,就是 随机森林 和 梯度提升决策树
随机森林 所谓随机森林,我们可以这样理解,前面说到,单个决策树很容易产生过拟合,那么我们是不是可以这样做,构建大量的决策树,而每个决策树的预测结果可能都比较好,但是都对部分数据产生过拟合,那么我们可以对这些树取平均值,这样既保证了较好的预测效果,同时降低了过拟合。
为此我们应该构建大量决策树,同时要让每个决策树都尽量不一样,这就是随机森林中随机的意思。随机的方式通常有两种,一是在构造决策树时选择数据点,二是只选择部分特征
from sklearn.ensemble import RandomForestRegressor,RandomForestClassifier

其中参数n_estimators 决定树的个数,另外还有一个max_feature参数,决定每棵树选特征的个数最大值,若是max_feature等于n_feature(总特征数),则相当于没有添加随机性,若max_feature = 1,则每棵树都有很大差异,相当于只是对某单个特征搜索不同的阀值。值得庆幸的是,默认状态下的参数通常就会给出较好的结果。
梯度提升回归树(梯度提升决策树) 虽然名字有回归,但是该模型可用于回归或者分类问题。
和随机森林不同,梯度提升回顾树默认没有随机性,而是连续的构造树,利用一棵树来纠正前一棵树的错误(这也是名字中回归的意思),要说明的是,梯度提升对于参数的设置更敏感,合适的参数将大大提高准确率。
其中参数learning_rate 决定每棵树纠正前一棵树的强度,越大意味着越复杂的模型
梯度提升决策树是监督学习算法中最强大也是最常用的模型之一,它需要我们仔细调参,训练时间也较长,不过和随机森林一样,这两个方法不需要对数据进行缩放,但是这两个方法都不适合于高维稀疏矩阵。
核支持向量机(SVM) 这里将只记录其用于分类问题的情况,用于分类的在SVC中实现,同样用于回归的在SVR中实现,之前介绍过线性模型用于回归和分类,SVM则可以推广大更复杂的模型上
from sklearn.svm import LinearSVC

我又花了点时间把这一节读了一遍,很多知识点我发现不结合图片来看的话会很难说明白(可以预见我又会写很多的圈话来解释),所以我不写了。
【机器学习|《python机器学习基础教程》笔记(第2章监督学习)(第2部分)】在第二章的最后还介绍了下(神经网络)深度学习,这里不记录,其实神经网络也是一种模型,深度学习感觉是特殊的一种神经网络。若有精力,放在《深度学习入门基于python的理论和实现》一书的笔记中去好了。

    推荐阅读