如下图:
在建立GBDT对象并作fit之后,可以使用如脊仔基下代码获得要的规则代码:
dot_data = tree。export_graphviz(model_tree, out_file=None,
max_depth=5, feature_names=names_list, filled=True, rounded=True) # 将决策树规则生成dot对象。
模型最终可以描述戚隐为:
Fm(x)=∑m=1MT(xθm)Fm(x)=∑m=1MT(xθm)
模型一共训练M轮,每轮产生一个弱分类器T(xθm)T(xθm)。弱分类器的损失函数
θ^m=argminθm∑i=1NL(yi,Fm−1(xi)+T(xiθm))θ^m=argminθm∑i=1NL(yi,Fm−1(xi)+T(xiθm))
Fm−1(x)Fm−1(x)为当前的模型,gbdt通过经验风险极小化来确定下一个弱分类器的参数。具体到损失函数本身的选择也就是L的选择,有平方损失函数,0-1损失函数,对数损失函数等等。如果我们选择平方损失函数,那么这个樱谨差值其实就是我们平常所说的残差。
以Python调用sklearn为例,在你建立GBDT对象并作fit之后,可以使用如下代码获得你要的规则代码绝谈:
dot_data = tree.export_graphviz(model_tree, out_file=None,
max_depth=5, feature_names=names_list, filled=True, rounded=True) # 将决策树规则生成dot对象
其中tree就是你的数对象,如果你的out_file后面是一个文件名,那么你的规则会输出到文件中;如果是None(就像上面代码),那么值会保存在dot_data中。
无论哪种方法,你都能获得规则文本。然后剩下的就是普通的文本解析的事情了。
在决策树算法对象的tree_属性中,存储了所有有关决策树规则的信息(示例中的决策树规则存储在model_tree.tree_中)。最主要的几个属性:
children_left:子级左侧分类节点
children_right:子级右侧分类节点
feature:子节点上用来做分裂的特征
threshold:子节点上对应特征粗宏笑的分裂阀值
values:子节点中包含正例和负例的样本数量
上述属性配合节点ID、节点层级便迭代能得到如下的规则信息:
1 [label="rfm_score <= 7.8375\ngini = 0.1135\nsamples =
14581\nvalue = [13700, 881]", fillcolor="#e58139ef"]
其中规则开始的1代表节点ID,rfm_score是变量名称,rfm_score
<= 7.8375是分裂阀值,gini = 0.1135是在当前规则下的基尼指数,nsamples是当前节点下岩含的总样本量,nvalue为正例和负例的样本数量。
来源:知乎
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)