赞
踩
目录
1. ensemble.RandomForestClassifier (随机森林分类)
2. ensemble.RandomForestRegressor (随机森林回归)
1. ensemble.RandomForestClassifier
2. ensemble.RandomForestRegressor
集成学习 (ensemble learning) 是时下非常流行的 机器学习算法,它本身不是一个 单独的机器学习算法,而是 通过在数据上构建多个模型,集成所有模型的建模结果。基本上 所有的机器学习领域都可以 看到集成学习的 身影。在现在的 各种算法竞赛中,随机森林,梯度提升树(GBDT),Xgboost等集成算法的身影也随处可见,可见其效果之好,应用之广。
集成算法目标:
集成算法 会考虑 多个评估器的 建模结果,汇总之后 得到一个综合 的结果,以此来 获取比 单个模型更好的回归或分类表现。
多个模型集成成为的模型叫做 集成评估器(ensemble estimator),组成集成评估器的每个模型都叫做基评估器(base estimator)。通常来说,有三类集成算法:装袋法(Bagging),提升法(Boosting) 和stacking。
装袋法 的核心思想是构建多个相互独立的评估器,然后 对其预测 进行平均 或多数 表决原则来 决定集成评估器的 结果。装袋法的 代表模型就是 随机森林。
提升法 中,基评估器是 相关的,是按顺序 — — 构建的。其核心思想 是结合弱评估器的力量一次次对难以评估的样本 进行预测,从而构成一个强评估器。提升法的代表模型 有Adaboost和梯度提升树。
涉及模块:sklearn.ensemble
重要参数:criterion
回归树 衡量分枝质量的指标,支持的标准有三种:
① 输入“ mse”使用均方误差mean squared error(MSE),父节点和叶子节点之间的均方误差的差额将被用来 作为 特征选择的 标准,这种方法 通过 使用叶子节点的 均值来 最小化 L2损失。
② 输入“ friedman_mse”,使用费尔德曼均方误差,这种指标使用弗里德曼针对潜在分枝中的问题改进后的均方误差。
③ 输入“ mae” 使用绝对平均误差 MAE (mean absolute error),这种指标使用 叶节点的中值来 最小化 L1损失。
① 单个决策树的 准确率越高,随机森林的 准确率也会越高,因为 装袋法是 依赖于 平均值或者少数 服从多数 原则来 决定集成的结果的。
② n_estimators 参数对 随机森林模型的 精确性影响是 单调的,n_estimators 越大,模型的效果 往往越好。但是相应的,任何模型 都有决策边界,n_estimators达到一定的程度之后,随机森林的 精确性往往 不在上升 或 开始波动,并且,n_estimators 越大,需要的 计算量和 内存也越大,训练的时间 也会越来越长。
③ 当 random_state固定时,随机森林中生成是 一组固定的树,但 每棵树依然是 不一致的,这是 用随机挑选特征 进行分枝 的方法得到的 随机性。并且可以证明,当这种随机性越大 的时候,袋装法的效果 一般会越来越好。用 袋装法集成时,基分类器 应当是 相互独立的,是不相同的。
④ 袋装法 是通过 有放回的 随机抽样技术 来形成不同 的训练数据。在 使用随机森林时,我们 可以不划分 测试集和训练集,只需要 用袋外数据来 测试我们的 模型即可。(即控制 oob_score参数)
⑤ 当 n 和 n_estimators 都不够大 的时候,很可能 就没有 数据掉 落在袋外,自然也就无法使用 oob 数据来 测试模型了。
⑥ 在使用 袋装法时 要求基评估器 要尽量独立。其次还有 另一个必要条件:基分类器的判断准确率至少要超过随机分类器,即,基分类器的判断准确率至少要超过 50%。
- from sklearn.datasets import load_breast_cancer
- from sklearn.ensemble import RandomForestClassifier
- from sklearn.model_selection import cross_val_score
- import matplotlib.pyplot as plt
- import numpy as np
- import pandas as pd
-
- # 实例化数据集
- data = load_breast_cancer()
-
- rfc = RandomForestClassifier(criterion='gini',
- n_estimators=72,
- random_state=90,
- max_depth=8,
- min_samples_split=2,
- max_features=22
- )
- rfc = rfc.fit(data.data, data.target)
- score = cross_val_score(rfc, data.data, data.target, cv=10).mean()
- print(score)
- # 导入波士顿房价数据集
- import pandas as pd
- import numpy as np
- data_url = "http://lib.stat.cmu.edu/datasets/boston"
- raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
- data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
- target = raw_df.values[1::2, 2]
-
- from sklearn.ensemble import RandomForestRegressor
- from sklearn.model_selection import cross_val_score
-
- rfr = RandomForestRegressor(n_estimators=100, random_state=90)
- score = cross_val_score(rfr, data, target, scoring='neg_mean_squared_error', cv=5).mean()
- print(score)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。