图解随机森林算法_节点_算法
把稳:我们不涉及建模中涉及的预处理或特色工程步骤,只查看当我们利用sklearn的RandomForestClassifier包调用.fit()和.transform()方法时,算法中会发生什么。
随机森林随机森林是一种基于树的算法。它是多种不同种类的随机树的凑集。模型的终极值是每棵树产生的所有预测/估计的均匀值。
包我们将以sklearn的RandomForestClassifier为根本
sklearn.ensemble.RandomForestClassifier
数据
为相识释这一点,我们将利用下面的演习数据。
注:年事、血糖水平、体重、性别、吸烟,... f98、f99都是自变量或特色。
糖尿病(Diabetic)是我们必须预测的y变量/因变量。
内部到底发生了什么有了这些基本信息,让我们开始并理解我们将这个演习集通报给算法会发生什么…
步骤1-Bootstrapping一旦我们将演习数据供应给RandomForestClassifier模型,它(该算法)会随机选择一组行。这个过程称为Bootstrapping。对付我们的示例,假设它选择m个记录。
把稳- 要选择的行数可由用户在超参数- max_samples中供应)
把稳- 一行可能被多次选中
步骤2-为子树选择特色现在,RF随机选择一个子集的特色/列。为了大略起见,我们选择了3个随机特色。
把稳,在你的超参数max_features中你可以掌握这个数字,例如下面的代码
import sklearn.ensemble.RandomForestClassifiermy_rf = RandomForestClassifier(max_features=8)
步骤3-选择根节点
一旦选择了3个随机特色,算法将对m个记录(从步骤1开始)进行决策树的拆分,并快速打算度量值。
这个度量可以是gini,也可以是熵。
criterion = 'gini' #( or 'entropy' . default= 'gini’ )
选取基尼/熵值最小的随机特色作为根节点。
记录在此节点的最佳拆分点进行拆分。
步骤4-选择子节点该算法实行与步骤2和步骤4相同的过程,并选择另一组3个随机特色。(3是我们指定的数字-你可以选择你喜好的-或者让算法来选择最佳数字)
它根据条件(gini/熵),选择哪个特色将进入下一个节点/子节点,然后在这里进一步分割。
步骤5-进一步拆分并创建子节点连续选择特色(列)以选择其他子节点
此过程连续(步骤2、4)选择随机特色并拆分节点,直到涌现以下任一情形
a) 已用完要拆分的行数b) 拆分后的基尼/熵没有减少现在你有了第一个“迷你决策树”。
利用随机选择的行(记录)和列(特色)创建的第一个迷你决策树
第6步-创建更多迷你决策树算法返回到你的数据并实行步骤1-5以创建第二个“迷你树”
这是我们利用另一组随机选择的行和列创建的第二个迷你树
第7步-树成林一旦达到默认值100棵树(现在有100棵迷你决策树),模型就完成了fit()过程。
把稳 你可以指定要在超参数中天生的树的数量(n_estimators)
import sklearn.ensemble.RandomForestClassifiermy_rf = RandomForestClassifier(n_estimators=300)
现在你有一个由随机创建的迷你树组成的森林(因此得名Random Forest)
第7步-推理现在让我们预测一个看不见的数据集(测试数据集)中的值
为了推断(常日称为预测/评分)测试数据,该算法将记录通报到每个迷你树中。
记录中的值根据每个节点表示的变量遍历迷你树,终极到达一个叶节点。基于该记录结束的叶节点的值(在演习期间决定的),该迷你树被分配一个预测输出。
类似地,相同的记录经由所有的100个小决策树,并且每100个树都有一个预测输出。这个记录的终极预测值是通过对这100棵小树的大略投票来打算的。
现在我们有了对单个记录的预测。
该算法按照相同的过程迭代测试集的所有记录,并打算总体精度!
迭代得到测试集每一行的预测的过程,以达到终极的精度。
参考文献[1] sklearn’s documentation for RandomForestClassifier ( version : 3.2.4.3.1)
https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html
本文系作者个人观点,不代表本站立场,转载请注明出处!