随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)( 四 )

接下来 , 我们将使用F1-Score对模型进行评估 。 F1-Score是由公式给出的精度和召回的调和平均数:
随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)
本文插图

你可以通过以下文章来了解更多关于F1-Score和其他的评估方法:
https://www.analyticsvidhya.com/blog/2019/08/11-important-model-evaluation-error-metrics/?utm_source=blog&utm_medum=decision-tree-vs-random-forest-algorithm
让我们来评价F1-Score模型的表现:
【随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)】随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)
本文插图

随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)
本文插图

# Evaluation on Training setdt_pred_train = dt.predict(X_train)print('Training Set Evaluation F1-Score=>',f1_score(Y_train,dt_pred_train))rfc_vs_dt-6.py hosted with ? by GitHub# Evaluating on Test setdt_pred_test = dt.predict(X_test)print('Testing Set Evaluation F1-Score=>',f1_score(Y_test,dt_pred_test))rfc_vs_dt-7.py hosted with ? by GitHub 在这里 , 你可以看到决策树在样本内估计的表现非常好 , 但是在样本外估计的表现迅速下降 。 为什么会出现这种情况呢?因为我们的决策树在训练集上产生了过拟合 。 随机森林能否解决这一问题?
建立随机森林模型
让我们来看一下随机森林模型:
随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)
本文插图

随机森林|决策树VS随机森林——应该使用哪种算法?(附代码&链接)
本文插图

在这里 , 我们可以清楚地看到在样本外估计当中 , 随机森林模型比决策树的表现更优 。 让我们在接下来的一部分当中来讨论一下背后的原因 。
# BuildingRandom Forest Classifierfrom sklearn.ensemble import RandomForestClassifierrfc = RandomForestClassifier(criterion = 'entropy', random_state = 42)rfc.fit(X_train, Y_train)# Evaluating on Training setrfc_pred_train = rfc.predict(X_train)print('Training Set Evaluation F1-Score=>',f1_score(Y_train,rfc_pred_train))rfc_vs_dt-8.py hosted with ? by GitHubf1 score random forest# Evaluating on Test setrfc_pred_test = rfc.predict(X_test)print('Testing Set Evaluation F1-Score=>',f1_score(Y_test,rfc_pred_test))rfc_vs_dt-9.py hosted with ? by GitHub为什么我们的随机森林模型比决策树表现更好?
随机森林利用了多棵决策树的优势 。 它的确不依赖于单一决策树的特征重要性 。 让我们来看一看不同算法给予不同特征的特征重要性 。
feature_importance=pd.DataFrame({'rfc':rfc.feature_importances_,'dt':dt.feature_importances_},index=df.drop(columns=['Loan_ID','Loan_Status']).columns)feature_importance.sort_values(by='rfc',ascending=True,inplace=True)index = np.arange(len(feature_importance))fig, ax = plt.subplots(figsize=(18,8))rfc_feature=ax.barh(index,feature_importance['rfc'],0.4,color='purple',label='Random Forest')dt_feature=ax.barh(index+0.4,feature_importance['dt'],0.4,color='lightgreen',label='Decision Tree')ax.set(yticks=index+0.4,yticklabels=feature_importance.index)ax.legend()plt.show()rfc_vs_dt-10.py hosted with ? by GitHub


推荐阅读