python数据分析新手入门课程学习——(六)机器学习与建模(来源:慕课网)

 机器学习根据是否有标注可以分为以下三类。监督学习(有标注的机器学习过程,标注相当于告诉模型在什么样的数据特征下应该输出什么样的结果,机器学习的任务就是提炼出输入与标注间的关系,并进行预测。)根据标注是离散值还是连续值。监督学习又可以分为“分类”(离散值)和“回归”。非监督学习(无标注)。半监督学习(部分有标注,部分无标注其中有标注的数据可以作用于无标注的数据,规范与引导聚类的方向;同时无标注的数据也可以作用于有标注的数据,时刻获得模型对数据整体情况的影响和反馈)。

数据集分为三部分:训练集,测试集,验证集这三个集的比例一般可以取6:2:2

训练集:一个模型的参数是由训练集决定的训练集的数量(应该是数据集整体的增多来实现,而不应该提升训练集在整个数据集的比例来增长数据量)越多,模型相对于整个数据集就会越准确。 

验证集:通过训练集训练出多个模型后,为了能找到效果最佳的模型,使用各个参数对验证集数据进行预测,并记录模型的准确率等评价指标,选出效果最佳的模型所对应的参数,作为模型的最终参数。

测试集:通过训练集和验证集得出最优模型后,使用测试集进行模型的预测,用来衡量模型的性能和分类能力即可把测试集当成从来不存在的数据集,当已经确定模型的参数后,使用测试集进行模型的泛化能力评价。

如果一个模型在训练集和验证集表现良好,测试集表现不好,那么该模型的泛化能力就比较差,也叫过拟合现象。

一份儿数据集切分成训练集,测试集,验证集的方法,可以叫做交叉验证。有的时候我们会忽略验证集,而通过不断重复,尝试来达到验证的目的。这样一份儿数据就可以只分为训练集和测试集(一般是4:1,也就是8:2)。这些切分一般是随机的,为了全面衡量模型的质量,我们有时也会采取ķ折叠交叉验证。


 一、分类

罗吉斯特映射和人工神经网络大多数既可以做分类也可以做回归,他们的作用主要是以回归为主。(在回归章节中详述)

1.KNN

(1)铺垫

 上节我们学习了将属性转化为数值类型,如果属性都成了数值,那么每个属性都可以看作个维度,每个对象都是空间中的一个坐标,那么数据表中的对象与对象之间就会有它的距离。距离常用公式如下:

欧式距离:两个点的直线距离。

曼哈顿距离:各个维度的维度长度差的绝对值进行累加。(在城市中,衡量两个点的到达距离用这个)

闵科夫斯基距离:有个参数p。p=1,曼哈顿距离;p=2,欧式距离。所以,前两个距离都是它的特例。

我们直观地看下, 


如果空间中有很多点,那么怎么去找随机指定的一个点附近的k个点呢? 法一:遍历每个点,从小到大排序。(效率特别低)。所以就有了KD树。通过树形的结构,可以达到快速寻找最近点的目的。

工作原理:空间中有16个点,KD树是如何划分的呢?首先,通过一个维度上,把所有的点分成两部分,两部分数量尽可能保持一致。然后,拿其中的一部分再进行另外一个维度上的切分,又切成两部分,以此类推,直到不能切分为止。其他几部分同样如此。 

 这个空间里就会分成许多大小不一的格子,每个格子都通过这里的线建立一个树形索引,如果把这些线当成中间节点,而把点当成叶子节点的话,我们会得到这样一个图。 

算法思想:一个数据集都会有它的标注,如果说找到一个点,它k个对应的邻居,一种标注大于另外一种标注,那么我们就认为这个点更倾向于与多数点是一致的。如:黑点,我们找到它最近的5个邻居,这样我们可以判别它与深色点是同一个类型(因为深色点多)。


2.朴素贝叶斯

(1)概率相关知识

联合概率:A和B同时发生的概率。

联合概率与条件概率的关系:

例如:

 接下来,我们通过例子说明下朴素贝叶斯的基本思想,F1和F2这两个特征进行离散化如下:

如果此时账户状态如下 :

怎么通过这些条件判断这个账户状态是不是虚假的呢?将其转化为条件下, C=0或1的概率分别是多少。三个条件相互独立的情况下,可拆成如下形式 :

因为他们都除以同一个值,这个相同的值就可以不计算,只要比较分子大小就可以。

根据前面条件,可得它是真实账户的概率是0.0623,虚假账户的概率是0.00198。所以我们倾向于它是真实账户。 

朴素贝叶斯存在的问题:计算概率时,其中一个值为0,整个条件概率就为零。解决方法:都加1。

 生成模型和判别模型都是监督学习中的模型,朴素贝叶斯是生成模型(对数据的要求更高,速度也快),KNN是判别模型(速度较生成模型慢些,但是对数据的容忍程度更大,使用范围更广)。


3.决策树 

决策树就是模仿我们做决策的过程,一步步按照特征进行判断。决策树的叶子都是标注节点(见或不见),而中间节点都是特征(如:年龄、收入、帅)。

构造决策树要考虑的问题:这些特征的顺序如何摆放,为什么一个特征要先判断,这里就需要些评价手段和方法。在此之前,我们先看下一个常见的数据集(一个人根据天气情况来决定自己是否要出去打球)。

方法如下:

(1)信息增益:熵变化的大小,就可以认为X这个特征对他影响的大小。X影响越大,熵增益就越大,则先进行这个属性的切分。如:去打球9次,不去有5次,计算出标注的信息熵;找到个切分计算其熵增益。Outlook熵增益最大,所以第一次切分选它。

  (2)信息增益率:这样定义是因为考虑到熵的值可能会很小,同一信息增益变化的大小就会引起不同的反应。这个指标考虑到熵本身所带来的影响。

(3)Gini系数(不纯度),形成的决策树也叫CART。如果不纯度最低,就可以考虑把这个切分先进行决策。 

决策树中需要注意的问题:

(1)连续值切分:我们刚看到的决策树是个离散的决策树,遇到离散决策树的解决方案和之前探索性数据分析用的方法一样。即将连续值进行从小到大排序,然后对每个间隔进行一次切分,计算切分后的各个因子,取该因子性能最好的连续值切分作为它的切分。

(2)规则用尽:如上例中有四个特征,可能四个特征都用完了,但是所剩的集合还没切分干净,这样我们可以采用投票的方式(哪个样本多,投哪个);当然我们也可以接着使用特征进行切分(一个特征用多次),最终得到无杂质的叶子节点。

(3)过拟合(训练可以训练到百分之百,但真实用的时候性能较差):如果一个特征可以切分多次的话,我们最终总可以得到个百分之百的切分方案。为防止过拟合,我们可以进行剪枝。前剪枝:构造决策树之前就规定每个叶子节点最多有多少个样本或者规定了决策树的最大深度。后剪枝:我们想尽一切办法构造出决策树,然后我们对样本值悬殊的枝叶进行修剪。

如:样本收入一般的情况下,帅不帅达到非常悬殊的比例(100:1),那么就说明样本当中不帅的样本少,那么就没必要做这个决策了。


4.支持向量机 

如果把一条数据的每个属性都当作个维度的话,那么一条数据所代表的对象就是一个空间中的点。接下来。我们用二维空间来说明下支持向量机。如果我们用简单分类器(即一条线)将这两个标注的数据分开,分法有无数种。但只要一种可以将样本充分分开的情况下,最大限度的将两个标注的样本进行区分。也就是说,在两个标注的样本中,分别找到离这条线最近的点,它们离这条线的距离是一样的,并且他们离这条线的距离和最大。这样的切分就是区分度最大的切分。此时,离这条线最近的两个标注中的样本就是支持向量。

数学角度分析:

多维空间中的维度可用向量x表示,w是参数。多维空间中的面也叫超平面。这个面就是分界面。因为他将两种样本都区分开来,所以一定会有一种标志的样本将值代入一定大于0,另一种都小于0。考虑到多数情况下,样本点不会落到这条直线上,而与这条直线有一定的距离,所以我们可以假设距离如下。

 

y代表标注,并把两式子等效成一个式子,即最下面的式子。 

回顾三维空间下,点到面的距离:ABC就等效于参数w,D就是偏置D,(x,y,z)就是带求的三维点。高维空间中,此式子依然成立。在支持向量中分子是可以取到等号的(实际上等于1),我们目的是求使这个间隔最大的切分,所以我们求两组距离超平面的和的最大值,等价于其右边的式子。根据样本的约束和这里得到的目标函数,我们就可以用拉格朗日乘数法进行求解。得到下式。它通过一个式子就把所有的标注都考虑进去了,然后我们求它的最大值,就可以解出w和其他参数ab等等。需要注意的是,这里的参数a一定是大于0的。

上述是理想情况下的假设与计算。实际情况会复杂很多。通常情况下,正负标注不是线性可分的 。

所以我们就有两种思路来解决这些问题。

(1) 容忍一部分的错误归类。虽然无法控制最大值,但我们可以在这些最大值中选择个最小的结果。

(2)扩维。我们可以在生成个第三维。映射到三维就会得到左下角结果。可以通过一个三 维超平面将他区分开。

扩维时,我们怎么知道该怎么扩维,扩到几维?实际上,由于标注不确定性比较大,我们并不知道如何扩维,所以我们只能把所有可能扩到的维度都考虑到。例如:二维空间的扩维(用多项式扩维法);三维空间扩维一共会有19种情况,不好处理。 

所以我们要再想想办法。先回顾下判别式。左边的形式要进行扩维,相当于对向量进行转换,对向量某一维上转换。

还记得前面的最优化表达式,在满足条件时,可以转换成下式。

转换后有内积的操作,扩维后也得有内积的操作:

如何简化内积这一过程?如:有两个向量二维向量pq,他们进行扩维后再进行内积如下:

如果我们先不进行扩维,先计算它的内积,再进行如下的函数映射(也就是核函数)。我们可以看到此式与上式相比,仅仅是某些尺度上有些变化,但这对我们接下来要做的变换来说,省去了在高维上进行内积的过程,也不用担心维度灾难了。

整理下思路:我们最初扩维思路是先映射到高维空间,再计算(会产生维度灾难);后来转变思路,先在低维上进行计算,然后再进行扩维,而扩维的方式是使用了一种转化函数来进行的。

常用的核函数如下: 

(1)线性可分的情况下用线性核函数,其实线性核函数与不用核函数是一样的,只是把这种线性变换也叫核函数罢了。

(2)多项式核函数:一旦确定了d,扩充到几维就确定了。(2维扩充到5维,3维扩充到19维)

(3)这个函数可以将空间映射到无限维,如果我们喜欢,我们可以进行百分之百的切分,但这样会带来过拟合的现象。

以下是个二维空间实际的例子:相对于决策树,SVM的边界更加平滑。

SVM的问题: (1) 最下面的点对切分影响较大,避免影响使用松弛变量,得到更宽的分类间隔,很有可能减少过拟合;(2)第二个边界更有可能靠近白色点的部分,所以要根据实际运用场景定最后方案的;(3)多分类问题:有几个分类就建几个SVM,一个样本过来,我们把每个分类都过一遍,成功分类并离超平面最远的那个作为正确分类,如:有八个分类,我们把每个分类都和其他分类都做个SVM;另外一个思路就是分类的两两之间分别建立SVM,取出分类次数最多的作为我们的分类。


5.集成方法 

分类器是算法,算法就会有其复杂度,一般有多项式复杂度、阶乘复杂度、指数级复杂度(如下所示)。所有算法的复杂度都会随规模扩大而扩大,越往右扩大的越急剧,很有可能数据扩大一倍,就会耗尽所有的资源,甚至得不到解。所以我们更应该设计出多项式复杂度的算法。模型的集成方法就可以理解成将几个弱可学习的分类器集合成一个强可学习分类器的过程。

集成学习用到的方法分为两大类:

(1)袋装法:用训练集同时训练出几个独立的模型,而在预测和判断时,我们分别让被训练出的几个子模型去判断,对于分类问题,让他们去投票,投票选出的最多的结果就是判断的结果。 同样,这样的思想也可以用在回归问题中,回归时这里取的就不是投票的结果了,而是各个参数。最典型的应用就是随机森林。

随机森林里有很多个决策树,他们都是相互独立的,最终的分类器要看每个树的结果,然后让他们投票,选择票数最多的结果作为最终的判别结果。随机森林里的随机,我们可认为是随机样本的随机,也可以认为是特征的随机,也可以认为是特征和样本两方面的随机。决策树带来的好处如图。 

使用和训练时,有几个需要注意的因素:

1)树的数量(越多,考虑到的样本的局部情况也就越多,同时也越容易过拟合。树的数量跟样本数量、特征数量都有关系。这个需要不断尝试进行确定);

2)每棵树用到的特征数(如果假定树有n棵,那么每棵树选择多少个特征合适这是个问题。特征比较少的时候,一般是少于50个特征的时候,我们可以选择采用全部的特征进行训练,每棵树都采用全部的特征,树与树之间的差异性通过训练集的差异性进行体现;特征比较多的时候,达到几百个或上千个,那么每棵树可以随机地选择少于全部特征数量的特征进行训练,与此同时我们可以通过增加树的数量和并行计算的能力来平衡特征减少带来的损失;

3)树的训练集该怎么选?一般每棵树的训练集都是模型训练集整体的一个子集,这个子集怎么产生,数量怎么定也是个问题。这里介绍种选择子集的方法。我们可以把选择子集的数量定为和输入模型的训练数量是一致的,只是我们对他进行有放回的采样,采样过后大概会有某些样本被采样到两次或更多,某些样本根本就没被采样到,某些样本在某棵树被采样到,在其他树没被采样到,这样就通过样本构成了差异性;当然我们也可以不放回,每棵树都采样全量样本,若要体现树的差异性就必须通过缩减特征的规模来使树的特征有差异,试想每棵树我们都使用全量的测试集,同样也使用全样的特征,那么每棵树产生的结果都一样,这样浪费资源得不到想要的结果。

(2)提升法:如果我们把子模型串联起来,一个模型以另一个模型的结果为基础进行训练和预测,然后多个模型级联,最终将训练模型的结果进行加权求和得到判别结果。子模型对样本的差别的影响,更大程度上取决于最终的权值而不是它的顺序。

提升法的一个例子如下图。 

 


 二、回归 

回归分析中类似分类分析里,自变量叫特征,因变量叫标注,只是这个标注是连续值而不是离散值。如果多个变量间的关系,我们用线性关系去考量,那就是线性回归;如果多个变量间用多项式关系考量,那就是多项式回归;类似地,我们有多种回归方法。 

如图,同一系列样本,我们可以用线性回归来拟合;二次函数拟合;那么如何判断哪个拟合效果更好呢?回归要考虑模型的复杂度和准确度两方面,当然最重要的是它对未知数据预测的准确性。所以我们可以像分类数据一样,将回归的数据也进行区分,用验证集的误差大小去评判回归效果最终的好坏。

极端的情况我们可以用非常高阶的函数对他进行拟合(如:n个点用n+1阶多项式进行拟合),一定可以在训练集上把它的误差将为0,但这种拟合面对未知数据大概率情况下效果是不会太好的,效果又可能还不如线性回归。

如果我们隐约感觉一个变量和几个变量间是正相关或负相关关系,我们不妨先试试线性回归。用它做个粗略估计,如果效果比较好,我们就可以不用研究其他模型了。我们也可以把线性回归结果当作个标准衡量其他回归的性能。


 1.线性回归

最小二乘法是我们最早接触的解决线性回归的方法。重新梳理下线性回归的过程。通过w与X的线性变换。我们可以得到左下角的式子,目标是让这个值与Y的差尽可能小。所以就有了最小二乘法。右下角的式子就是根据最小二乘法确定参数的方法,其上面的式子是用矩阵知识求解最小二乘的方法。这两个式子等效。

最小二乘法本质上是在求下式的值。满足这个条件的w就是我们最终要确定的w。     

 既然核心的算法是个最优化的过程,是一个求函数最小值的取值,而且我们也可以证明此函数连续可导。我们很容易想到个方法,就是对函数进行求导,然后求他们各个极值,如果值域不是负无穷的,那么极小值中定会有个最小值。(极其耗费资源,计算机这样计算不现实)计算机进行数值计算,求它的最小值时,使用的方法是梯度下降法。 

梯度:指定了各个方向上导数的大小。梯度对每个参数增量都要可导,梯度指的方向是一个点上升最大的方向。

 梯度下降法: 函数上随便取个点,算出它的梯度,取它的反方向,再确定个步长。沿着方向走一步,到达另一个点,下次计算第二个点的梯度,再一步一步接近它的极小值。注意:步长过小,那么它到极小值的迭代次数就多,计算就慢;步长过大,它会绕着极小值不断跳跃,而不能达到最终的收敛效果。所以,选步长跟梯度本身有关。(梯度大,步长可大些)

我们要求下式的极小值或最小值

我们先找到它的极小值,就要对参数进行更新,而更新的极小值就如下:

如果一个函数是凸函数,凸函数(函数上的值小于连线上的值)满足下式,凸函数的极小值就是最小值。相应的优化过程也叫凸优化。按照这个方法可以计算出当它取到最小值时参数是多少。

  有的时候直接求出的参数,(1)由于它有舍入误差、系统误差的影响或者是有少量的点被错误的标注。参数间的间距可能会非常大(如:有的参数可能会取到好几百,有的只有零点几)(2)还有可能函数不是凸函数,这样最终拟合取到的点并不是我们需要的点,也就是说他取到了一个我们不需要的极值,有可能离我们需要的极值非常远。

以上两者带来的结果可能有些特征的权值就会被放大,有些权值就被弱化,也有可能最终预测结果非常差,这个时候需要我们用另外个方法(正则化)来解决。正则化的目的:在所有参数中,倾向于选择系数更小的,这样就约束了一些极值的条件,可以有效防止过拟合,也可以更快速、更正确地找到最优点。

线性回归的一个正则化例子:(1)岭回归。其目标函数如下。 有的参数比较大,有的参数比较小,加上一个参数的二范数倾向于选择参数比较小的值。(2)第二项换成了一范数(所有值取绝对值后再求和),Lasso为了照顾alpha的量级,一般要多乘个箭头所指的值(m为点的数量)。右图表示权值越大,越容易产生过拟合。


 2.逻辑回归

 

                                            

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值