集成算法:随机森林

随机森林是一种集成学习方法,通过结合多个决策树来进行分类或回归。它在样本集上进行有放回抽样,每次从特征中随机选择一定数量的特征进行决策树构建。随机森林具有高准确率、不易过拟合、处理高维特征和多种类型数据的优势,但也存在计算资源需求大、回归问题表现一般及解释性较差的缺点。在实际应用中,随机森林被广泛用于各种任务,表现出强大的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  在集成算法这一章中,我们大概的阐述了一下常用的两种集成算法,这里我们就具体研究一下 b a g g i n g bagging bagging 算法中最常用的模型:随机森林。
  由前面我们了解: b a g g i n g bagging bagging + 决策树 = 随机森林,所以在学习随机森林之前,我们必须了解决策树相关的知识,这些我在ID3C4.5CART中已经比较详细的讲过一遍,这里就不在赘述了,有不懂的童鞋可以去前面看看。

  
算法思想

  随机森林是集成学习的一个子类,它依靠于决策树的投票选择来决定最后的分类结果,通俗的讲,随机森林就是用随机的方式建立一个森林,森林由许多决策树组成,而且每一棵决策树相互之间是没有关联的。得到森林后,当有一个新的样本进入森林后,就让森林中的每一个决策树分别进行判断,看看这个样本属于哪一个类,最终哪一个类最多,就预测这个样本属于哪一个类。
  
算法流程

  1. 从样本集中有放回的随机选取n个样本
  2. 如果每个样本的特征维度为 m m m,指定一个常数 n &lt; &lt; m n&lt;&lt;m n<<m,随机地从 m m m 个特征中选取 n n n 个特征子集,再对子样本进行完全分裂的方式建立决策树(也可以是其他类型的分类器,比如 S V M SVM SVM L o g i s t i c s Logistics Logistics)。
  3. 重复上述步骤 n n n 次,即建立了 n n n 棵决策树。
  4. 将 n n n 棵决策树形成随机森林,通过投票表决结果,最终决定数据属于哪一类。

  这种算法得到随机森林中的每一棵决策树都是很弱的,但是将他们组合起来就很厉害。这里有个形象的比喻:每一个决策树都是一个精通某领域的专家,这样在随机森林中就有很多歌精通不同领域的专家,对于一个新问题,最终是由多个专家投票的结果。
  
特点

  随机森林优点:
    1. 在当前所有算法中,具有极好的准确率
    2. 能处理高维特征,不容易产生过拟合,模型训练速度比较快,而且不需要降维
    3. 既能处理离散型数据,也能处理连续型数据,数据集无需规范化
    4. 对于缺省值问题也能够获得很好得结果
  随机森林缺点:
    1. 当随机森林中的决策树个数很多时,训练时需要的空间和时间会较大
    2. 随机森林在解决回归问题时并没有像它在分类中表现的那么好,不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合
    3. 随机森林模型还有许多不好解释的地方,有点算是黑盒模型
  
代码分析

	from sklearn.ensemble import RandomForestClassifier    # 分类
	# from sklearn.ensemble import RandomForestRegressor     # 回归
	from sklearn.model_selection import train_test_split 
	from sklearn import datasets 
	
	iris = datasets.load_iris() # 加载iris数据集 
	X = iris.data 
	y = iris.target 
	X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) 
	
	clf = RandomForestClassifier(n_estimators=10, max_features=3) 
	clf.fit(X_train, y_train) # 建模 
	ans = clf.predict(X_test) # 预测 # 计算准确率 
	
	cnt = 0 
	for i in range(len(y_test)): 
	    if ans[i] - y_test[i] < 1e-1: 
	        cnt += 1 
	    print("准确率: ", (cnt * 100.0 / len(y_test)),"%")

  使用上述方法时要调整的参数主要是 n_estimators  {\text{n\_estimators }} n_estimators  max_features  {\text{max\_features }} max_features  n_estimators  {\text{n\_estimators }} n_estimators  是森林里树的数量,通常数量越大,效果越好,但是计算时间也会随之增加。 此外要注意,当树的数量超过一个临界值之后,算法的效果并不会很显著地变好。 max_features  {\text{max\_features }} max_features  是分割节点时考虑的特征的随机子集的大小。 这个值越低,方差减小得越多,但是偏差的增大也越多。 根据经验,回归问题中使用 max_features  = n_features  {\text{max\_features }} = {\text{n\_features }} max_features =n_features  , 分类问题使用 max_features  = s q r t ( n_features  ) {\text{max\_features }} = sqrt(\text{n\_features }) max_features =sqrt(n_features )其中 n_features  {\text{n\_features }} n_features  是特征的个数, 这是比较好的默认值。 max_depth  = N o n e {\text{max\_depth }} = None max_depth =None min_samples_split  = 2 {\text{min\_samples\_split }} = 2 min_samples_split =2 结合通常会有不错的效果(即生成完全的树)。 但请记住,这些默认值通常不是最佳的,同时还可能消耗大量的内存,最佳参数值应由交叉验证获得。 另外,请注意,在随机森林中,默认使用自助采样法( b o o t s t r a p = T r u e bootstrap = True bootstrap=True),当使用自助采样法方法抽样时,泛化精度是可以通过剩余的或者袋外的样本来估算的,设置 oob_score  = T r u e {\text{oob\_score }} = True oob_score =True 即可实现。
  
总结

  随机森林用随机的方式建立一个森林,森林里面有很多的决策树组成,能够执行回归和分类的任务,它将几个低效模型整合为一个高效模型。主要解决了决策树泛化能力弱的缺点。同时,随机森林也实现了数据降维,是处理缺失值、异常值或其他数据的重要手段,并取得了不错成效。随机森林是人工智能之机器学习中最近比较火的算法,具有准确度高、抗噪声强、速度快、并行化、适用广等优点,在实际应用中,随机森林算法性能表现得非常强大和实用,因此在业界受到高度关注和欢迎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值