机器学习——监督学习

机器学习——监督学习

  • 1. 监督学习
    • 1.1 分类与回归
    • 1.2 泛化、过拟合和欠拟合
    • 1.3 监督学习算法
      • 1.3.1 k近邻(k-Nearest Neighbors,简称k-NN)
      • 1.3.2 线性模型(Linear Models)
      • 1.3.3 朴素贝叶斯分类器
      • 1.3.4 决策树与决策树集成
      • 1.3.5 核支持向量机(SVM)

ps:使用的教材是Introduction to Machine Learning with Python,中间的实例不作演示,感兴趣的话可以自行查看原书,这里只做理论上的总结。 机器学习算法实现都来自python的sklearn库

1. 监督学习

输入/输出对构成训练集,对从未见过的新数据做出准确预测。
需要根据给定输入进行预测结果,并且还拥有输入/输出对的示例时,应该使用监督学习。

1.1 分类与回归

分类与回归是监督学习问题的主要种类。
分类问题的目标是预测类别标签(class label),其中包括二分类和多分类问题。在二分类中,两个类别分别称为正类和反类,正反类由主观决定。
回归问题的目标是预测一个连续值。
区分分类问题和回归问题在于判断输出是否具有连续性

1.2 泛化、过拟合和欠拟合

泛化(generalize):如果一个模型能够对没见过的数据做出准确预测,那么称它能够从训练集泛化到测试集。
过拟合(overfitting):在拟合模型时过分关注训练集的细节,模型过于复杂,在训练集上表现很好,但是不能很好地泛化到测试集上。
欠拟合(underfitting):在拟合模型时无法抓住训练集的重要内容和数据,模型过于简单,在训练集上表现不好。
最佳模型处于过拟合和欠拟合中间,如下图所示(图来自原书p29):
机器学习——监督学习_第1张图片

1.3 监督学习算法

1.3.1 k近邻(k-Nearest Neighbors,简称k-NN)

k近邻用于分类问题是: 最简单的k-NN算法就是单一最近邻算法,在利用k近邻进行预测时,对于每一个新数据点,它的类别与和它最近的训练集中的数据点(最近的一个邻居)相同。
而考虑k个最近点(最近的k个邻居)时,对于每一个新数据点,它的类别由和它最近的k个训练集中的数据点来投票决定(以多数为准),例如数据点β,周围5个邻居,3个类别为A,2个类别为B,则β类别为A。

k近邻用于回归问题时:如果是单一最近邻算法,则其预测结果与一个最近邻的邻居相同;如果考虑k个最近点时,则预测结果时k个最近邻邻居的平均值。

k近邻优缺点:不需要过多调节就可以得到不错的性能,构建模型速度快。但是如果数据集很大,预测速度可能会比较慢;特征过多时,效果往往不好;对稀疏数据集(大多数取值为0)效果尤其不好。

在sklearn库中方法为KNeighbors(),可以改变参数n_neighbors修改最近邻数据点,另一个参数是距离的度量方法,默认使用欧氏距离。

1.3.2 线性模型(Linear Models)

包括适用于回归问题的线性回归,岭回归,lasso等;
适用于分类问题的Logistic回归(虽然叫回归但是用于分类问题需要注意),线性向量支持机等;
多分类问题的线性模型:通常使用“一对其余”方法。
回归问题

1)线性回归:又称普通最小二乘法,是回归问题最简单的线性方法。寻找参数w和b,使得对训练集的预测值与真实的回归目标值y之间的均方误差(预测值与真实值之差的平方和除以样本数)最小。线性回归没有参数,所以无法控制模型的复杂度。在sklearn库中方法为LinearRegression()。

2)岭回归:预测公式与线性回归相同,但是参数w都尽可能接近于0,使得每个特征对输出的影响尽可能小。岭回归的约束是正则化,且是L2正则化(系数的平方和然后求平方根)。在sklearn库中方法为Ridge()。正则化可以通过修改参数alpha,alpha越小,约束越小,模型越复杂,越有可能过拟合。alpha越大,约束越大(更多的特征的参数w为0),可能会降低训练集性能,但可能会提高泛化性能。
PS:在训练数据足够多的时候,岭回归和线性回归将具有相同的性能。

3)lasso:lasso也是约束系数使其接近于0,但使用的方法不同,lasso使用的是L1正则化(系数绝对值之和),这样会导致某些系数刚好为0,即部分特征被模型忽略。在sklearn库中方法为Lasso(),可以修改的参数为alpha,效果于岭回归相同。当特征很多但又只有部分几个比较重要时,使用lasso是很好的

分类问题
线性分类器是利用直线、平面或者超平面来分开两个类别的分类器。

Logistic回归:在sklearn库中方法为LogisticRegression()。
线性支持向量机:在sklearn库中方法为LinearSVM()。

两个模型都默认使用的L2正则化(Logistic回归支持L1正则化),决定正则化强度的参数是C,C越小,则正则化越强,各个特征的系数更接近于0,C越大,则正则化越弱,模型尽可能将训练集拟合得最好。C与alpha相反

在低维空间中,用于分类的线性模型可能非常受限,但在高位空间中,线性模型会非常强大,但同时要避免过拟合。

用于多分类时,常见方法是“一对其余”,举个栗子,有五个类ABCDE,一对其余就是,新数据是类A,或者新数据不是类A。

线性模型优缺点:训练速度和预测速度都很快,可以推广到非常大的数据集,对稀疏数据也很有效。但是不容易解释系数,且对于低维数据集的泛化性能可能不是很好

1.3.3 朴素贝叶斯分类器

朴素贝叶斯分类器的训练速度比线性分类器更快,但是泛化能力要差。其高效的原因在于单独查看每个特征来学习参数,并从每个特征中收集简单的类别统计数据。

sklearn中实现了三种朴素贝叶斯分类器:GaussianNB、BernoulliNB、MultinomialNB

GaussianNB可应用于任意连续数据,BernoulliNB假定输入数据为二分类数据,MultinomialNB假定输入数据为计数数据(每个特征代表某个对象的整输计数)。BernoulliNB和MultinomialNB主要用于文本数据分类。

GaussianNB保存每个类别中每个特征的平均值和标准差,BernoulliNB计算每个类别中每个特征不为0的元素个数,MultinomialNB计算每个类别每个特征的平均值。

朴素贝叶斯分类器优缺点:BernoulliNB和MultinomialNB只有一个参数alpha,用于控制模型复杂度,向数据中添加alpha个虚拟数据点,将统计数据平滑化,alpha越大,平滑性越强,模型复杂度越低。朴素贝叶斯模型的训练和预测速度很快,对高维系数数据的效果很好,常用于非常大的数据集。

1.3.4 决策树与决策树集成

决策树本质上从一层层的if/else问题进行学习,并得出结论,如下图所示(图源自原书p71):
机器学习——监督学习_第2张图片
决策树的每个结点代表一个问题或一个包含答案的叶子结点。

数据通常是具有连续特征的,而不是像上图一样是具有二元特征的形式,用于连续数据的测试形式是:“特征i的值是否大于a?”,在这种数据集中,根节点表示整个数据集,决策树中如果叶结点包含的数据点的目标值都相同,则就称这个叶结点是纯的。对于分类问题的一个新的数据点的预测,则从根结点对决策树进行遍历就可以找到该数据点对应的叶结点,如果是纯的叶结点,则该数据点就是该目标值,如果不是,则是该叶结点的多数目标值(即占比例大的目标值)。而对于回归问题,方法大致与分类问题相同,不过输出是叶结点中所有训练点的平均目标值。

控制决策树的复杂度:如果构造决策树直到所有叶结点都是纯的叶结点,会导致决策树非常复杂,使得模型过拟合。而防止决策树过拟合,有两种策略:预剪枝后剪枝
1)预剪枝:及时停止树的生长,通常通过限制树的最大深度、限制叶结点的最大数目或者规定一个结点中数据点的最小数目来防止继续划分。(max_depth,max_leaf_nodes或min_samples_leaf)
2)后剪枝:先构造树,随后删除或折叠信息量少的结点。

树的特征重要性:在决策树的所有特征中,为每个特征对树的决策的重要性进行排序,所有特征重要性的求和为1。但是需要注意的是,特征仲要系很小,并不能说明这个特征没有提供任何信息,只能说明没有被决策树选中,或者另一个特征也包含了同样的信息。

用于回归的决策树和用于分类的决策树基本类似。但是有一个比较特殊的点,用于回归的决策树以及其他所有基于树的回归模型都不能够外推,不能够再训练数据范围之外进行预测。

决策树优缺点:决策树得到的模型很容易可视化,而且也容易理解,并且算法不受数据缩放的影响,所以决策树不需要进行特征预处理。在特征尺度不一样或者二元特征和连续特征同时存在时,决策树的效果很好。决策树的缺点在于经常会过拟合,泛化性能较差,因此在大多数应用会用决策树集成来替代单棵决策树。

集成:合并多个机器模型来构建更强大模型的方法。以决策树为基础的集成模型,在作者作书时有两种已被证明有效,分别是随机森林梯度提升决策树

随机森林:本质上是许多决策树的集合。构造很多棵树,每棵树互不相同,效果都不错,但都以不同的方式过拟合,我们对这些树的结果取平均值降低过拟合。随机森林的随机化方法有两种:一是通过选择用于构造随机数的数据点(构造决策树时有放回地取样本,即有些样本可能重复,有些样本可能没有),二是通过选择每次划分测试的特征(在每个结点处随机选择特征的一个子集,并对一个特征寻找最佳测试,选择的特征个数由参数max_features决定,注意如果max_features太大,那么随机森林中的树可能会非常相似,如果max_features太小,每棵树差异可能会很大,为了更好地拟合数据,每棵树地深度都很大)。

利用随机森林进行预测:对于回归问题,同决策树,取平均值作为最终预测,对于分类问题,利用“软投票”的机制,每棵树做出预测,给出每个可能标签的概率,然后对所有树的预测概率取平均,概率最大的类别作为预测结果。

随机森林同样拥有特征重要性。

随机森林优缺点:拥有决策树的所有优点,弥补了决策树的一些缺陷。但是对于维度非常高的稀疏数据,表现不是很好,并且训练和预测速度比线性模型要慢,需要的内存也较大。

梯度提升回归树:采用连续的方式来构造树,每一颗树都试图纠正前一棵树的错误。梯度提升回归树使用了强预剪枝,使用深度很小(深度1到5)的树集成在一起,这样模型占用的内存少,预测速度也快。主要思想是合并许多简单的模型。

梯度提升回归树的优缺点:不需要对数据进行缩放,适用于二元特征与连续特征同时存在的数据集,但是不适用于高维稀疏数据,同时需要仔细调参没训练时间可能较长。

1.3.5 核支持向量机(SVM)

核技巧:直接计算扩展特征表示中数据点之间的距离(内积),而不用实际对扩展进行计算。

对于支持向量机,将数据映射到更高维空间中有两种常用的方法:一种是多项式核,在一定阶数内计算原始特征所有可能的多项式;另一种是径向基函数,也叫高斯核,考虑所有结束的所有可能的多项式,但阶数越高,特征的重要性越小。

SVM学习每个训练数据点对于表示两个类别之间决策边界的重要性,通常只有位于类别之间边界上的哪些点对于定义决策边界来说很重要,这些点叫做支持向量

对新数据点进行预测,需要测量它于每个支持向量之间的距离,分类决策是基于它与支持向量之间的距离以及在训练过程中学到的支持向量的重要性。

参数:gamma和C。参数C的作用线性模型相同,不赘述。参数gamma,gamma越小,高斯核的半径越大,模型的复杂度更低。gamma越大,模型越复杂。

核支持向量机优缺点:在各种数据集上表现都很好,允许巨册边界很复杂。但是预处理数据和调参需要很小心。

你可能感兴趣的:(机器学习,机器学习,学习,python)