您可以很好地使用 RF,并且仍然可以通过使用包 eli5 来了解每个功能对做出预测的正面/负面贡献。我已经解释了如何通过获取 iris 数据集来利用包来做同样的事情。
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from eli5 import show_prediction, show_weights
df = pd.read_csv("./Data/iris.csv")
df.head()
Sepal Petal Width Height Class
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
x = df.drop("Class", axis=1)
Y = df["Class"]
clf = RandomForestClassifier(n_estimators=100, max_depth=2,
random_state=0)
clf.fit(x,Y)
现在让我们使用eli5 来解决问题。假设我想得到每个因素对数据点x.loc[1]的贡献
show_prediction(clf, x.loc[1], show_feature_values=True)
这就是你会得到的
此示例的预测标签为Iris-setosa,width 是预测为Iris-setosa 的主要原因。同样,当您查看其他两列时,您也会了解为什么数据点没有被归类为其他类别。如果您想要更通用的解释,请使用show_weights,如下所示
show_weights(clf, feature_names = X.columns.values)
eli5 不仅适用于射频,还适用于一大堆其他型号,请参阅eli5 documentation 了解更多详情。
希望这会有所帮助!