数据挖掘:模型选择——监督学习(分类)

数据挖掘:模型选择——监督学习(分类)

机器学习算法可分为监督学习和非监督学习。本文主要讨论非监督学习中的分类任务。

一、简单介绍

简单的说,监督学习就是有标签的数据,有需要预测的变量。
分类任务就是预测的变量数据为离散型。比如,将天气数据放入模型中,来预测明天是否下雨(下或不下,两种结果),为分类任务。预测降雨量具体是多少,为回归任务。
而分类任务一般分为二分类和多分类。先介绍二分类。本文将对一些常用算法的主要思想,特点和sklearn中的调参进行说明。

二、KNN

简单介绍
KNN(k-NearestNeighbor)即K-近邻算法。一句话总结就是近朱者赤,近墨者黑。KNN算法为给定⼀一个训练数据集,对新的输⼊入实例例,在训练数据集中找到与该 实例例最邻近的K个实例例,这K个实例例的多数属于某个类,就把该输⼊入实例例分为这个类。
k 近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。
在这里插入图片描述

  • 如果K=3,绿色圆点最近的3个邻居是2个红色小三角形和1个蓝色小正方形,少数从属于多 数,基于统计的方法,判定绿色的这个待分类点属于红色的三角形一类。
  • 如果K=5,绿色圆点的最近5个邻居是2个红色角形和3个蓝色的正方形,还是少数从属于多 数,基于统计的方法,判定绿色这个待分类点属于蓝色的正方形一类。

工作原理

假设有一个带有标签的样本数据集(训练样本集),其中包含每条数据与所属分类的对应关系。
输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较。

  1. 计算新数据与样本数据集中每条数据的距离
  2. 对求得的所有距离进行排序(从小到大,越小表示越相似)。
  3. 取前 k (k 一般小于等于 20 )个样本数据对应的分类标签。

求 k 个数据中出现次数最多的分类标签作为新数据的分类。

主要参数
通过上述原理的说明,可将主要参数归总为k值的选择、距离度量以及分类决策规则是k近邻算法的三个基本要素。

  • k值选择:如果选择较小的K值,近似误差减小,估计误差增大。意味着整体模型变得复杂,容易发生过拟合(容易受到训练数据的噪声而产生的过拟合的影响)。选择较大的K值,模型会变得简单。在实际应⽤用中,K值⼀般取⼀个比较小的数值。通常采用交叉验证法来选取最优的K值(经验规 则:K一般低于训练样本数的平方根)。

  • 距离度量:特征空间中两个实例点的距离可以反映出两个实例点之间的相似性程度。K近邻模型的特征空间 ⼀一般是N维实数向量量空间,使⽤用的距离可以是欧式距离,也可以是其他距离。

  • 分类决策:多数表决,即由输⼊入实例例的K个邻近的训练实例例中的多数类决 定输⼊入实例例的类。

算法特点

  • 优点:精度高、对异常值不敏感、无数据输入假定
  • 缺点:计算复杂度高、空间复杂度高

sklearn代码

from sklearn.neighbors import KNeighborsClassifier
 
clf = KNeighborsClassifier()
clf.fit(train_x, train_y)

调参详解

三、决策树

简单介绍
决策树是模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。它可以认为是 if-then 规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性(features),叶结点表示一个类(labels)。

用决策树对需要测试的实例进行分类:从根节点开始,对实例的某一特征进行测试,根据测试结果,将实例分配到其子结点;这时,每一个子结点对应着该特征的一个取值。如此递归地对实例进行测试并分配,直至达到叶结点。最后将实例分配到叶结点的类中。
在这里插入图片描述
决策树学习通常包括 3 个步骤:特征选择、决策树的生成和决策树的修剪。
特征选择
若一个特征具有很好的分类能力,那么就应该选择这个特征。选择的准则是信息增益或是信息增益比。
: 熵指的是体系的混乱的程度。一种信息的度量方式,表示信息的混乱程度,也就是说:信息越有序,信息熵越低。例如:火柴有序放在火柴盒里,熵值很低,相反,熵值很高。
在这里插入图片描述
条件熵:在某一条件下,随机变量Y的不确定性。
在这里插入图片描述
信息增益:在得知特征X的信息下,使得Y信息的不确定性减少的程度。 在划分数据集前后信息发生的变化
在这里插入图片描述
所以,我们可以用信息增益作为准则来选择特征。不同的特征划分数据集有不同的信息增益,选择信息增益最大的特征。但信息增益存在偏向于选择取值较多的特征,比如ID这类数据。可以用信息增益比来对这个问题进行校正。
信息增益比:将HA(D)放在分母,可有效降低以上的问题。比如对于ID这个特征。它的HA(D)的值就会很大,因为特征中类别数量较多。
在这里插入图片描述
Gini系数:也表示数据集的不确定性。Gini系数越大,不确定性就越高,数据集纯度越低。与熵类似。
在这里插入图片描述
在这里插入图片描述
ID3算法是在决策树各个结点上用信息增益来选择特征。
C4.5是利用信息增益比。
CART利用Gini系数来选择特征的。可用于分类和回归,假定决策树是二叉树。

决策树的生成:确定特征选择的标准后,就能够生成一颗决策树。但会过度细分,产生过拟合。因此需要对决策树进行剪枝。
决策树的修剪:可以在生成树之前设定参数,进行剪枝。也可以在树生成后,逐渐调整参数进行剪枝。

工作原理
ID3算法:计算所有特征的信息增益,从中选择最好的对数据集进行划分。对划分后的子集,再分别计算剩下的特征的信息增益,从中分别选择最好的对各个子集进行划分。不断重复该步骤,直到所以特征的信息增益达到阈值后者没有特征可选为止。
在这里插入图片描述
CART算法:利用Gini系数来选择特征,生成二叉树。生成方式与ID3差不多。以下是分类树:
在这里插入图片描述
在这里插入图片描述
算法特点
优点:计算复杂度不高,输出结果易于理解,数据有缺失也能跑,可以处理不相关特征。
缺点:容易过拟合。

主要因素
特征选择标准。
树的最大深度,叶子节点的样本数,节点划分的最小不纯度等。对决策树进行剪枝,降低过拟合。
sklearn代码

from sklearn import tree
 
clf = tree.DecisionTreeClassifier()
clf.fit(train_x, train_y)

决策树参数介绍

四、朴素贝叶斯

简单介绍
朴素贝叶斯是基于贝叶斯定义特征条件假设的分类方法。对于给定的训练数据集,⾸先基于特征条件独⽴假设学习输⼊/输出的联合分布;然后基于此模型,对给定的输⼊ x,利⽤贝叶斯定理求出后验概率最⼤的输出y。
贝叶斯理论:根据概率大小,来判断所属类别。
在这里插入图片描述
贝叶斯定义:贝叶斯定理是基于条件概率求得的。
在这里插入图片描述
特征条件独立假设
简单点说,就是在求最大概率的过程中,条件概率的参数规模是指数数量级别的,计算量极大。因此,为了解决这个问题,朴素贝叶斯对条件概率做了独立性假设,即各个特征间是相互独立的。这个限定条件也是朴素贝叶斯的由来。
在这里插入图片描述
工作原理
在各个特征间独立的条件下,利用贝叶斯定理,求得在满足某些条件下的概率。由此得出类别。
极大似然估计:利用频率代替概率。
在这里插入图片描述
但是极大似然估计有⼀个隐患,假设训练数据中没有出现某种参数与类别的组合,会出现索要估计的概率值为0的情况。但是这不代表真实数据中就没有这样的组合。这时会影响到后验概率的计算结果,使分类产⽣偏差。解决办法是贝叶斯估计。

贝叶斯估计:在分子和分母上,加上λ,这样就不会出现概率为0的情况。
在这里插入图片描述

算法特点

优点: 在数据较少的情况下仍然有效,可以处理多类别问题。
缺点: 对于输入数据的准备方式较为敏感。由于假设各特征是独立的,因此效果不是很好。

主要参数
在scikit-learn中,提供了3中朴素贝叶斯分类算法:GaussianNB(高斯朴素贝叶斯)、MultinomialNB(多项式朴素贝叶斯)、BernoulliNB(伯努利朴素贝叶斯)
简单介绍:
高斯朴素贝叶斯:适用于连续型数值,比如身高在160cm以下为一类,160-170cm为一个类,则划分不够细腻。
多项式朴素贝叶斯:常用于文本分类,特征是单词,值是单词出现的次数。
伯努利朴素贝叶斯:所用特征为全局特征,只是它计算的不是单词的数量,而是出现则为1,否则为0。也就是特征等权重。

sklearn——朴素贝叶斯

sklearn代码

from sklearn.naive_bayes import GaussianNB
 
clf = GaussianNB()
clf.fit(train_x, train_y)

五、Logistic 回归

简单介绍
Logistic 回归的主要思想是: 根据现有数据对分类边界线(Decision Boundary)建立回归公式,以此进行分类。给出取某一类别的概率,是判别模型。逻辑回归虽然叫回归,但确是用来做分类任务的。而线性回归应用大多是回归分析,主要原因有两个:

  1. 回归模型是连续型模型,即预测出的值都是连续值(实数值),非离散值。
  2. 预测结果受样本噪声的影响比较大。

先了解一下逻辑斯蒂分布
在这里插入图片描述
LR模型表达式
在这里插入图片描述
工作原理

可从三个角度去理解LR模型:概率
对数几率:事件y=1的几率是跟输入的数据有关的,且是线性相关。
在这里插入图片描述
函数映射:LR本质上还是线性回归,将数据放入能得出具体的数值,只是特征到结果之间加了一层函数映射(Sigmoid函数),把特征线性求和的结果约束至(0,1)之间
在这里插入图片描述
概率解释:如果我们把样本生成理解成发生的一次事件,那么二分类问题就服从伯努利伯努利分布。然后利用极大似然估计,随机梯度下降求参数。
在这里插入图片描述
Sigmoid函数
在这里插入图片描述
在之前的概率解释中,我们得到了一个函数。接下来对这个函数进行求解。采用随机梯度下降进行迭代求参数。

在这里插入图片描述

正则化
当模型的参数过多时,很容易遇到过拟合的问题。这时就需要有一种方法来控制模型的复杂度,典型的做法在优化目标中加入正则项,通过惩罚过大的参数来防止过拟合。实际应用时,由于我们数据的维度可能非常高,L1正则化因为能产生稀疏解,使用的更为广泛一些。

关于多分类问题
如果y的取值不是[0,1],那么问题就变成了多分类问题。一般有两种方式解决:

  1. 对每个类别训练一个二分类器(One-vs-all),当K个类别不互斥时,比如用户会购买哪种产品这种方法是合适的。
  2. 当K个类别互斥时,y=i时不能取其他值,比如用户年龄段。那么用Softmax回归更合适。Softmax 回归是直接对逻辑回归在多分类的推⼴,相应的模型也可以叫做多元逻辑回归。

算法特点

优点: 计算代价不高,易于理解和实现。
缺点: 容易欠拟合,分类精度可能不高。

主要参数

逻辑回归的参数主要有三个方面:正则化的选择;多分类的设置,多分类怎么转化成二分类,在转换过程中产生的参数;还有就是设置权值的参数。

sklearn代码

from sklearn.linear_model import LogisticRegression
 
clf = LogisticRegression(penalty='l2')
clf.fit(train_x, train_y)

机器学习教程之3-逻辑回归(logistic regression)的sklearn实现
sklearn逻辑回归(Logistic Regression,LR)类库使用小结

六、感知机

简单介绍
感知机(perceptron)是⼆类分类的线性分类模型,输⼊为实例的特征向量,输出为实例的类
别,取+1和-1⼆值。是神经网络和⽀持向量机的基础。
在这里插入图片描述

工作原理
感知机对应于输⼊空间(特征空间)中将实例划分为正负两类的分离超平⾯,导⼊基于误分类的
损失函数
,利⽤梯度下降对损失函数进⾏极⼩化,求得感知机模型,属于判别模型。

算法特点
优点:简单,易行,好理解
缺点:只能用在线性可分的情形中,非线性分类则效果不好。使用局限性很大。

主要参数

sklearn代码

from sklearn.linear_model import Perceptron

clf = Perceptron()
clf.fit(train_x, train_y)

七、SVM

简单介绍
支持向量机(Support Vector Machines, SVM):是一种监督学习算法。支持向量(Support Vector)就是离分隔超平面最近的那些点。机(Machine)就是表示一种算法,而不是表示机器。
在这里插入图片描述
之前的感知机对数据进行分类,是在两类数据间随便找到一条分割的线即可(本身算法公式中的设定,只要分类完全就好),但如果后续有数据加进来,有可能会导致分类不正确。如C图,就很危险。相反,B,D图的分类效果要好一些。而这也是SVM要找的分割线。
在这里插入图片描述
工作原理
SVM有三宝,间隔,对偶,核技巧。
间隔:找到超平面,使得支持向量到超平面的距离(间隔)最大。有硬间隔和软间隔。

  1. 硬间隔。进行分类时,是不准有错误的,本质上还是对线性可分的数据而言。但实际中,绝大多数的数据都是线性不可分。因此,提出了软间隔。
  2. 软间隔。允许SVM在分类时分错误,给SVM留有一定的空间。由此引入松弛变量ζ和惩罚系数C。

对偶:为了求解线性可分⽀持向量机的最优化问题,将它作为原始最优化问题,应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。

  1. ⼀是对偶问题往往更容易求解;
  2. ⼆是引⼊核函数,进而推⼴到非线性分类问题。

核技巧:将线性不可分的数据,通过核方法,映射到高维空间,然后再通过超平面进行分类。有多种核函数可供选择,如多项式核函数(polynomial kernel function),高斯核函数 (gaussian kernel function)和线性核函数(也就是没用核函数。。)
在这里插入图片描述
保证距离最近的水果,距离它们最远。

  1. 找最大分类间距
  2. 转而通过拉格朗日函数求优化的问题
  3. 对无法用线性直接分割的点
  4. 对线性不可分数据采用核方法

算法特点

优点
泛化(由具体的、个别的扩大为一般的,就是说:模型训练完后的新样本)错误率低,
计算开销不大,结果易理解。
在高维空间中非常高效;
即使在数据维度比样本数量大的情况下仍然有效;
通用性:不同的核函数与特定的决策函数一一对应;
缺点
因为仅支持向量起作用,所以对参数调节和核函数的选择敏感。不同的参数会导致不同的支持向量的选择。
原始分类器不加修改仅适合于处理二分类问题。
如果特征数量比样本数量大得多,在选择核函数时要避免过拟合。

主要参数
C和gama,一般选择kernel为核函数。
C是惩罚系数,即对误差的宽容度。C越大,对于训练集的表现越好,但是间隔减小,也就是对于噪声等干扰的容忍度减小,可能引发过度拟合(overfitting),。C越小,容易欠拟合。C过大或过小,泛化能力变差。
在这里插入图片描述
gamma是选择RBF函数作为kernel后,该函数自带的一个参数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。一般C取的大一些,gamma取的小一些。

SVM中C和gamma的参数关系
SVM 调参策略
SVM简介及sklearn参数
sklearn代码

from sklearn.svm import SVC
 
clf = SVC()
clf.fit(train_x, train_y)

八、集成学习

简单介绍
在介绍这两种算法之前,先说一下集成学习(ensemble learning)。这不是一种分类器,是一个框架,一种思想。

集成学习是指通过构建多个弱学习器,然后结合为⼀个强学习器来完成分类任务。并相较于弱分类器而言,进⼀步提升结果的准确率。严格来说,集成学习并不算是⼀种分类器,而是⼀种学习器结合的⽅法。
集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。
在这里插入图片描述
集成学习的条件:

  1. 多样性:分类器之间应该具有差异性。很容易理解,如果使⽤的是同⼀个分类器,那么集成起来的分类结果是不会有变化的。同一个结果,重复多次,还是一样的,没意义。
  2. 准确性:每个个体分类器的分类精度必须大于0.5,如果p < 0.5那么随着集成规模的增加,分类精度会下降;但如果是大于0.5的话,那么最后最终分类精度是可以趋于1的。比如学习好的跟好的在一起,会更好;但如果掺杂进来几个不爱学习的,那么会对结果造成干扰,导致不如以前。

强可学习:模型效果比随机猜测要好。
弱可学习:模型效果比随机猜测要差。

⽬前集成学习⽅法大致可分为两⼤类:
第⼀类是个体学习器之间存在强依赖关系、必须串行⽣成的序列化⽅法,这种方法的代表是“Boosting”;
第⼆类是个体学习器间不存在强依赖关系、可同时⽣成的并行化⽅法,它的代表是“Bagging”和“Random Forest”。

接下来介绍几个方法:Bagging(减小方差),Boosting(减小偏差)以及Stacking(改进预测)。

  • Bagging:通过对数据有放回的抽取,构建多个样本数据集,然后用这些样本数据集训练处多个分类器(数据随机化 )。因为是有放回的抽取,所以一个样本的数据可能会出现多次,而有的样本则会被忽略。该方法通过降低基分类器的方差来改善模型的泛化能力的,因此Bagging的性能依赖于基分类器的稳定性。如果基分类器是不稳定的(方差大),Bagging有助于减低训练数据的随机扰动导致的误差,但是如果基分类器是稳定的,即对数据变化不敏感,那么Bagging方法就得不到性能的提升,甚⾄会降低。
  • 在这里插入图片描述
  • Boosting
    提升⽅法是⼀个迭代的过程,通过改变样本分布,使得分类器聚集在那些很难分
    的样本上,对那些容易错分的数据加强学习,增加错分数据的权重,这样错分的数据在下⼀轮的迭代就有更⼤的作用(对错分数据进行惩罚)
    在这里插入图片描述
  • Stacking
    Stacking方法是指训练一个模型用于组合其他各个模型。首先我们先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。理论上,Stacking可以表示上面提到的两种Ensemble方法,只要我们采用合适的模型组合策略即可。但在实际中,我们通常使用logistic回归作为组合策略。即把各个模型的预测结果,作为新的数据,这是第一层。然后再用算法进行预测,这是第二层。
    在这里插入图片描述
  • Bagging与Boosting的区别:
  1. 取样方式不同Bagging采⽤均匀取样,⽽Boosting根据错误率来取样,因此Boosting的分类精度要优于BaggingBagging的训练集的选择是随机的,各轮训练集之间相互独⽴⽽Boostlng的各轮训练集的选择与前⾯各轮的学习结果有关
  2. 权重不同。Bagging的各个预测函数没有权重,⽽Boosting是有权重的;
  3. 计算方式不同。Bagging的各个预测函数可以并⾏⽣成,⽽Boosting的各个预测函数只能顺序⽣成。对于象神经⽹络这样极为耗时的学习⽅法。Bagging可通过并⾏训练节省⼤量时间开销。
  4. 效果不同bagging是减少variance,⽽boosting是减少bias。Bagging 是 Bootstrap Aggregating的简称,意思就是再取样 (Bootstrap) 然后在每个样本上训练出来的模型取平均,所以是降低模型的 variance. Bagging ⽐如 Random Forest 这种先天并⾏的算法都有这个效果。Boosting 则是迭代算法,每⼀次迭代都根据上⼀次迭代的预测结果对样本进⾏加权,所以随着迭代不断进⾏,误差会越来越⼩,所以模型的 bias 会不断降低。这种算法⽆法并⾏。

机器学习–集成学习
集成学习总结
集成学习—综述
Bagging + 决策树 = 随机森林
AdaBoost + 决策树 = 提升树
Gradient Boosting + 决策树 = GBDT

九、随机森林

简单介绍
是⽤随机的⽅式(数据和特征都随机)建⽴⼀个森林,森林⾥⾯有很多的决策树组成,随机森林的每⼀棵决策树之间是没有关联的。在得到森林之后,当有⼀个新的输⼊样本进⼊的时候,就让森林中的每⼀棵决策树分别进⾏⼀下判断,看看这个样本应该属于哪⼀类(对于分类算法),然后看看哪⼀类被选择最多,就预测这个样本为那⼀类。

随机森林的分类效果主要与以下两个因素有关:

  1. 森林中任意两棵树的相关性:相关性越强,效果越差。(bagging中的多样性)
  2. 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率就越低。(bagging中的准确性)

减小特征选择个数m,树的相关性和分类能⼒也会相应的降低;增⼤m,两者也会随之增⼤。所以关键问题是如何选择最优的m(或者是范围),这也是随机森林唯⼀的⼀个参数。

袋外错误率oob error(out-of-bag error)
袋外错误率能解决如何选择最优的特征个数m的问题。

随机森林有⼀个重要的优点就是,没有必要对它进⾏交叉验证或者⽤⼀个独⽴的测试集来获得误差的⼀个⽆偏估计。它可以在内部进⾏评估,也就是说在⽣成的过程中就可以对误差建⽴⼀个⽆偏估计。

我们知道,在构建每棵树时,我们对训练集使⽤了不同的bootstrap sample(随机且有放回地抽取)。所以对于每棵树⽽⾔,部分训练实例没有参与这棵树的⽣成,它们称为第k棵树的oob样本。(在袋外的样本)
袋外错误率(oob error)计算⽅式如下:
1)对每个样本,计算它作为oob样本的树,对它的分类情况(约1/3的树)
解释:设有S个树,如上我们所知,任意一个样本大约会出现在2/3S个树上,同时也约有1/3S棵树上没有出现这个样本。这个样本是这1/3S棵树上的oob(袋外样本)。这也意味着,这个样本可以作为1/3S棵树上的测试样本
2)以简单多数投票作为该样本的分类结果
解释:将某个样本放入1/3S棵树上,每个树都会得出一个预测结果,对这1/3S个数据进行投票。
3)最后⽤误分个数占样本总数的⽐率作为随机森林的oob误分率。
解释: 将每个预测结果和真实值进行比较,即ym^ 和 ym 是否相等。找出错误预测的个数占总数m的比率,即随机森林oob的误分率

oob误分率是随机森林泛化误差的一个无偏估计,它的结果近似于需要大量计算的k折交叉验证

袋外错误率的计算方式
袋外错误率(oob error)

随机采样与完全分裂
在建⽴每⼀棵决策树的过程中,有两点需要注意,分别是采样与完全分裂。

  • 采样:有行采样和列采样。行采样,因为有放回的采样,所以可能有重复的样本。这使得每棵树的输入样本都不是全部的样本,不容易出现过拟合。然后再进行列采样,从M个特征中,选择m个(m<<M)。
    如果不是有放回地采样,那么每棵树的训练样本都不同,没有交集,那么每棵树都是“有偏的”,训练出来有很大的差异(虽然每棵树是要有差异性,但若完全分开,彼此没有关联,则这种处理没有意义。就像一个问题出现了,回答问题的人向着四面八方去努力,这样每个人都想自己的,对解决问题毫无帮助。而不是你中有我,我中有你的去思考问题)。而随机森林是通过最后分类取决于多棵树(弱分类器)的投票表决,应该是求同的(彼此间要有联系)。使⽤完全不同的训练集来训练每棵树这样对最终分类结果是没有帮助的,所以要进行有放回地抽样
    对Bagging的改进:随机森林对Bagging的改进就在于随机采⽤的不同:
  1. 样本选择的改进:随机森林是选与输⼊样本的数⽬相同多的次数(可能⼀个样本会被选取多次,同时也会造成⼀些样本不会被选取到),而bagging⼀般选取⽐输⼊样本的数⽬少的样本;
  2. 特征选择的改进:bagging是⽤全部特征来得到分类器,⽽Random forest是需要从全部特征中选取其中的⼀部分来训练得到分类器; ⼀般Random forest效果⽐bagging效果好。
  • 完全分裂
    之后就是对采样的数据使⽤完全分裂的⽅式建⽴出决策树。这样决策树的某⼀个叶⼦节点要么是⽆法继续分裂的,要么⾥⾯的所有样本的都是指向的同⼀个分类。⼀般很多的决策树算法都⼀个重要的步骤 - 剪枝,但是这⾥不这样⼲(随机森林中的树不剪枝,让每棵树都达到自身最好的效果),由于之前的两个随机采样的过程保证了随机性,所以就算不剪枝,也不会出现过拟合。 按这种算法得到的随机森林中的每⼀棵都是很弱的,但是⼤家组合起来就很厉害了。

工作原理
样本数量随机,样本特征随机,每棵树都没有剪枝过程。
在这里插入图片描述
算法特点
优点:
在数据集上表现良好
它能够处理很⾼维度(feature很多)的数据,并且不⽤做特征选择
在训练完后,它能够给出哪些feature⽐较重要
训练速度快
容易做成并⾏化⽅法
实现⽐较简单
在创建随机森林的时候,对generlization error使⽤的是⽆偏估计
缺点:
劣势在于模型大小、是个很难去解释的黑盒子。

主要参数
n_estimators:森林中树的数量,初始越多越好,但是会增加训练时间,到达一定数量后模型的表现不会再有显著的提升
max_features:各个基学习器进行切分时随机挑选的特征子集中的特征数目,数目越小模型整体的方差会越小,但是单模型的偏差也会上升,经验性的设置回归问题的max_features为整体特征数目,而分类问题则设为整体特征数目开方的结果。

sklearn随机森林–参数详解
sklearn随机森林分类类RandomForestClassifier
Sklearn-RandomForest随机森林参数及实例

sklearn代码

from sklearn.ensemble import RandomForestClassifier
 
clf = RandomForestClassifier(n_estimators=8)
clf.fit(train_x, train_y)
from sklearn.ensemble import GradientBoostingClassifier
 
clf = GradientBoostingClassifier(n_estimators=200)
clf.fit(train_x, train_y)

十、总结

因为各种算法已经有很好的文章进行过说明,所以本文主要是对网上的资料进行整理。
对监督学习中常用的分类算法进行了简单的原理说明和sklearn代码(参照所给链接)。其中有的分类也可以用作回归,比如SVM,KNN,随机森林等。

十一、参考文献

https://tech.meituan.com/2015/05/08/intro-to-logistic-regression.html
https://github.com/Cyy-0422/AiLearning
sklearn学习总结(超全面)

发布了10 篇原创文章 · 获赞 18 · 访问量 7368

猜你喜欢

转载自blog.csdn.net/AvenueCyy/article/details/104511500