我有一些使用scikit-learn的DecisionTreeClassifier的旧代码。我想根据这个分类器绘制局部图。
到目前为止,我看到的所有例子(例如http://scikit-learn.org/stable/modules/generated/sklearn.ensemble.partial_dependence.plot_partial_dependence.html)使用"GradientBoostingRegressor"作为分类器。
我的问题是,有可能为其他分类器绘制局部图吗?(eg.DecisionTreeClassifier)。我尝试了以下代码:
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble.partial_dependence import plot_partial_dependence
from sklearn.datasets import make_friedman1
X, y = make_friedman1()
clf = DecisionTreeClassifier(max_features='auto').fit(X,y)
fig, axs = plot_partial_dependence(clf, X, [0, (0, 1)])
但它不起作用。
ValueError: gbrt has to be an instance of BaseGradientBoosting
我在互联网上找到了一些评论(Quora):
部分依赖图根本不依赖于分类器的特定选择。如果交换了随机林分类器,则用于梯度增强示例的部分依赖关系图模块将正常工作。
然而,我仍然不知道它是如何工作的。
同样对于R,我似乎可以为randomForest包制作部分情节。然而,我并不完全确定随机森林是如何实现的,在R手册中,作者Andy Liaw引用了参考文献"Friedman,J.(2001)。贪婪函数近似:梯度提升机,Ann.of Stat.">
这是否意味着我必须使用梯度增强来获得局部图?
感谢您的帮助。非常感谢!
正如您的错误消息所述,您必须使用基类为BaseGradientBoosting
的分类器。
从您发布的文档来看:
gbrt:BaseGradientBoosting
一种拟合的梯度增强模型
GradientBoostingClassifier
和GradientBoostingRegressor
都继承自BaseGradientBoosting
(源),因此理论上这两个类中的任何一个都应该工作。至于其余的分类器,它们似乎不受plot_partial_dependence
函数的支持。
这已经困扰我一段时间了-PDP仅在gbrt分类器上可用。
幸运的是,这一问题已经得到解决,新的sklearn发布(大约3周前)意味着可以在所有分类器上进行PDP!
此处介绍了所做的努力https://github.com/scikit-learn/scikit-learn/pull/12599(仅供参考,我与之无关,只是一个感激的最终用户)
部分依赖图是一种发现特定模型中特征与目标特征交互的方法。你可以把它看作线性回归模型中的系数(β),非线性模型中只能使用部分依赖性,并告诉你模型如何在每个不同的特征值下解释特征。另一个不同之处在于,在大多数非线性模型中,特征交互将发挥更大的作用。scikit-learn不支持除gbrt之外的模型的部分依赖关系图,这并不意味着您不能将该方法应用于模型。(这有点令人难过,我等了他们很长时间的更新)。
下面是一个在Python中对Xgb模型应用部分依赖的示例。https://xiaoxiaowang87.github.io/monotonicity_constraint/
这篇文章还说明了它是如何计算的。https://medium.com/usf-msds/intuitive-interpretation-of-random-forest-2238687cae45所以你可以使用这个逻辑来创建你自己的函数。
此外,R库有RandomForest模型的部分依赖图(我已经有一段时间没有使用R了,记不起库的确切名称)。