如何从决策树中提取feature

2020-11-20 18:40:46 字数 5172 阅读 9989

1楼:

你的意思是从训练好的决策树模型中自动提取出分类规则吗?weka好像没有可以直接从树结构中提取规则的功能吧。

不过如果模型不是太复杂的话手工统计每个从根节点到叶子节点的遍历也很方便啊,每个遍历上的内部节点加上树枝就是if条件,叶子节点就是then的判断结果。如果模型比较复杂的话可以考虑做个简单的二次开发。

假设你用的是j48,用weka explorer把训练好的决策树另存下来(或者直接在**里用输出流写入文件),再用输入流把决策树读入为一个sourcable对象,调用对象的tosource方法把决策树**化,接下来就是文本处理的问题了,通过分析**结构得到相应的分类规则。

大概是这样的读入过程:

fileinputstream j48 = new fileinputstream("j48.model");

objectinputstream j48object = new objectinputstream(j48);

sourcable j48code = (sourcable) j48object.readobject();

system.out.println(j48code.tosource("j48 tree"));

用上面几行举个例子,希望对你有启发^^

gbdt 如何实现特征组合提取? 10

2楼:星嘉合科技****

以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为正例和负例的样本数量。

如何将python生成的决策树利用graphviz画出来

3楼:匿名用户

决策树是用样本的属性作为结点,用属性的取值作为分支的树结构。

决策树的根结点是所有样本中信息量最大的属性。树的中间结点是该结点为根的子树所包含的样本子集中信息量最大的属性。决策树的叶结点是样本的类别值。

决策树是一种知识表示形式,它是对所有样本数据的高度概括决策树能准确地识别所有样本的类别,也能有效地识别新样本的类别。

决策树算法id3的基本思想:

首先找出最有判别力的属性,把样例分成多个子集,每个子集又选择最有判别力的属性进行划分,一直进行到所有子集仅包含同一类型的数据为止。最后得到一棵决策树。

j.r.quinlan的工作主要是引进了信息论中的信息增益,他将其称为信息增益(information gain),作为属性判别能力的度量,设计了构造决策树的递归算法。

举例子比较容易理解:

对于气候分类问题,属性为:

天气(a1) 取值为: 晴,多云,雨

气温(a2) 取值为: 冷 ,适中,热

湿度(a3) 取值为: 高 ,正常

风 (a4) 取值为: 有风, 无风

每个样例属于不同的类别,此例仅有两个类别,分别为p,n。p类和n类的样例分别称为正例和反例。将一些已知的正例和反例放在一起便得到训练集。

4楼:哦_廿一

#这里有一个示例,你可以看一下。

#http://scikit-learn.***/stable/modules/tree.html

>>>fromipython.displayimportimage

>>>dot_data=tree.export_graphviz(clf,out_file=none,

feature_names=iris.feature_names,

class_names=iris.target_names,

filled=true,rounded=true,

special_characters=true)

>>>graph=pydotplus.graph_from_dot_data(dot_data)

>>>image(graph.create_png())

通过weka建立决策树怎么提取分类规则?

5楼:匿名用户

你的意思是从训练好的决策树模型中自动提取出分类规则吗?weka好像没有可以直接从树结构中提取规则的功能吧。

不过如果模型不是太复杂的话手工统计每个从根节点到叶子节点的遍历也很方便啊,每个遍历上的内部节点加上树枝就是if条件,叶子节点就是then的判断结果。如果模型比较复杂的话可以考虑做个简单的二次开发。

假设你用的是j48,用weka explorer把训练好的决策树另存下来(或者直接在**里用输出流写入文件),再用输入流把决策树读入为一个sourcable对象,调用对象的tosource方法把决策树**化,接下来就是文本处理的问题了,通过分析**结构得到相应的分类规则。

大概是这样的读入过程:

fileinputstream j48 = new fileinputstream("j48.model");

objectinputstream j48object = new objectinputstream(j48);

sourcable j48code = (sourcable) j48object.readobject();

system.out.println(j48code.tosource("j48 tree"));

用上面几行举个例子,希望对你有启发^^

如何用r进行决策树c4.5算法的运用

6楼:匿名用户

你是说对样本是嘛?看你用决策树来干嘛?如果是分类的话,一般进行离散化,也就是每个feature的值属于某几种,如果是回归**的话,则直接使用原来的值~

决策树为什么 不直接用分类误差来做特征选择

7楼:

特征选择也叫特征子集选择 ( fss , feature subset selection ) 。是指从已有的m个特征(feature)中选择n个特征使得系统的特定指标最优化。

需要区分特征选择与特征提取。特征提取 ( feature extraction )是指利用已有的特征计算出一个抽象程度更高的特征集,也指计算得到某个特征的算法。

特征提取与特征选择都能降低特征集的维度。

如何从科学学习决策树中提取决策规则

8楼:智联校园

你的意思是从训练好的决策树模型中自动提取出分类规则吗?weka好像没有可以直接从树结构中提取规则的功能吧。

不过如果模型不是太复杂的话手工统计每个从根节点到叶子节点的遍历也很方便啊,每个遍历上的内部节点加上树枝就是if条件,叶子节点就是then的判断结果。如果模型比较复杂的话可以考虑做个简单的二次开发。

假设你用的是j48,用weka explorer把训练好的决策树另存下来(或者直接在**里用输出流写入文件),再用输入流把决策树读入为一个sourcable对象,调用对象的tosource方法把决策树**化,接下来就是文本处理的问题了,通过分析**结构得到相应的分类规则。

大概是这样的读入过程:

fileinputstream j48 = new fileinputstream("j48.model");

objectinputstream j48object = new objectinputstream(j48);

sourcable j48code = (sourcable) j48object.readobject();

system.out.println(j48code.tosource("j48 tree"));

用上面几行举个例子,希望对你有启发^^

基于决策树算法进行数据挖掘对数据类型的要求是什么?

9楼:匿名用户

你是说对样本是嘛?看你用决策树来干嘛?如果是分类的话,一般进行离散化,也就是每个feature的值属于某几种,如果是回归**的话,则直接使用原来的值~

如何将python生成的决策树画出来

10楼:匿名用户

示例# http://scikit-learn.***/stable/modules/tree.html

>>> from ipython.display import image

>>> dot_data = tree.export_graphviz(clf, out_file=none,

feature_names=iris.feature_names,

class_names=iris.target_names,

filled=true, rounded=true,

special_characters=true)

>>> graph = pydotplus.graph_from_dot_data(dot_data)

>>> image(graph.create_png())