如何使用 pandas 创建交叉表来显示随机森林预测器的预测结果?

Posted

技术标签:

【中文标题】如何使用 pandas 创建交叉表来显示随机森林预测器的预测结果?【英文标题】:How to use pandas to create a crosstab to show the prediction result of random forest predictor? 【发布时间】:2019-01-29 08:26:27 【问题描述】:

我是随机森林(以及 python)的新手。 我使用的是随机森林分类器,数据集定义为 't2002'。

 t2002.column 

所以这里是列:

Index(['IndividualID', 'ES2000_B01ID', 'NSSec_B03ID', 'Vehicle', 
   'Age_B01ID',
   'IndIncome2002_B02ID', 'MarStat_B01ID', 'EcoStat_B03ID',
   'MainMode_B03ID', 'TripStart_B02ID', 'TripEnd_B02ID',
   'TripDisIncSW_B01ID', 'TripTotalTime_B01ID', 'TripTravTime_B01ID',
   'TripPurpFrom_B01ID', 'TripPurpTo_B01ID'],
  dtype='object')

我正在使用如下代码来运行分类器:

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import make_scorer, accuracy_score
from sklearn.model_selection import GridSearchCV

from sklearn.model_selection import train_test_split
X_all = t2002.drop(['MainMode_B03ID'],axis=1)
y_all = t2002['MainMode_B03ID']
p = 0.2

X_train,X_test, y_train, y_test = train_test_split(X_all,y_all,test_size=p, 
random_state=23)

clf = RandomForestClassifier()
acc_scorer = make_scorer(accuracy_score)

 parameters = 
             # parameter is blank

grid_obj = GridSearchCV(clf,parameters,scoring=acc_scorer)
grid_obj = grid_obj.fit(X_train,y_train)

clf = grid_obj.best_estimator_
clf.fit(X_train,y_train)

predictions = clf.predict(X_test)
print(accuracy_score(y_test,predictions))

在这种情况下,如何使用 pandas 生成交叉表(如表格)来显示详细的预测结果?

提前致谢!

【问题讨论】:

你能解释一下详细的预测结果包括什么吗? @Arihant 它就像一个混淆矩阵来显示实际类和预测类,如下表所示:python-data-science.readthedocs.io/en/latest/evaluation.html 使用预测输出和真实输出创建熊猫数据框。那么这个链接将帮助pandas.pydata.org/pandas-docs/stable/generated/… 【参考方案1】:

您可以先使用 sklearn 创建一个混淆矩阵,然后将其转换为 pandas 数据框。

from sklearn.metrics import confusion_matrix
#creating confusion matrix as array
confusion = confusion_matrix(t2002['MainMode_B03ID'].tolist(),predictions)

#converting to df
new_df = pd.DataFrame(confusion,
                 index = t2002['MainMode_B03ID'].unique(),
                 columns = t2002['MainMode_B03ID'].unique())

【讨论】:

【参考方案2】:

使用 pandas 很容易显示所有预测结果。按照docs 中的说明使用cv_results_

import pandas as pd

results = pd.DataFrame(clf.cv_results_) # clf is the GridSearchCV object
print(results.head()) 

【讨论】:

以上是关于如何使用 pandas 创建交叉表来显示随机森林预测器的预测结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中执行随机森林/交叉验证

10个交叉折叠的混淆矩阵 - 如何做到pandas dataframe df

随机森林回归进行特征重要性排序时,如何同时得知特征x与预测量y之间是正相关还是负相关?

如何在 scikit-learn 中执行随机森林模型的交叉验证?

树的随机森林数和交叉验证

是否有必要同时运行具有交叉验证的随机森林