《Python机器学习基础教程》监督学习总结

《Python机器学习基础教程》笔记

一、监督学习的分类

监督学习主要有两种:分类回归

分类问题的目标是预测类别标签,回归任务的目标是预测一个连续值

二、一些术语解释

泛化:从训练集中学习出的模型应用到测试集上的能力

过拟合:模型在训练集上表现良好,在测试集上表现不好

欠拟合:模型在训练集和测试集上表现均不好

特征工程:对已有特征做运算,导出新特征(例如,两个特征的积作为新特征)

方法链:在一行代码中完成几个部分的内容(例如,完成模型初始化、拟合和预测)

三、监督学习算法

监督学习算法有:k近邻、线性模型、朴素贝叶斯分类器、决策树、决策树集成、核支持向量机、神经网络。下面挨个介绍:


1.k近邻

原理:

①用于分类时:对于每个新数据点,考虑其与训练集中k个距离最近的邻居,将这些邻居中出现次数更多的类别作为预测结果

②用于回归时: 对于每个新数据点,考虑其与训练集中k个距离最近的邻居,将这些邻居的平均值作为预测结果

重要知识点:

邻居个数越多,决策边界越平滑,模型复杂度越低

②在Scikit-Learn中,k近邻分类在neighbors模块的KNeighborsClassifier中实现,k近邻回归在neighbors模块的KNeighborsRegressor中实现。

③KNeighbors分类器有2个重要参数:邻居个数数据点之间距离的度量方法。使用较小的邻居个数(3~5)往往能够得到比较好的结果,距离默认使用欧式距离。

④KNN模型容易理解,但是大数据集时预测速度慢不能处理具有很多特征的数据集线性模型就不存在这两个缺点

另,包含在Scikit-Learn中的数据集通常被保存为Bunch对象,里面包含真实数据以及一些数据集信息。关于Bunch对象。可以用点操作符来访问对象的值。


2.线性模型

原理:

利用输入特征的线性函数进行预测,预测公式为:,其中w包含每个特征坐标轴的斜率,b是y轴的偏移。

分类:

线性模型中还分为普通最小二乘法、岭回归、lasso。线性模型不仅可以用于回归,还可用于分类

①普通最小二乘法:寻找参数w和b,使得对训练集的预测值与真实值之间的均方误差最小

②岭回归:预测公式与普通最小二乘法相同,但是要对w进行L2正则化约束(惩罚系数向量L2范数,即欧式长度),w的所有元素都接近于0。

③Lasso:预测公式与普通最小二乘法相同,对w进行L1正则化约束(惩罚系数向量L1范数,即系数的绝对值和),约束过后,某些系数(w)刚好为0。

④线性模型用于二分类:

⑤线性模型用于多分类:每个类都学习一个二分类模型(“一对其余”,例如有A、B、C、D四类,分类器1的任务是将A类和非A类区分出来,分类器2的任务是将B类和非B类区分出来,...),在测试点上运行所有二分类器来进行预测,分数最高的分类器对应的类别即为预测结果。

重要知识点:

①在Scikit-Learn中,普通最小二乘法在linear_model模块的LinearRegression中实现;岭回归在linear_model模块的Ridge中实现;Lasso在linear_model模块的Lasso中实现。

②线性模型的“斜率”参数(w)被保存在coef_属性中,斜距(b)被保存在intercept_中

线性模型的主要参数是正则化参数,在回归模型中叫作alpha,在LinearSVC和LogisticRegression中叫C。alpha值较大或者C值较小,说明模型比较简单。如果把alpha设得非常小,则几乎会消除正则化的效果。

④线性模型的训练速度和预测速度非常快

⑤在实践中,一般首选岭回归,但如果特征很多,且只有几个是重要的,则选择Lasso更好。

⑥最常见的两种线性分类算法是Logistic回归和线性支持向量机,Logistic回归在linear_model模块的LogisticRegression中实现,支持向量机在svm模块的LinearSVC中实现。

另,Scikit-Learn总是将从训练数据中得出的值保存在以下划线结尾的属性中


3.朴素贝叶斯分类器

原理:

贝叶斯公式,通过单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据

分类:

Scikit-Learn中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB和MultinomialNB

①GaussianNB:可应用于任意连续数据,GaussianNB分类器计算每个类别中每个特征的平均值和标准差

②BernoulliNB:用于二分类。BernoulliNB分类器计算每个类别中每个特征不为0的元素个数

③MultinomialNB:用于多分类。MultinomialNB计算每个类别中每个特征的平均值

重要知识点:

①BernoulliNB和MultinomialNB主要用于文本分类

②BernoulliNB和MultinomialNB都只有一个参数alpha,用于控制模型复杂度。原理是向数据中添加alpha个值为正的虚拟点,可以将统计数据“平滑化”。alpha越大,平滑化越强,模型复杂度就越低。

③GaussianNB主要用于高维数据,而另外两种朴素贝叶斯模型则广泛用于稀疏计数数据,例如文本分类。

④朴素贝叶斯的训练和预测速度都很快


4.决策树

原理:

进行所有可能的测试,找出当前结点处对目标变量来说信息量最大的阈值(即找出在当前结点处,能更好区分各类数据的阈值),进行划分后,继续以上过程,直到满足精度要求。对新数据点进行预测时,首先查看这个点位于特征空间划分的那个区域,然后将该区域的多数目标值作为预测结果。

重要知识点:

①决策树的每个结点都包含一个测试,每个测试划分后的区域边界与坐标轴平行

③如果树中某个叶结点所包含的数据点的目标值都相同,那么这个叶结点就是纯的

③控制决策树的复杂度(防止过拟合)有两种常见的策略:预剪枝和(后)剪枝。预剪枝是及早停止树的生长,可通过限制数的最大深度(max_depth)、限制叶结点的最大数目(max_leaf_nodes)或者规定一个结点中数据点的最小数目(min_samples_leaf)来防止继续划分。后剪枝是先构造树,但随后删除或折叠信息量很少的结点

未剪枝的树容易过拟合,对新数据的泛化性能不佳。限制树的深度可以减少过拟合,这会降低训练集的精度,但可以提高测试集的精度。

⑤可以用树的特征重要性为每个特征对树的决策的重要性进行排序,如果每个特征重要性很小,很可能是因为另一个特征也包含了同样的信息。

⑥在将基于树的模型用于回归时,不能外推,也不能在训练数据范围之外进行预测。一旦输入超出了模型训练数据的范围,模型就只能持续预测最后一个已知数据点。

⑦算法完全不受数据缩放的影响,但经常会过拟合,泛化性能很差


5.决策树集成

原理:

合并多个决策树来构建更强大模型。

分类:

随机森林梯度提升决策树

①随机森林:每棵树以不同的方式过拟合,再对这些树的结果取平均值来降低过拟合。对于回归问题,对这些结果取平均值作为最终预测;对于分类问题,对所有的预测概率取平均值,然后将概率最大的类别作为预测结果。

②梯度提升决策树:采用连续的方式构造树,每棵树都试图纠正前一棵树的错误

重要知识点:

①随机森林的名字来自于将随机性添加到树的构造过程中。构造树的方法有两种,第一种是对数据有放回的自助采样,第二种是在每个节点处,随机选择特征的一个子集,并对其中一个特征寻找最佳测试。

②随机森林也可以给出特征重要性:将所有树的特征重要性求和并取平均。固定random_state可以将结果重现(伪随机)。

③随机森林拥有决策树的所有优点,并行计算也很容易,可以用n_jobs参数来调节使用的内核个数,n_jobs = -1表示使用计算机的所有内核。

对于维度非常高的稀疏数据(例如文本数据),随机森林的表现往往不是很好,线性模型可能更合算。随机森林需要更大的内存,训练和预测的速度也比线性模型要

⑤有两个可以调节的参数n_estimators(决策树棵数)max_features(选择的特征个数,决定每棵树的随机性大小)。n_estimators总是越大越好,但是所需的内存也就越多,训练时间也越长。

max_features一般用默认值就可以达到较好的效果,对于分类,max_features = sqrt(n_features);对于回归,max_features = n_features。

梯度提升回归树既可用于回归,有可用于分类

⑧梯度提升树通常使用深度很小(1~5)的树,添加的树越多,迭代性能越好。

⑨除了预剪枝与集成中树的数量之外,梯度提升的另一个重要参数是learning_rate(学习率),用于控制每棵树纠正前一棵树的错误强度。一般是根据时间和内存的预算选择合适的n_estimators,然后对不同的learning_rate进行遍历。

⑩梯度提升决策树主要缺点是需要仔细调参,而且训练时间可能会比较长。但是它不需要对数据进行缩放,也适用于二元特征与连续特征同时存在的数据集


6.核支持向量机

原理:

通过结合核变换,将数据映射到更高维空间,使支持向量机能处理不具线性特征的数据。

核技巧分类:

多项式核径向基函数

①多项式核:在一定阶数内计算原始特征所以可能的多项式

②径向基函数:将数据映射成某一高斯分布

重要知识点:

①支持向量机可以同时用于分类和回归,分类在SVC中实现,回归在SVR中实现。

②位于类别之间边界上的那些点叫支持向量

③核支持向量机在低维数据和高维数据(即很少特征和很多特征)上的表现都很好,但对样本个数的缩放表现不好

④核支持向量机的重要参数是正则化参数C,核的选择以及核相关的参数。径向基函数核只有一个参数gamma,它是高斯核宽度的倒数;gamma和C控制的都是模型复杂度,较大的值对应更复杂的模型,应同时条件。


7.神经网络

原理:

(还是去看书上的图吧,好理解一点(o(╥﹏╥)o))

重要知识点:

①神经网络往往需要很长的训练时间,在“均匀”(所有特征都具有相似的含义)数据上性能最好。

②神经网络调参是门艺术。最重要的参数是层数和每层的隐单元个数

③神经网络调参的常用方法是,首先创建一个大到足以过拟合的网络,确保这个网络可以对任务进行学习。知道训练数据可以被学习之后,要么缩小网络,要么增大alpha来增强正则化。

学习的模型和参数由solver参数设定,有三个选项,分别为:‘adam’,‘lbfgs’,‘sgd’。

注,以上所有涉及模块、函数的内容,都是基于Scikit-Learn,另外,Scikit-Learn不支持GPU,所以其实不适合用Scikit-Learn来做深度学习(o(╥﹏╥)o)


最后,关于何时使用哪种模型,做一份快速总结:

1.最近邻

适用于小型数据集,是很好哦的基础模型,很容易解释。

2.线性模型

非常可靠的首选算法,适用于非常大的数据集,也适用于高维数据

3.朴素贝叶斯

只适用于分类问题,比线性模型速度,适用于非常大的数据集高维数据精度通常要于线性模型。

4.决策树

速度很快不需要数据缩放,可以可视化,很容易解释

5.随机森林

几乎总是比单棵决策树的表现要好,鲁棒性很好,非常强大,不需要数据缩放,不适用于高维稀疏数据

6.梯度提升决策树

精度通常比随机森林略高,与随机森林相比,训练速度更慢,但预测速度更快,需要的内存也更少,比随机森林需要更多的参数调节。

7.支持向量机

对于特征含有相似的中等大小的数据集很强大需要数据缩放,对参数敏感

8.神经网络

可以构建非常复杂的模型,特别是对于大型数据集而言,对数据缩放敏感,对参数选择敏感,大型网络需要很长的训练时间

你可能感兴趣的:(《Python机器学习基础教程》监督学习总结)