机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南

sklearn的系统学习——随机森林调参(含案例及完整python代码) 对于调参,首先需要明白调参的核心问题是什么,然后理清思路,再进行调参。调参并非是一件容易的事情,很多大牛靠的是多年积累的经验和清晰的处理思路,那对于我们而言,也应对调参思路和方向有一个认识,然后就是不断地尝试。...... 阅读详情
AI摘要

本文深入解析随机森林算法原理,包括其构建过程、特点及优势,并提供详细的调参指南,帮助读者理解如何有效应用这一强大的集成学习方法。

一、什么是随机森林

前面我们已经介绍了决策树的基本原理和使用。但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样本,又不能很好地拟合样本。

为了解决这个两难困境,聪明的专家们想出了这样的思路:既然我增加单棵树的深度会适得其反,那不如我不追求一个树有多高的精确度,而是训练多棵这样的树来一块预测,一棵树的力量再大,也是有限的,当他们聚成一个集体,它的力量可能是难以想象的,也就是我们常说的:“三个臭皮匠赛过诸葛亮”。这便是集成学习的思想。

这里多提一句,正是因为每棵树都能够用比较简单的方法细致地拟合样本,我们可以多用几棵树来搭建准确率更高的算法,后边要说到的一些工业级的算法,比如GBDT、XGBOOST、LGBM都是以决策树为积木搭建出来的。

所以在学习这些算法的过程中,我们也要把决策树算法看成一块块积木,学完了基本的积木算法之后,对于现在常用的那几个工业级的算法,只需要理清两个问题:

1)这个算法利用了哪个集成学习思想

2)这个算法具体怎么把这个思想实现出来的。

随机森林就是决策树们基于bagging集成学习思想搭建起来的。

随机森林的算法实现思路非常简单,只需要记住一句口诀:抽等量样本,选几个特征,构建多棵树。

下面,我们详细解释这个口诀的含义:

1)抽等量样本

随机森林训练每棵树之前,都会从训练集中随机抽出一部分样本来训练。所以说训练每棵树用到的样本其实都是有差别的,这样就保证了不同的树可以重点学习不同的样本。而为了达到抽等量样本的目的,抽样方式一般是有放回的抽样,也就是说,在训练某棵树的时候,这一次被抽到的样本会被放回数据集中,下一次还可能被抽到,因此,原训练集中有的样本会多次被抽出用来训练,而有的样本可能不会被使用到。

但是不用担心有的样本没有用到,只要训练的树的棵数足够多,大多数训练样本总会被取到的。有极少量的样本成为漏网之鱼也不用担心,后边我们会筛选他们出来用来测试模型。

2)选几个特征

在训练某棵树的时候,也不是将样本的所有特征都用来训练,而是会随机选择一部分特征用来训练。这样做的目的就是让不同的树重点关注不同的特征。在scikit-learn中,用“max_features”这个参数来控制训练每棵树选取的样本数。

3)构建多棵树。

通过1)、2)两个步骤,训练多棵树。鲁迅曾经说过:世界上本没有森林,长得树多了,就成了森林。正是一棵棵决策树构成了整个随机森林。具体构建树的数量,在scikit-learn中,用“n_estimators”这个参数来控制。
在这里插入图片描述

那最终的预测结果怎么得到呢?随机森林是非常民主的算法,最终的结果由每棵决策树综合给出:如果是分类问题,那么对于每个测试集,树都会预测出一个类别进行投票,最终统计票数多的那个类别为最终类别。看看,这算法俨然是一个遵循:“少数服从多数”的原则的小型民主社会;如果是回归问题,那就更简单了,各个树得到的结果相加求得一个平均值为最终回归结果。

从上边的流程中可以看出,随机森林的随机性主要体现在两个方面:**数据集的随机选取、每棵树所使用特征的随机选取。**以上两个随机性使得随机森林中的决策树都能够彼此不同,提升系统的多样性,从而提升分类性能。

二、随机森林的特点

以上就是随机森林的构建原理,下面,我们说说随机森林算法的优缺点:

1、优点:

1)实现简单,泛化能力强,可以并行实现,因为训练时树与树之间是相互独立的;

2)相比单一决策树,能学习到特征之间的相互影响,且不容易过拟合;

3)能直接特征很多的高维数据,因为在训练过程中依旧会从这些特征中随机选取部分特征用来训练;

4)相比SVM,不是很怕特征缺失,因为待选特征也是随机选取;

5)训练完成后可以给出特征重要性。当然,这个优点主要来源于决策树。因为决策树在训练过程中会计算熵或者是基尼系数,越往树的根部,特征越重要。

2、缺点

1)在噪声过大的分类和处理回归问题时还是容易过拟合;

2)相比于单一决策树,它的随机性让我们难以对模型进行解释。

三、随机森林的使用

和决策树类似,随机森林同样可以分为分类森林(RandomForestClassifier )和回归森林(RandomForestRegressor),在scikit-lean中调用方式和决策树相同。

让我们在手写识别数据集上实现一个分类森林。

#导入必要的包
from sklearn.ensemble import RandomForestClassifier 
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split,GridSearchCV,cross_val_score
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
import numpy as np

#导入数据集
data = load_digits()
x = data.data
y = data.target

用随机森林训练并进行交叉验证:

RF = RandomForestClassifier(random_state = 66)
score = cross_val_score(RF,x,y,cv=10).mean()
print('交叉验证得分: %.4f'%score)

输出:

交叉验证得分: 0.9278

四、随机森林调参

一)随机森林参数介绍

除了和决策树有的参数之外,对于随机森林,只需要掌握8个新增的参数即可,我将这8个参数分成三类:

1、用于调参的参数:
  • max_features(最大特征数): 这个参数用来训练每棵树时需要考虑的最大特征个数,超过限制个数的特征都会被舍弃,默认为auto。可填入的值有:int值,float(特征总数目的百分比),“auto”/“sqrt”(总特征个数开平方取整),“log2”(总特征个数取对数取整)。默认值为总特征个数开平方取整。值得一提的是,这个参数在决策树中也有但是不重要,因为其默认为None,即有多少特征用多少特征。为什么要设置这样一个参数呢?原因如下:考虑到训练模型会产生多棵树,如果在训练每棵树的时候都用到所有特征,以来导致运算量加大,二来每棵树训练出来也可能千篇一律,没有太多侧重,所以,设置这个参数,使训练每棵树的时候只随机用到部分特征,在减少整体运算的同时还可以让每棵树更注重自己选到的特征。
  • n_estimators:随机森林生成树的个数,默认为100。
2、控制样本抽样参数:
  • bootstrap:每次构建树是不是采用有放回样本的方式(bootstrap samples)抽取数据集。可选参数:True和False,默认为True。
  • oob_score:是否使用袋外数据来评估模型,默认为False。

boostrap和 oob_score两个参数一般要配合使用。如果boostrap是False,那么每次训练时都用整个数据集训练,如果boostrap是True,那么就会产生袋外数据。

先解释一下袋外数据的概念:

在一个含有n个样本的原始训练集中,我们每次随机取出一个样本并记录,并在抽取下一个样本之前将该样本放回原始训练集,即下次采样时这个样本依然可能被采集到,这样采集n次,最终得到一个和原始训练集一样大的子数据集。

由于是随机采样,这样每次的子数据集和原始数据集都不同,用这些子数据集来各自训练一棵树,这些树的参数自然也就各不相同了。

然而有放回抽样也会有自己的问题。由于是有放回,一些样本可能在同一个自助集中出现多次,而其他一些却可能被忽略,一般来说,每一次抽样,某个样本被抽到的概率是 1/n ,所以不被抽到的概率就是 1-1/n ,所以n个样本都不被抽到的概率就是: ( 1 − 1 n ) n (1-\frac{1}{n})^n (1−n1​)n 用洛必达法则化简,可以得到这个概率收敛于(1/e),约等于0.37。

因此,如果数据量足够大的时候,会有约37%的训练数据被浪费掉,没有参与建模,这些数据被称为袋外数据(out of bag data,简写为oob)。

为了这些数据不被浪费,我们也可以把他们用来作为集成算法的测试集。也就是说,在使用随机森林时,我们可以不划分测试集和训练集,只需要用袋外数据来测试我们的模型即可。

当然,这需要样本数据n和分类器个数n_estimators都很大,如果数据集过少,很可能就没有数据掉落在袋外,自然也就无法使用oob数据来测试模型了。

当bootstrap参数取默认值True时,表示抽取数据集时采用这种有放回的随机抽样技术。如果希望用袋外数据来测试,则需要在实例化时就将oob_score这个参数调整为True,训练完毕之后,我们可以用随机森林的另一个重要属性:oob_score_来查看我们的在袋外数据上测试的结果,代码如下:

#训练一个模型,让oob_score=True
RF1 = RandomForestClassifier(n_estimators=25,oob_score=True)
RF1 =RF1.fit(x,y)
#查看oob_score_,即袋外误差
RF1.oob_score_

输出:0.9393433500278241

这个就是没有参与训练的数据集在模型上的测试得分。

3、不重要参数
  • max_samples:构建每棵树需要抽取的最大样本数据量,默认为None,即每次抽取样本数量和原数据量相同。
  • n_jobs::设定fit和predict阶段并列执行的CPU核数,如果设置为-1表示并行执行的任务数等于计算机核数。默认为None,即采用单核计算。
  • verbose:控制构建数过程的冗长度,默认为0。一般不需要管这个参数。
  • warm_start:当设置为True,重新使用之前的结构去拟合样例并且加入更多的估计器(estimators,在这里就是随机树)到组合器中。默认为 False

以上这几个参数只需要简单了解即可,大多数参数在使用过称重不用调整,只是需要注意一点,n_jobs默认为None,为了加快速度,可以把n_jobs设置为-1。

二)随机森林调参顺序

介绍完了这些参数,接下来就要介绍随机森林的调参顺序了,随机森林的调参顺序一般遵循先重要后次要、先粗放后精细的原则,即先确定需要多少棵树参与建模,再对每棵树做细致的调参,精益求精。

相对于xgboost等算法,随机森林的调参还是相对比较简单,因为各个参数之间互相影响的程度很小,只需要按步骤调整即可。

结合我们决策树文章中提到的参数以及今天所讲的两个参数,随机森林中主要用来调参的参数有6个:

  • n_estimators:
  • criterion
  • max_depth
  • min_samples_split
  • min_samples_leaf
  • max_features

调参顺序如下:

1)选择criterion参数(决策树划分标准)

和决策树一样,这个参数只有两个参数 ‘entropy’(熵) 和 ‘gini’(基尼系数)可选,默认为gini,这里简单测试一下就好

RF = RandomForestClassifier(random_state = 66)
score = cross_val_score(RF,x,y,cv=10).mean()
print('基尼系数得分: %.4f'%score)
RF = RandomForestClassifier(criterion = 'entropy',random_state = 66)
score = cross_val_score(RF,x,y,cv=10).mean()
print('熵得分: %.4f'%score)

输出:

基尼系数得分: 0.9278
熵得分: 0.9249

这里看到,依旧是选用gini系数模型效果更好。

2)探索n_estimators的最佳值。

接下来才是进入真正的调参环节。根据上述调参原则,我们先看看用几棵树模型的表现最好。一般来说,树的棵数越多,模型效果表现越好,但树的棵数达到一定的数量之后,模型精确度不再上升,训练这个模型的计算量却逐渐变大。这个时候,再加树的数量就没必要了。就好比你饿的时候每吃一个馒头就特别顶饱,但是吃到一定数量的馒头之后,再吃就要撑着了。

只要找到这个临界值,这个参数就调好了。为了观察得分随着树增多的变化,我们依然绘制决策树调参时的学习曲线。

###调n_estimators参数
ScoreAll = []
for i in range(10,200,10):
    DT = RandomForestClassifier(n_estimators = i,random_state = 66) #,criterion = 'entropy'
    score = cross_val_score(DT,data.data,data.target,cv=10).mean()
    ScoreAll.append([i,score])
ScoreAll = np.array(ScoreAll)

max_score = np.where(ScoreAll==np.max(ScoreAll[:,1]))[0][0] ##这句话看似很长的,其实就是找出最高得分对应的索引
print("最优参数以及最高得分:",ScoreAll[max_score])  
plt.figure(figsize=[20,5])
plt.plot(ScoreAll[:,0],ScoreAll[:,1])
plt.show()

输出:

最优参数以及最高得分: [120. 0.95560035]
在这里插入图片描述

根据曲线,我们进一步缩小范围,搜索100~130之间的得分。(这里可以根据经验自己指定)

###进一步缩小范围,调n_estimators参数
ScoreAll = []
for i in range(100,130):
    DT = RandomForestClassifier(n_estimators = i,random_state = 66)   #criterion = 'entropy',
    score = cross_val_score(DT,data.data,data.target,cv=10).mean()
    ScoreAll.append([i,score])
ScoreAll = np.array(ScoreAll)

max_score = np.where(ScoreAll==np.max(ScoreAll[:,1]))[0][0] ##这句话看似很长的,其实就是找出最高得分对应的索引
print("最优参数以及最高得分:",ScoreAll[max_score])  
plt.figure(figsize=[20,5])
plt.plot(ScoreAll[:,0],ScoreAll[:,1])
plt.show()

输出:

最优参数以及最高得分: [117. 0.95727946]
在这里插入图片描述

可以看到,117为得分最高点,我们暂定n_estimators为117,接着调下边的参数。

3)探索max_depth(树的最大深度)最佳参数

###粗调max_depth参数
ScoreAll = []
for i in range(10,30,3):
    DT = RandomForestClassifier(n_estimators = 117,random_state = 66,max_depth =i ) #,criterion = 'entropy'
    score = cross_val_score(DT,data.data,data.target,cv=10).mean()
    ScoreAll.append([i,score])
ScoreAll = np.array(ScoreAll)

max_score = np.where(ScoreAll==np.max(ScoreAll[:,1]))[0][0] ##这句话看似很长的,其实就是找出最高得分对应的索引
print("最优参数以及最高得分:",ScoreAll[max_score])  
plt.figure(figsize=[20,5])
plt.plot(ScoreAll[:,0],ScoreAll[:,1])
plt.show()

输出:

最优参数以及最高得分: [16. 0.95727946]
在这里插入图片描述

转折点在16,但是16之后一直没有变化,可以说明就算不限制,所有树的最大深度也就是16左右,因为我们以步长为3搜索的,所以还需要进一步搜索一下16附近的值。

精细搜索之后发现,16这个值就是转折点,所以暂定max_depth = 16。

4)探索min_samples_split(分割内部节点所需的最小样本数)最佳参数
min_samples_split最小值就是2,我们就从2开始调起。

###调min_samples_split参数
ScoreAll = []
for i in range(2,10):
    RF = RandomForestClassifier(n_estimators = 117,random_state = 66,max_depth =16,min_samples_split = i ) #,criterion = 'entropy'
    score = cross_val_score(RF,data.data,data.target,cv=10).mean()
    ScoreAll.append([i,score])
ScoreAll = np.array(ScoreAll)

max_score = np.where(ScoreAll==np.max(ScoreAll[:,1]))[0][0] ##这句话看似很长的,其实就是找出最高得分对应的索引
print("最优参数以及最高得分:",ScoreAll[max_score])  
plt.figure(figsize=[20,5])
plt.plot(ScoreAll[:,0],ScoreAll[:,1])
plt.show()

输出:

最优参数以及最高得分: [2. 0.95727946]
在这里插入图片描述

可以看到,随着min_samples_split增大,模型得分下降,说明没有出现过拟合现象,min_samples_split暂定2。

5)探索min_samples_leaf(分割内部节点所需的最小样本数)最佳参数

###调min_samples_leaf参数
ScoreAll = []
for i in range(1,15,2):
    DT = RandomForestClassifier(n_estimators = 117,random_state = 66,max_depth =16,min_samples_leaf = i,min_samples_split = 2 ) 
    score = cross_val_score(DT,data.data,data.target,cv=10).mean()
    ScoreAll.append([i,score])
ScoreAll = np.array(ScoreAll)

max_score = np.where(ScoreAll==np.max(ScoreAll[:,1]))[0][0] ##这句话看似很长的,其实就是找出最高得分对应的索引
print("最优参数以及最高得分:",ScoreAll[max_score])  
plt.figure(figsize=[20,5])
plt.plot(ScoreAll[:,0],ScoreAll[:,1])
plt.show()

输出:

最优参数以及最高得分: [1. 0.95727946]
在这里插入图片描述

5)对每棵树用到的最大特征数max_features调参:

正常来说,只要这个值不要设置得太小,所有特征都会被整个森林抽取到用来训练, 所以相对来说这个值对整个模型的影响不是太大。但这个值越大,单棵树需要考虑的特征越多,虽然模型的表现可能会更好,但是增加这个值会导致算法运行速度变慢,所以需要我们考虑去找一个平衡值。

#调max_features参数
param_grid = {
    'max_features':np.arange(0.1, 1)}

rfc = RandomForestClassifier(random_state=66,n_estimators = 117,max_depth = 16,min_samples_leaf =1 ,min_samples_split =4 )
GS = GridSearchCV(rfc,param_grid,cv=10)
GS.fit(data.data,data.target)
print(GS.best_params_)
print(GS.best_score_)

输出:

{‘max_features’: 0.1}
0.9560335195530726

如果时间充裕,接下来也可以将min_samples_leaf和min_samples_split作为网格参数联调一下,因为这两个参数会相互影响,这里暂时省略这一步。

此时,我们得到的参数如下:

参数值
n_estimators117
max_depth16
min_samples_leaf1
min_samples_split2
max_features0.1

6)在得到的最优参数附近进行小范围网格搜索

因为手动调参时,这些参数可能会相互影响,导致我们得到的参数还不是最优的。所以在最优参数附近进行小范围的网格搜索,排出相互影响的因素,尤其是在数据集量比较少时,小范围搜索一下可能会有意外收获。

import time
start = time.time()

param_grid = {
  'n_estimators':np.arange(140, 150),
  'max_depth':np.arange(15, 18),
  'min_samples_leaf':np.arange(1, 8),
  'min_samples_split':np.arange(2, 5),
   'max_features':np.arange(0.1, 1)
}

rfc = RandomForestClassifier(random_state=66)
GS = GridSearchCV(rfc,param_grid,cv=10)
GS.fit(data.data,data.target)
end = time.time()
print("循环运行时间:%.2f秒"%(end-start))
print(GS.best_params_)
print(GS.best_score_)

输出如下:

循环运行时间:3052.67秒
{‘max_depth’: 16, ‘max_features’: 0.1, ‘min_samples_leaf’: 1, ‘min_samples_split’: 3, ‘n_estimators’: 143}
0.9599332220367279

可以看到,精确度又上升了一点,此时,我们得到的新旧参数对比如下:

参数旧值新值
n_estimators117143
max_depth1616
min_samples_leaf11
min_samples_split23
max_features0.10.1

对比一下新旧参数,可以看到参数变化还是比较大的,尤其是树的棵数这个参数。当然,这里主要原因是我们用来做示例的这个预置的数据集只有1797条数据,导致参数的随机性太大,在实际使用中数据集数量都是十万百万级的,不会出现我们手动调整的参数和小范围网格搜索参数差别这么大的情况。

最后需要说明的一点是:随机森林相对于决策树来说运行较慢,在调参时可以将参数搜索范围设置得小一些。

当然,这只是我个人的调参顺序,仅用来参考,没必要这么固化。实际调参时可以根据实际情况做一些调整。还是那句话:正是调参过程充满的各种不确定性,才是调参的真正魅力所在。

五、本系列相关文章

【机器学习】十大算法之一 “随机森林” 随机森林算法(Random Forest, RF)是由Leo Breiman和Adele Cutler于2001年提出的一种集成学习(Ensemble Learning)算法。它是由多个决策树构成的分类器,通过对每个决策树的投票结果来确定最终的预测结果。随机森林算法可以用于分类和回归分析。在分类问题中,每个决策树的输出结果为一个类别标签,通过投票来确定样本所属的类别。在回归问题中,每个决策树的输出结果为一个连续值,取所有决策树输出结果的平均值作为最终结果。可以处理高维度数据;可以处理不平衡的数据集。 阅读详情

相关推荐

【机器学习】随机森林及调参 学习笔记

RF优点1.不容易出现过拟合,因为选择训练样本的时候就不是全部样本。2.可以既可以处理属性为离散值的量,比如ID3算法来构造树,也可以处理属性为连续值的量,比如C4.5算法来构造树。3.对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能。4.分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法RF缺点。

m0_51933492的博客 1293

随机森林算法训练及调参-附代码

随机森林算法的理论知识   随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法。随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为“代表集成学习技术水平的方法”。 一,随机森林的随机性体现在哪几个方面? 1,数据集的随机选取   从原始的数据集中采取有放回的抽样(bagging),构造子数据集,子数据集的数据量是和原始数据集相同的。不同子数据集的元素可以重复,同一个子数据集中的元素也可以重复。 2,待选特征的随机选取   与数

weixin_43499818的博客 2万+

机器学习算法实战系列:决策树与随机森林全攻略

为什么随机森林比单一决策树强大得多?答案就在集成学习的’集体智慧’中!Bagging:并行训练多个模型,通过投票或平均得到最终结果Boosting:串行训练模型,每个模型关注前一个模型的错误Stacking:用初级模型的输出作为次级模型的输入随机森林属于Bagging方法的典型代表。“恭喜你!现在你已经掌握了决策树和随机森林的核心原理与实战技巧,这是你机器学习之旅中的重要里程碑!随机森林因其出色的表现和易用性,已成为工业界最受欢迎的算法之一。尝试在Kaggle比赛中应用随机森林。

资深全栈架构师,乐于在 优快云 分享技术见解,与大家携手共进,共攀技术巅峰! 1255

随机森林调参方法

随机森林调参

qq_43449643的博客 9784

决策树模型案例_ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略

ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略目录随机森林RF算法简介1、RF基本的构建算法过程2、RF算法相关文献、论文随机森林RF算法的应用1、RF用于回归2、RF用于分类随机森林RF算法的经典案例1、基础用法随机森林RF算法简介​ 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。它包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定...

weixin_31741827的博客 1236

最佳(optimal)置换算法_ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略...

ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略目录随机森林RF算法简介1、RF基本的构建算法过程2、RF算法相关文献、论文随机森林RF算法的应用1、RF用于回归2、RF用于分类随机森林RF算法的经典案例1、基础用法随机森林RF算法简介​ 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器。它包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定...

weixin_39875805的博客 600

森林怎么训练野人_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

一、什么是随机森林前面我们已经介绍了决策树的基本原理和使用。但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样本,又不能很好地拟合样本。为了解决这个两难困境,聪明的专家们想出了这样的思路:既然我增加单棵树的深度会适得其反,那不如我不追求一个树有多高的精确度,而是训练多棵这样的树来一块预测,一棵树的力量再大,也是...

weixin_42548708的博客 512

随机森林回归实战指南:原理、Python实现与避坑调参全攻略

在机器学习回归预测任务中,集成学习通过在多个基学习器间引入随机性,显著提升模型稳定性与泛化能力。随机森林回归作为集成学习的经典代表,其核心机制是装袋采样与特征子空间随机化:每棵决策树独立训练,最终预测值由所有树共同决定,从而有效抑制单棵决策树的高方差与过拟合问题。对工程师而言,随机森林回归无需复杂特征工程即可捕捉表格数据中的非线性关系,对异常值具有天然韧性,且能直接输出特征重要性,是处理中低维度表格回归任务时性价比极高的基线方案。当数据呈现非线性、特征量纲不统一或存在噪声时,随机森林回归往往比线性模型更稳健

weixin_26757939的博客 327

随机森林的特征 是放回抽样么_机器学习超详细实践攻略(10):随机森林算法详解及小白都能看懂的调参指南...

一、什么是随机森林前面我们已经介绍了决策树的基本原理和使用。但是决策树有一个很大的缺陷:因为决策树会非常细致地划分样本,如果决策树分得太多细致,会导致其在训练集上出现过拟合,而如果决策树粗略地划分样本,又不能很好地拟合样本。为了解决这个两难困境,聪明的专家们想出了这样的思路:既然我增加单棵树的深度会适得其反,那不如我不追求一个树有多高的精确度,而是训练多棵这样的树来一块预测,一棵树的力量再大,也是...

weixin_39860123的博客 933

从命令到对话:LLM如何重塑车载语音交互与软件定义汽车体验

自动语音识别和自然语言处理是智能交互的核心基础技术,它们使机器能够理解和响应人类语音指令。其原理在于通过声学模型和语言模型将声音信号转化为文本,再解析文本背后的用户意图。这项技术的价值在于提供了一种自然、高效且能解放双手的人机交互方式,极大地提升了在特定场景(如驾驶)下的安全性与便利性。随着技术演进,其应用场景已从简单的命令控制扩展到复杂的多轮对话和跨域任务执行。当前,软件定义汽车的架构变革为车载语音提供了统一的控制平台,而大型语言模型的引入则带来了范式革命,使其从功能触发器进化为真正的智能任务执行者。本文

weixin_42669344的博客 563

comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 2 :寻找丢失的model 和工作流中 get set 方法的应用

寻找丢失的model 和工作流中 get set 方法的应用,为什么有写工作流 中有很多断掉的节点,没有相互链接?

AI懒虫 1790

机器学习十大算法之七——随机森林

一棵棵决策树构成了整个随机森林,具体构建树的数量,在scikit-learn中,用“”这个参数来控制。在训练某棵树的时候,也不是将样本的所有特征都用来训练,而是会随机选择一部分特征用来训练,目的就是让不同的树重点关注不同的特征。在scikit-learn中,用“”这个参数来控制训练每棵树选取的样本数)。只要了解决策树的算法,那么随机森林是相当容易理解的。用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集用抽样得到的样本集生成一棵决策树。

博客简介 1728

Python - 多页pdf 合称为一页

尝试使用 ReportLab 来重画 pdf,但探索起来有点麻烦。重要的是解决手头这个问题,所以就算方法蠢,但简单完事。以下生成结果,最有一页 pdf 可能会显示在第一页,手动编辑下 pdf 即可;或者你也可以修改代码逻辑来完善。打印ppt,一页占用A4纸比较浪费,想多页合成一个 A4大小;安装 fitz,单独安装 fitz 使用可能会报错。将 PDF 拆分为 图片来保存。

AI工程化、开源分享、文档翻译、代码笔记 1425

【随机森林完全攻略】从原理到实战学习总结

适用场景分类 / 回归通吃,尤其适合高维数据(如 700 + 特征的手写数字识别)、噪声数据(装袋法天然抗噪)。缺失值处理:通过回归填补,比均值 / 0 填补更精准(波士顿房价案例验证)。随机森林就像一片需要精心打理的森林,调参是修剪枝叶的艺术,数据清洗是施肥,特征工程是浇水。掌握了参数背后的 “偏差 - 方差” 平衡逻辑,再结合实战练手,你也能让这片森林在机器学习的战场上无往不胜!💡最后提醒:调参没有 “标准答案”,多画学习曲线、多尝试网格搜索,在数据中找到属于你的 “最优解”!🌳🔥。

m0_66372733的博客 1452

手把手入门YOLO到改进优化教程 | 【P5进阶篇】YOLOv8损失函数改进实战-损失函数IoU之KLD Loss

在本节,将从 KLD Loss(Kullback–Leibler Divergence Loss)的理论到实战代码实现,带你把 KLD Loss融合进 YOLOv8 的训练框架中。并通过训练日志与实验结果,验证 KLD Loss 在实际工程中的优势。

嵌入式阿齐Archie 2万+

电商数据采集实战——多平台价格监控、比价分析与智能告警系统

在电商竞争日益激烈的今天,价格监控与比价分析已成为品牌商、渠道商和消费者的核心需求。对于品牌商而言,需要监控各渠道售价是否低于指导价(破价监控);对于消费者而言,希望在最佳时机以最低价购入心仪商品;对于数据分析师而言,价格波动数据是洞察市场趋势的金矿。然而,电商数据采集面临三大核心挑战:本文将基于 Python + Scrapy + Playwright + Redis + ClickHouse 技术栈,构建一套完整的电商价格监控与比价系统。架构分层说明:电商平台的反爬手段层出不穷,采集系统必须具备多层次的

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 136

ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略

ML之RF:随机森林RF算法简介、应用、经典案例之详细攻略 目录 随机森林RF算法简介 1、RF基本的构建算法过程 2、RF算法相关文献、论文 随机森林RF算法的应用 1、RF用于回归 2、RF用于分类 随机森林RF算法的经典案例 1、基础用法 随机森林RF算法简介 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类...

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

AutoCAD中圆弧折线化方法与实现

在AutoCAD中,圆弧折线化是将圆弧曲线转换为由一系列线段组成的折线曲线的过程。本文将介绍如何使用LISP编写代码来实现圆弧折线化,并提供相应的源代码。上述示例代码将生成一个以坐标原点为圆心、起点为(5.0, 0.0, 0.0)、终点为(0.0, 5.0, 0.0)、半径为5.0、角度为90度的圆弧的折线表示。通过使用上述的LISP代码,你可以在AutoCAD中实现将圆弧转换为折线的功能。你可以根据需要修改代码中的参数来适应不同的圆弧转换需求。函数,并传入圆弧的起点、终点、圆心、半径和角度参数。

VcuOcaml的博客 1417

随机森林详解:原理、优势与应用实践

随机森林是一种强大的、高度灵活的集成学习(Ensemble Learning)算法,主要用于分类和回归任务。它的核心思想是构建多棵决策树(Decision Tree),并将这些树的预测结果进行组合(例如,分类任务采用投票,回归任务采用平均)来得到最终结果。其名称中的“森林”即指由多棵树组成的集合。20.CART算法全解析:分类回归双修的决策树之王19.C4.5算法深度解析:决策树进化的里程碑18.决策树:化繁为简的智能决策利器17.深入解析ID3算法:信息熵驱动的决策树构建基石。

拒绝AI玄学,只聊真技术▲ 1029

详解AUTOSAR:DaVinci Configurator导入ARXML配置(拓展篇—2)

DaVinci Configurator导入ARXML配置。

不脱发的程序猿 3331

用ChatGPT 5.5掌握SCI的4个实操润色技巧,论文质量极速提升!(附提示词)

ChatGPT 5.5的发布,在学术写作中的应用变得更加精准和安全,通过正确的使用方法,不仅可以改善语法与表达,让论文达到SCI发表水准,还能最大程度保留作者原意,将AIGC检测率控制在低风险区间。可以帮大家省下大量纠结语法、梳理逻辑的时间,在保证润色质量的同时,兼顾AIGC检测的合规要求,为论文投稿成功率提供实实在在的提升。通过智能调整语序、优化用词和句式结构,该方法能够在保留学术质感的同时,使文章表达更自然、贴近人工撰写的风格,从而避免文字过于程式化,提升论文整体可读性和表达的个性化特征。

智能AI让学术科研更容易 64

机器学习分析全攻略:场景、算法与开源工具指南

无论是医疗、金融、零售,还是制造业,机器学习的应用无处不在。然而,面对众多的算法和工具,如何根据具体场景选择最合适的方案,成为了从业者面临的挑战。本文将围绕分类、回归、聚类、降维、自然语言处理(NLP)、计算机视觉、时间序列分析和推荐系统等典型场景,介绍常用的算法和开源项目,帮助读者更好地理解和应用机器学习技术。

专注分享编程开发与技术进阶干货! 1436

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

机器学习笔记总结

线性回归模型详解 方差分析 聚类分析 PCA——主成分分析 机器学习笔记一——感知机 机器学习笔记二——k近邻 机器学习笔记三——决策树 机器学习笔记四——SVM 机器学习笔记五——EM算法与高斯混合模型 模型融合之Boosting XGBoost面试题 因果推断学习笔记一 因果推断学习笔记二 因果推断学习笔记三——Uplift模型 ...

TSzero的博客 1759

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

机器学习要学哪些算法?机器学习10大算法解析

机器学习算法主要分为监督学习、无监督学习、半监督学习和强化学习四大类。对于初学者,建议优先掌握以下核心算法:线性回归用于预测连续值,如房价;逻辑回归用于二分类任务,如垃圾邮件识别;决策树通过“是/否”判断分类,易于解释;随机森林是决策树的集合,具有更好的鲁棒性;K近邻算法基于距离分类,简单直观;支持向量机适合中小规模数据分类;朴素贝叶斯特别适合文本分类;K均值聚类用于数据自动分群;主成分分析用于降维和去噪。这些算法构成了传统机器学习的基础,掌握后再深入学习神经网络和深度学习会更加顺利。

OpenCVtuxiang的博客 1061

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Interview之ML:机器学习算法工程师结构知识思维导图集合、求职九大必备技能之【数学基础、特征工程能力、模型评估和优化、机器学习基本概念/经典算法、深度学习算法、业务与应用】(持续更新)

​ Interview之ML:机器学习算法工程师结构知识思维导图集合、求职九大必备技能之【数学基础、特征工程能力、模型评估和优化、机器学习基本概念/经典算法、深度学习算法、业务与应用】(持续更新) 目录 机器学习算法工程师思维导图集合 一、数学基础 二、工程能力 三、特征工程 四、模型评估 五、优化算法 六、机器学习基本概念和分类 七、经典机器学习模型

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 5618

随机森林分类算法python代码_随机森林入门攻略(内含R、Python代码)

简介近年来,随机森林模型在界内的关注度与受欢迎程度有着显著的提升,这多半归功于它可以快速地被应用到几乎任何的数据科学问题中去,从而使人们能够高效快捷地获得第一组基准测试结果。在各种各样的问题中,随机森林一次又一次地展示出令人难以置信的强大,而与此同时它又是如此的方便实用。需要大家注意的是,在上文中特别提到的是第一组测试结果,而非所有的结果,这是因为随机森林方法固然也有自己的局限性。在这篇文章中,我...

weixin_39945531的博客 866
上一篇: 看个天气预报都能理解大数据?人工智能和大数据对我们生活产生了哪些影响?
下一篇: 【赶紧收藏】大学生都在读什么书?让Python用数据告诉你
东写西读李老湿
东写西读李老湿 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄13年 481粉丝 73原创
评论 17
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值