我使用RuleFit进行二进制分类;我该如何解释规则?



我正在使用RuleFit和GradientBoostingClassifier来为二元分类问题(Kaggle上的health-dataset)生成规则。当我使用RuleFit.get_rules()打印出规则时,它显示了规则、类型、coef、支持和重要性。但是它没有显示哪个类(0或1)是规则的目标。例如:exang <= 0.5描述的是0还是1类?

总结:我如何知道给定规则描述的是哪个目标类?

RuleFit学习一个具有原始特征和一些作为决策规则的新特征的稀疏线性模型。这些新特性捕获了原始特性之间的交互。RuleFit从决策树自动生成这些特征。通过将分割的决策组合成规则,可以将树中的每条路径转换为一个决策规则。(引用)

同样,从这个例子中我们了解到,rf.get_rules()将返回从初始属性和已创建属性创建的规则,但不返回预测。

因此,我假设预测结果来自您的GradientBoostingClassifier的预测方法。如果是这种情况,那么最自然的事情就是选择一个阈值,如果您认为该阈值高于该阈值,则该样本将被预测为0或1。下面是一个可能的例子:

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3,random_state=42)
reg = GradientBoostingClassifier()
reg.fit(X_train, y_train)
y_pred = reg.predict(X_test)
thresh = 0.5
y_pred = np.array([y_pred > thresh])

注意阈值可能不是0.5,这取决于您的目标。要了解更多信息,我建议您查看曲线下面积指标。

我希望这对你有帮助!

最新更新