gbdt可视化

gbdt的最大优点,和决策树一样,高度可解释,最喜欢的分类模型:)

#!/usr/bin/env python

#coding=gbk

# ==============================================================================

# \file print-fastreank-tree.py

# \author chenghuige

# \date 2014-10-04 00:34:59.825146

# \Description

# ==============================================================================

?
?

import sys,os

from gflags import *

from gezi import *

from libmelt import *

from BinaryTree import *

from TreeWriter import *

?
?

DEFINE_string(‘model‘, ‘./model/model.json‘, ‘‘)

DEFINE_string(‘feature‘, ‘‘, ‘‘)

DEFINE_integer(‘tree‘, 0, ‘-1 means print all trees‘)

DEFINE_boolean(‘use_invisable_node‘, False, ‘‘)

DEFINE_string(‘outfile‘, ‘tree.png‘, ‘‘)

?
?

def get_tree_(node_idx, fe, tree, fnames, is_inpath):

node = Node()

node.attr = {‘color‘ : ".7 .3 1.0", ‘style‘ : ‘filled‘}

node.leftEdgeAttr = {‘color‘ : ‘blue‘, ‘penwidth‘ : ‘2.5‘, ‘label‘ : ‘<=‘}

node.rightEdgeAttr = {‘color‘ : ‘green‘, ‘penwidth‘ : ‘2.5‘, ‘label‘ : ‘>‘}

if is_inpath:

node.attr[‘color‘] = ‘#40e0d0‘

if node_idx < 0:

node.attr[‘shape‘] = ‘box‘

node.attr[‘label‘] = str(tree.leafValue[-node_idx - 1])

if is_inpath:

print node.attr[‘label‘]

return node

name = fnames[tree.splitFeature[node_idx]]

label = ‘%s\l%f <= %f?\l[%f]‘%(name, fe[tree.splitFeature[node_idx]], tree.threshold[node_idx], tree.previousLeafValue[node_idx])

node.attr[‘label‘] = label

if is_inpath:

l = fe[tree.splitFeature[node_idx]] <= tree.threshold[node_idx]

r = 1 - l

if l:

node.leftEdgeAttr[‘color‘] = ‘black‘

else:

node.rightEdgeAttr[‘color‘] = ‘black‘

else:

l = r = 0

node.left = get_tree_(tree.lteChild[node_idx], fe, tree, fnames, l)

node.right = get_tree_(tree.gtChild[node_idx], fe, tree, fnames, r)

return node

?
?

def get_tree(model, fe, index):

tree = model.trees[index]

fnames = model.Predictor.featureNames

btree????????= BinaryTree()

node_idx = 0

btree.root = get_tree_(node_idx, fe, tree, fnames, 1)

return btree????????

?
?

?
?

def main(argv):

try:

argv = FLAGS(argv) # parse flags

except gflags.FlagsError, e:

print ‘%s\nUsage: %s ARGS\n%s‘ % (e, sys.argv[0], FLAGS)

sys.exit(1)

?
?

model = jsonfile2obj(FLAGS.model)

fe = Vector(FLAGS.feature)

tree = get_tree(model, fe, FLAGS.tree)

?
?

writer = TreeWriter(tree)

if FLAGS.use_invisable_node:

writer.use_invisable_node = True

writer.Write(FLAGS.outfile)

?
?

if __name__ == "__main__":

main(sys.argv)

?
?

#!/usr/bin/env python

#coding=gbk

# ==============================================================================

# \file TreeWriter.py

# \author chenghuige

# \date 2014-10-02 20:32:25.744069

# \Description

# ==============================================================================

?
?

import sys

from BinaryTree import *

import pygraphviz as pgv

‘‘‘

treeWriter with func wite can write a binary tree to tree.png or user spcified

file

‘‘‘

class TreeWriter():

def __init__(self, tree):

self.num = 1 #mark each visible node as its key

self.num2 = -1 #makk each invisible node as its key

self.tree = tree

self.use_invisable_node = False

?
?

def Write(self, outfile = ‘tree.png‘):

def writeHelp(root, A):

if not root:

return

?
?

p = str(self.num)

self.num += 1

A.add_node(p, **root.attr)

q = None

r = None

?
?

if root.left:

q = writeHelp(root.left, A)

A.add_edge(p, q, **root.leftEdgeAttr)

if root.right:

r = writeHelp(root.right, A)

A.add_edge(p, r, **root.rightEdgeAttr)

?
?

if not self.use_invisable_node:

return p

?
?

if q or r:

if not q:

q = str(self.num2)

self.num2 -= 1

A.add_node(q, style = ‘invis‘)

A.add_edge(p, q, style = ‘invis‘)

if not r:

r = str(self.num2)

self.num2 -= 1

A.add_node(r, style = ‘invis‘)

A.add_edge(p, r, style = ‘invis‘)

l = str(self.num2)

self.num2 -= 1

A.add_node(l, style = ‘invis‘)

A.add_edge(p, l, style = ‘invis‘)

B = A.add_subgraph([q, l, r], rank = ‘same‘)

B.add_edge(q, l, style = ‘invis‘)

B.add_edge(l, r, style = ‘invis‘)

?
?

return p #return key root node

?
?

self.A = pgv.AGraph(directed=True,strict=True)

writeHelp(self.tree.root, self.A)

self.A.graph_attr[‘epsilon‘]=‘0.001‘

#self.A.layout(prog=‘dot‘)

#print self.A.string() # print dot file to standard output

self.A.layout(‘dot‘) # layout with dot

self.A.draw(outfile) # write to file

?
?

?
?

if __name__ == ‘__main__‘:

tree = BinaryTree()

tree.CreateTree(-1)

tree.InorderTravel()

writer = TreeWriter(tree)

if len(sys.argv) > 1:

outfile = sys.argv[1]

writer.Write(outfile) #write result to outfile

else:

writer.Write() #write result to tree.png

?
?

时间: 2024-10-24 17:38:28

gbdt可视化的相关文章

笔记︱决策树族——梯度提升树(GBDT)

笔记︱决策树族--梯度提升树(GBDT) 本笔记来源于CDA DSC,L2-R语言课程所学进行的总结. 一.介绍:梯度提升树(Gradient Boost Decision Tree) Boosting算法和树模型的结合.按次序建立多棵树,每棵树都是为了减少上一次的残差(residual),每个新的模型的建立都是为了使之前模型的残差往梯度方向减少.最后将当前得到的决策树与之前的那些决策树合并起来进行预测. 相比随机森林有更多的参数需要调整. ---------------------------

大数据金融数据分析GBDT模型、神经网络模型、违约预测模型视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Python数据分析、数据采集、数据可视化、图像数据处理分析视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

魔镜—58可视化数据智能平台架构与实践

背景 魔镜是数据产品研发部基于大数据平台开发的一套可视化数据智能平台.传统机器学习建模流程对非数据科学专业人员来说,整体门槛较高,其中主要体现在几个方面: 1. 机器学习概念较为抽象 比如训练集.验证集.测试集.特征.维度.标签泄露.欠拟合.过拟合.学习曲线.验证曲线.ROC曲线.混淆矩阵等等,除了需要了解概念外,需要了解具体的使用场景.使用方法. 2. 机器学习建模流程复杂 数据准备.数据预处理.统计分析.特征工程.模型训练与建模.模型评估与对比等,尤其是统计分析以及特征工程,涉及大量的特征生

Dynamics 365 for CRM: Sitemap站点图的可视化编辑功能

Dynamics 365 for CRM 提供了Sitemap站点图的可视化编辑功能 在之前的所有版本中,我们只能通过从系统中导出站点图的XML进行编辑后再导入(容易出错),或使用第三方的Sitemap编辑工具进行编辑(非常方便). 在Dynamics 365 for CRM 中原生地提供了站点图的可视化编辑功能,非常强大方便: 1.在默认解决方案或自定义解决方案的"客户端扩展"中,找到"站点地图"记录:如果没有则需要点击"添加现成",添加&qu

机器学习中的算法(1)-决策树模型组合之随机森林与GBDT

版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系[email protected] 前言: 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不够的. 模型组合(比如

【转载】GBDT(MART) 迭代决策树入门教程 | 简介

      转载地址:http://blog.csdn.net/w28971023/article/details/8240756        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案.它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法.近些年更因为被用于搜索排

可视化HTML编辑器

[荐] 可视化HTML编辑器 CKEditor CKEditor是新一代的FCKeditor,是一个重新开发的版本.CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站. 可配合使用的扩展有 文件管理器KCFinder 在线演示:h...更多CKEditor信息 最新新闻: CKEditor 4.5.6 发布,可视化 HTML 编辑器 2015年12月10日 [荐] 可视化HTML编辑器 KindEditor KindEditor 是一套开源的在

地理数据可视化:Simple,Not Easy

如果要给2015年的地理信息行业打一个标签,地理大数据一定是其中之一.在信息技术飞速发展的今天,“大数据”作为一种潮流铺天盖地的席卷了各行各业,从央视的春运迁徙图到旅游热点预测,从大数据工程师奇货可居到马云布道“DT”时代,“大数据”被推到了一个前所未有的高度,连国家领导人出访演讲都言必称大数据.地理信息数据天生具有大数据属性,作为整天和地理信息数据打交道的地信人自然不甘落后,地理大数据概念脱颖而出. 地理大数据是什么?大体来说就是把社会经济.自然资源.商业信息等但凡具有一点空间维度的数据一股脑