# 【学术】你真的知道什么是随机森林吗？本文是关于随机森林的直观解读

### 把思想分解成简单的步骤:

1）.训练随机森林模型(假设具有正确的超参数)

2）.找到模型的预测得分(称为基准分数)

3）.发现更多的预测分数p，p是特征的数量，每次随机打乱第i的列特征

4）.比较所有的p分数和基准分数。如果随机打乱一些第i列，会影响分数，这意味着我们的模型没有这个特征就很糟糕。

5）.删除不影响基准测试分数的特征，并通过减少特征子集重新训练模型。

```# defining rmse as scoring criteria (any other criteria can be used in a similar manner)

def score(x1,x2):
return metrics.mean_squared_error(x1,x2)
# defining feature importance function based on above logic
def feat_imp(m, x, y, small_good= True):
"""
m: random forest model
x: matrix of independent variables
y: output variable
small__good: True if smaller prediction score is better
"""
score_list= {}
score_list[‘original’]= score(m.predict(x.values), y)
imp= {}
for iin range(len(x.columns)):
rand_idx= np.random.permutation(len(x))# randomization
new_coli= x.values[rand_idx, i]
new_x= x.copy()
new_x[x.columns[i]]= new_coli
score_list[x.columns[i]]= score(m.predict(new_x.values), y)
imp[x.columns[i]]= score_list[‘original’] — score_list[x.columns[i]]# comparison with benchmark
if small_good:
return sorted(imp.items(), key=lambda x: x[1])
else:return sorted(imp.items(), key=lambda x: x[1], reverse=True)```

Kaggle竞赛数据链接地址：https://www.kaggle.com/c/bluebook-for-bulldozers

### 2.我们对自己的预测有多少自信?

A .偏差和方差的图示

```#Pseudo code:
def pred_ci(model, x_val, percentile= 95, n_pnt):

"""
x_val = validation input
percentile = required confidence level
model = random forest model
"""

allTree_preds= np.stack([t.predict(x_val)for tin model.estimators_], axis= 0)

err_down= np.percentile(allTree_preds, (100 - percentile)/ 2.0  ,axis=0)
err_up= np.percentile(allTree_preds,100- (100 - percentile)/ 2.0  ,axis=0)

ci= err_up- err_down
yhat= model.predict(x_val)
y= y_val

df= pd.DataFrame()
df['down']= err_down
df['up']= err_up
df['y']= y
df['yhat']= yhat
df['deviation']= (df['up']- df['down'])/df['yhat']
df.reset_index(inplace=True)
df_sorted= df.iloc[np.argsort(df['deviation'])[::-1]]
return df_sorted```

### 3.预测路径是什么?

C .树解释器说明(再次入院的最终概率为0.6)

D .瀑布图可视化贡献

```from waterfallchartsimport quick_charts as qc
a= [‘Bias’, ‘Age’, ‘Sex’, ‘Blood Pressure’]
b= [0.3,0.6,-0.1,-0.2]
plot= qc.waterfall(a,b, Title= ‘Patient A’, y_lab= ‘Predicted probability’, x_lab= ‘Contributing features (path)’,
net_label= ‘Final Prediction’)
plot.show()```

• Value(image B)表示节点预测的目标值。(仅指该节点的目标观测值)。
• 在以前的节点上，贡献值是当前节点的值减去前一个节点值(为路径提供特征贡献)。
• 路径是通过一些观察的特征分割来达到叶节点的组合。

### 4.目标变量与重要特征有何关联?(部分依赖情节)

1.训练随机森林模型(比方说F1…F4是我们的特征和Y是目标变量。假设F1是重要特性）；

2.我们有兴趣探索Y和F1的直接关系；

3.项目用F1(A)替换列F1，并为所有观察值发现新的预测。采取平均预测。(称之为基值)；

4.对F1(B)…F1(E)（即特征F1所有不同的值）重复步骤3；

5.PDP的X轴具有不同的F1值，而Y轴是F1基值的平均预测的变化。

PDP逻辑的电子表格说明

E .部分依赖图(年制造vs.售价的变化)

F.以上两个情节的来源是fast.ai的rf interpretation notebook

rf interpretation notebook地址：https://github.com/fastai/fastai/tree/master/courses/ml1

1576 篇文章83 人订阅

0 条评论

## 相关文章

### 想成为数据科学家，这12个机器学习算法你应该知道

PCA是一种无监督的方法，用于理解由向量组成的数据集的全局性质。这里分析了数据点的协方差矩阵，以了解哪些维度/数据点更重要。考虑矩阵中顶级PC的一种方法是考虑具...

890

### 实时翻译的发动机：矢量语义（斯坦福大学课程解读）

GraphDB 最近刚刚升级到 8.7 版本，此次特别更新了矢量语义包，直接以插件形式整合到程序中。

702

3364

2594

2924

3909

20210

32211

3645

951