【无标题】

随机森林和迁移学习在生物信息学上的应用:预测癌症

随机森林

对于决策树来说,当数据集的特征较多时,构造的决策树往往深度很大,很容易造成对训练数据的过拟合。随机森林本质上是很多决策树的集合,其中每棵树与其他树略有不同,尽管随机森林会出现决策树的特点,但是我们可以对这些树的结果取平均值来降低过拟合。这样既可以减少过拟合,又可以保持树的预测能力。
构造随机森林通过调整每个树的数据集和特征选择来构造均不相同的决策树。
由于使用了自主采样,随机森林中构造每棵决策树的数据集略有不同。由于每个节点的特征选择,每棵树的每次划分都是基于特征的不同子集。这两种方法共同保证随即森林中的每棵树都不相同。

自主采样

随即森林中每棵树在构造时彼此完全独立,均随机选择进行构建,确保树的唯一性。
从构造一棵树开始,首先对数据进行自主采样(bootstrap sample),即从n个大小的数据集中有放回地抽取一个样本,重复多次抽取n次,这样就会创建一个与原数据集数目相同的由n个元素组成的自助集。由于在随机采样中每次自助集与原始训练集不同,因此我们可以自由创造取之不尽用之不竭的数据。

特征子集随机选择

在具体的算法部分,随即森林对决策树的算法稍做修改。
在每个节点处,算法随机选择特征的一个子集,并对其中的一个特征寻找最佳测,而不是像决策树那样对所有特征都寻找最佳测试。
其中特征选择个数由max_features决定,每个节点中特征子集的选择相对独立,这样树的每个节点可以使用特征的不同子集做出决策。
其中该参数max_features较为重要。

  1. 若max_features = n_features 每次划分均考虑数据集的所有特征,等于未添加特征选择的随机性。
  2. max_features较大,随即森林中的树将会十分相似,利用最独特的特征可以轻松拟合数据
  3. max_features较小,随即森林中的树差异会很大,为了很好地拟合数据,每棵树的深度都要很大

随机森林的分类问题和回归问题

回归问题中,对这些结果取平均值作为最终预测。
分类问题中,采取soft voting(软投票)策略,即每个算法做出“软”预测,给出每个输出标签的概率。对所有树的概率取平均值。

RandomForestClassifier

重要的参数如下:
1、n_estimators:(决定了森林中树木的数量,即基评估器的数量,默认值=100)

n_estimators对随机森林模型的精确性影响是单调的,n_estimators越大,模型的效果往往越好。但是相应的,任何模型都有决策边界,n_estimators达到一定的程度之后,随机森林的精确性往往不在上升或开始波动,并且,n_estimators越大,需要的计算量和内存也越大,训练的时间也会越来越长。

2、random_state:

用法和分类树中相似,只不过在分类树中,一个random_state只控制生成一棵树,而随机森林中的random_state控制的是生成森林的模式,而非让一个森林中只有一棵树。当random_state固定时,随机森林中生成是一组固定的树,但每棵树依然是不一致的,这是用”随机挑选特征进行分枝“的方法得到的随机性。并且我们可以证明,当这种随机性越大的时候,袋装法的效果一般会越来越好。用袋装法集成时,基分类器应当是相互独立的,是不相同的。

3、bootstrap :(默认True)

要让基分类器尽量都不一样,一种很容易理解的方法是使用不同的训练集来进行训练,而袋装法正是通过有放回的随机抽样技术来形成不同的训练数据,bootstrap就是用来控制抽样技术的参数。在一个含有n个样本的原始训练集中,我们进行随机采样,每次采样一个样本,并在抽取下一个样本之前将该样本放回原始训练集,也就是说下次采样时这个样本依然可能被采集到,这样采集n次,最终得到一个和原始训练集一样大的,n个样本组成的自助集。由于是随机采样,这样每次的自助集和原始数据集不同,和其他的采样集也是不同的。这样我们就可以自由创造取之不尽用之不竭,并且互不相同的自助集,用这些自助集来训练我们的基分类器,我们的基分类器自然也就各不相同了。bootstrap代表采用这种有放回的随机抽样技术。通常,这个参数不会被我们设置为False。

4、oob_score:

在上面第三个参数中我们提到,bootstrap代表采用有放回的随机抽样技术,而由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略,一般来说,自助集大约平均会包含63%的原始数据。因为每一个样本被抽到某个自助集中的概率为:

当n足够大时,这个概率收敛于1-(1/e),约等于0.632。因此,会有约37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。除了我们最开始就划分好的测试集之外,这些数据也可以被用来作为集成算法的测试集。也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可。当然,这也不是绝对的,当n和n_estimators都不够大的时候,很可能就没有数据掉落在袋外,自然也就无法使用oob数据来测试模型了。如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True,训练完毕之后,我们可以用随机森林的另一个重要属性:oob_score_来查看我们的在袋外数据上测试的结果。

guanfang

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值