随机森林 n_estimators参数 max_features参数

随机森林

随机森林本质上是许多以不同方式过拟合的决策树的集合,我们可以对这些互不相同的树的结果取平均值来降低过拟合,这样既能减少过拟合又能保持树的预测能力。随机森林可用于回归或分类,通过sklearn.ensemble的RandomForestRegressor模块(回归)或RandomForestClassifier模块(分类)调用。

构造随机森林的步骤:

①确定用于构造的树的个数

②对数据进行自助采样

③基于新数据集构造决策树

要构造一个随机森林模型,第一步是确定森林中树的数目,通过模型的 进行调节。n_estimators越大越好,但占用的内存与训练和预测的时间也会相应增长,且边际效益是递减的,所以要在可承受的内存/时间内选取尽可能大的n_estimators。而在sklearn中,n_estimators默认为10。

随机森林之所以称为随机森林,是因为构造时添加了随机性,②与③正是随机性的体现。第二步是对数据进行自助采样,也就是说,从n_sample个数据点中有放回地重复随机抽取一个样本,共抽取n_sample次。新数据集的容量与原数据集相等,但抽取的采样往往与原数据集不同。注意,构建的n_estimators棵树采用的数据集都是独立自助采样的,这样才能保证所有树都互不相同。

接下来第三步就是基于这个新数据集来构造决策树。由于加入了随机性,故构造时与一般的决策树不同。构造时,在每个结点处选取特征的一个子集,并对其中一个特征寻找最佳测试。选取的特征子集中特征的个数通过max_features参数来控制,max_features越小,随机森林中的树就越不相同,但过小(取1时)会导致在划分时无法选择对哪个特征进行测试。而在sklearn中,max_features有以下几种选取方法:"auto", "sqrt", "log2", None。auto与sqrt都是取特征总数的开方,log2取特征总数的对数,None则是令max_features直接等于特征总数,而max_features的默认值是"auto"。

随机森林还有一个重要参数是n_jobs,决定了使用的CPU内核个数,使用更多的内核能使速度增快,而令n_jobs=-1可以调用所有内核。当然,构造时同样可以使用max_depth,min_samples_leaf和max_leaf_nodes来进行预剪枝,以减小内存占用与时间消耗。

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.datasets import load_breast_cancer

cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(cancer.data, cancer.target, 
	stratify=cancer.target, random_state=4)

forest5 = RandomForestClassifier(n_estimators=5, random_state=0).fit(X_train, y_train)
print("n_estimators=5")
print("Accuracy on training set: {:.3f}".format(forest5.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}\n".format(forest5.score(X_test, y_test)))

forest100 = RandomForestClassifier(n_estimators=100, random_state=0).fit(X_train, y_train)
print("n_estimators=100")
print("Accuracy on training set: {:.3f}".format(forest100.score(X_train, y_train)))
print("Accuracy on test set: {:.3f}".format(forest100.score(X_test, y_test)))
n_estimators=5
Accuracy on training set: 0.998
Accuracy on test set: 0.923

n_estimators=100
Accuracy on training set: 1.000
Accuracy on test set: 0.972

预测时,若是回归任务,则对森林中的每棵树进行预测,对结果取平均值作为预测值;若是分类任务,则对森林中每棵树进行预测,每棵树给出每个可能输出的标签的概率,对每个标签取每棵树给出的概率的平均值,取概率最大的标签作为预测结果,称为软投票。

随机森林拥有决策树的所有优点,且给出的特征重要性比单棵树给出的更为可靠。但随机森林对维度较高的稀疏数据表现不好,且训练和预测的速度比线性模型要慢。

 

梯度提升回归树

梯度提升回归树(gradient boosted decision tree, GBDT),也称为梯度提升机,采用连续的方式构造树,每棵树都试图纠正前一棵树的错误。与随机森林不同,梯度提升回归树没有使用随机化,而是用到了强预剪枝,从而使得梯度提升树往往深度很小,这样模型占用的内存少,预测的速度也快。梯度提升回归树同样可用于回归或分类,通过sklearn.ensemble的GradientBoostingRegressor模块(回归)或GradientBoostingClassifier模块(分类)调用。

  • 27
    点赞
  • 154
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值