神经网络规则提取方法

ruleex的Python项目详细描述


规则

rulex是一个实现规则提取算法的python包。 现在,有三种算法可用(hypinv、ann-dt和deepred)。 所有这些算法都稍加修改。特别是,提取的规则 存储在具有决策节点的树结构中,决策节点可以具有任何形式,例如, 轴平行或线性拆分。一般决策树的实现,即 包含任何类型决策节点的树,还包括一些方便的 操作。

下面的描述只提供了对代码(类, 函数及其参数)。关于实现背后理论的更多细节 我的硕士论文可以拿到。

此子包包含通用决策树的实现,即, 具有任意决策节点的决策树。也可以使用 所谓的决策图,每个节点可以有多个传入边。

类规则

rule是描述树内决策节点的抽象类。 此类的对象至少存储以下参数:

  • true_branch和false_branch:指向下一个节点的指针或无指针。
  • class_set:节点表示的类集合(在树中 此集合应遵循包含方式的顺序)
  • class_hits:包含每个类的样本数的列表。
  • num_true和num_false:重定向到的样本数 分别是真分支和假分支。

需要重写的方法是:

  • 求值规则:求值规则,即,如果满足规则的条件,则返回true。
  • 全部评估:评估样本列表(使用numpy优化决策过程)。
  • 到字符串:将节点打印到字符串。
  • 复制:将新实例作为当前对象的副本返回。

扩展init方法来存储特定节点的一些其他关键值也很方便。

实现的子类是AxisRule和LinearRule表示 轴平行和线性拆分节点。还实现了leaf- 树的叶节点。

但是,在树结构中可以实现类规则的其他子类 leaf应该始终属于leaf类,因为在ruletree类中实现的算法 依赖于该属性。

类规则树

这个子包的主要类。它表示一般决策树。

这个类没有封装。操作起来相当自由。它的实施 有两个紫色的。第一个是存储有关tee的一般信息,例如

  • 根节点,
  • 课程数量,
  • 输入值的数目。

第二个目的是在树结构上实现一些简单的操作。

  1. 静态方法
    • ruletree中的rt.half_(类数):创建与 课程数量。此树基于第一个值进行分类 大于0.5。
    • load(filename):从pickle文件加载ruletree对象。
  2. 评价
    • rt.eval_one(x):评估一个样本。
    • rt.eval_all(x,all_nodes=none,prevs=none):计算存储在列表x中的所有样本。 当参数所有的节点和prev都被传递时,方法不需要 执行递归调用及其更快的速度(它也适用于具有这些 参数)。
  3. 复制、保存和打印
    • rt.copy():对树进行深度复制。
    • 保存(文件名):将规则树保存到pickle文件中。
    • rt.to_string():打印规则树。注意这个的计算复杂性 当树很大时起作用。
    • rt.print_expanded_rules():打印所有r规则,即每条路径 根节点到叶节点,就好像用节点条件的结合规则一样。
    • rt.view_graph():返回graphviz有向图。它还可以将其显示并存储为PDF格式。
  4. 吸气剂
    • rt.get_all_nodes():返回决策图包含的所有开始节点 带右根。
    • rt.get_precedent_dict():返回节点与其前任列表之间的映射。
    • rt.get_all_expanded_rules():返回开始的图中所有路径的列表 在rt.root中以叶节点结束。
    • rt.get_thresholds():对于具有轴规则的树,返回所有阈值 对于每个属性
    • rt.get_rule_index_dict(x):返回节点和索引之间的映射 在评估期间访问节点的样本x的数量。
    • rt.get_stats():返回规则树的某些选定属性: 规则数、节点数、使用的索引数 通过树(仅支持AxisRule和LinearRule) 所有规则长度的总和,使用的索引的总和 在每个规则中。
  5. 图形运算
    • rt.replace_leaf_with_set(leaf_class_set,replacing_rule,all_nodes=none,prevs=none):全部替换 通过替换规则使类集等于叶类集的叶。
    • rt.replace_rule(matching_rule,replacement,prev_entries=none):用替换替换匹配的_rule。 如果上一个条目是pressent,则它不会递归地寻找匹配的规则。 在图表中。(提示:prev_entries=prevs\[匹配规则]
    • rt.delete_node(node,branch,all_nodes,prevs):删除图形结构中的节点 并用参数指定的分支替换它。
    • rt.fill_class_sets():根据叶类集填充类集。 在具有类集{1}和{0,3}lead的分支中具有两个叶的节点将具有 类集合{0,1,3}。
    • rt.fill_hits(x,labels,remove_redundat=false):填充所有节点中的类点击 在图中,通过使用样本的真标签计算样本x。如果删除多余的 如果为true,则删除未填充的节点。
  6. <李氏支票
    • rt.check_none_inside_tree():如果某个分支中只有叶节点没有叶节点,则返回true。
    • rt.check_one_evaluation():检查图形是否仅将每个样本求值到一个类。
    • rt.graph_max_indegree(all_nodes=none,return_all=false):返回最大索引 发生在图表中。如果return_all为true,则返回节点与其索引之间的映射。
  7. 条件修剪
    • rt.fill_hits with remove_redundat=true选项。
    • rt.delete_interval_redundancy():删除导致 是由从rt.root到它的路径中的前一个节点的条件强制的。
    • rt.delete_class_redundacy():删除 导致相同结果(分类)的规则树结构。
    • remove_unvisited(visited_rules):删除参数中指定的其他节点。
    • rt.remove_unvisited_edges(all_nodes,prevs):删除num_true或num_false等于零的节点。
    • rt.prune_using_hits(min_split_fraction=0.0,min_rule_samples=1,all_nodes=none): 移除类命中总数小于最小规则样本的所有节点 max(num-true/num-false,num-false/num-true)<;min-拆分分数

构建规则树

建立dt的标准方法是在研究所有可能的分裂和 使其分区中杂质的加权和最小化。 该算法的主要概念是在按功能构建模块中实现的 根据规则生成规则

必需的参数是

  • rule_list:规则列表,例如,具有AxisRule类的对象
  • 数据:训练样本输入列表
  • 标签:训练样本的标签列表

警告:不要将此功能用于超过100个可能的节点。它是 一般和未优化。如果你想在标准dt中使用sklearn,然后 通过ulits模块中的sklearnt_to_ruletree函数转换结果。 (甚至可以设置ann-dt算法以标准方式构建dt并对其进行优化)

实用程序.py

此模块的主要原因是dt的其他模型与ruletree类之间的转换。

sklearnt_to_ruletree将sklearn模型转换为ruletree对象。也有可能 添加一些额外的修剪设置,如min_split_fraction(请参阅rt.prune_using_hits)。

pybliquedt_to_ruletreetrain_oc1假设一个包pyblique。 它们生成一个具有线性分割的规则树。

芦丁.py

此模块需要安装rpy2和r-project。它提供训练C5.0dt的功能 并将其转换为RuleTree对象。

ann-dt方法(anndt子包)

这种方法与标准的dt构建非常相似,但是在每个节点上 如果有足够的样本,如果没有,则通过采样输入空间生成新样本 取神经网络的输出。也有其他杂质函数,因为 nn为样本提供连续输出,而不仅仅是标签。

主要功能是anndt(model_fun,x,params,measureClass=none,stat_test=none,sampler=none,init_restrictions=none):, 其中参数为:

  • model\u fun是一个函数,调用时返回样本列表的nn输出。
  • x培训样本列表。
  • 测量类杂质测量的类别(定义在模块测量中)。
  • 统计检验使用的统计检验函数(有些函数在模块统计检验中定义)。
  • 采样器在模块sampling中定义的采样器的子类,其中实现了一些示例。 注意为您的数据设置或实现这个类。
  • 初始限制输入的最小值和最大值列表。
  • 参数附加参数字典主要参数有:
    • 最小采样数:用于创建新节点的最小采样数。 此值用于生成满足条件的许多新样本。
    • min_train:创建新节点的最小序列样本数。如果 训练样本的数目较低,正在生成当前子树站点。
    • 最大深度:生成dt的最大深度。
    • 最小分割分数:其中一个停止条件有关详细信息,请参见rt.prune_using_hits。
    • varbose:varbose的一个级别
      • 0:未打印任何内容:
      • 1:打印了一些信息。

模块度量值.py

在这个模块中,定义了抽象类measureoptimized。它代表抽象 使用ann-dt搜索最优分割。类的主要方法 是查找分割

也有实现的子类measureoptimized

  • 基尼测度:表示基于基尼指数杂质的训练算法。
  • 熵测度:表示基于熵杂质的训练算法。
  • fidelity gain:表示基于保真度增益的训练算法。逼真度 收益被定义为错误分类样本的百分比 各部门上课。
  • 方差测量:此杂质只能用于二进制分类。 它计算方差作为杂质测量。

模块采样.py

这个模块定义了一个抽象类sampler及其两个子类normalsampler伯努马尔采样器。 必须重写两个抽象方法:

  • get_default_params(self,x):设置采样器所需参数的方法。
  • generate_x(self,train_x,number,restrictions):生成样本的方法。 对于它的生成,有当前节点和限制的可用训练样本 由输入空间和以前的节点定义。

normalsampler为随机分布的数据定义采样类。它是 方便地使用一些统计测试来确定数据是否正常 已分发。

在伯努利和正态分布相乘的情况下进行采样。 这将导致值为零或正态分布。 因此,伯努利分布有三个参数:p(概率 零值的出现);sigmamu为正态分布。

深红色方法(深红色子包装)

一种使用神经网络所有层激活的方法。算法采用 所有训练样本激活。从最后一层开始。它建造DT 根据上次激活对样本进行分类。那么对于每个节点 dt用于对节点的条件是否成立进行分类。之后 节点被这个dt替换。重复此过程,直到第一层 达到。用树替换节点可得到决策图。

主要功能是深红色(层激活,参数)层激活是具有维数的张量(层x样本x激活)。 参数params指定主要方法的所有设置:

  • 初始序列参数:用于 通过sklearn软件包训练初始dt。
  • dt_train_params:用于 由SKLEARN软件包提供的初始日期以外的培训。
  • 先构建:如果为true,则在最后一次激活else时构建dt 使用拆分为0.5的树(请参阅RuleTree类中的Half_RuleTree方法)。
  • varbose:varbose的一个级别
    • 0:显示或打印凹痕。
    • 1:打印主加工信息。
    • 2:打印子树的附加信息。
    • 3:每个步骤的图形都是以PDF格式生成的,并附带结果。

函数deepred返回有关进程的附加信息 提取的规则树。

多层感知器的张量流模型 激活包含在model.py包中。它的名字是deepredfcnet。

hypinv方法(hypinv子包)

hypinv处理由nn(通常是分类器)定义的决策边界。 决策边界是分类变化的输入空间的一部分。 方法如下。首先,找出错误的分类点。然后, 在决策边界上找到该点的闭合点。一种新的线性 split作为一个垂直于这些点之间的线的超平面 与边界上的点相交。规则是在表单中创建的 具有线性分割的决策树。建筑是通过选择最好的 以杂质的方式在每一步分裂,只考虑产生的线性分裂。

有三种方法可以找到决策的最接近点 边界。这些方法是:

  1. 用进化算法在决策边界上生成均匀分布的点,
  2. nn的反演,然后沿边界滑动,
  3. 修改成本函数。

它们的使用取决于输入的维度。之间的界限 这三种方法大约是60000。所以,我n维60以下的一代 边界上的点可以是有效的,但对于尺寸500不是,其中 建议使用修改后的成本函数。

此方法仅用于高维空间的数据,因此 不支持对决策边界上的点进行进化搜索。

主要功能是hypinv(model,x,params=dict(),input_range=none)

  • model具有子类netforhypinv(在模块hypinv.model中)的对象。 它还确定是否使用修改后的损耗。
  • x培训样本列表(仅输入)。
  • 输入范围输入空间的范围,例如,[[0,255]表示i in range(dimensions)] 如果未定义,则通过获取训练样本属性的最大值和最小值来设置该算法。
  • params指定主要方法的所有设置:
    • 最大规则将创建的最大线性拆分数。
    • 最大深度生成树的最大深度。
    • 阈值保真度如果保真度超过此值,则算法停止并返回当前规则树。
    • 使用"训练"点如果为真,则在"其他"训练集中搜索分类错误的点 该算法对输入空间进行均匀采样,找出分类点 nn和当前规则树的不同。
    • 最大滑动步数滑动过程中的最大步数。
    • gtrain_params用于 优化修正成本函数。

函数hypinv返回有关进程的附加信息以及 提取的规则树。

未来工作

我注意到最近没有尝试扩展决策树(dts)。 尽管,hypinv规则提取方法是使用线性分割 并在其他方法或dts失败的情况下取得了很好的效果。 因此,具有线性(斜)分裂的dt是非常有前途的方向 关于研究。然而,一般的线性分裂很难解释。因此,一个新的 方法应具有以下属性:

  1. 类的良好分离-它与DTS的属性相同
  2. 组合中的属性数较少

其思想是定义参数函数并通过其优化找到所需的 线性组合的属性。然而,简单的迭代优化将 不要导致设置第二个属性所需的某些属性零。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
swing Java在图像和显示方面是否存在任何已知问题   java通过安卓应用程序中的fileinputstream(字符串文件名)访问资产文件夹中的文件   java如何修复Web垃圾值的无限打印?   java正则表达式是否匹配简单的“id”值?   java如何强制JFrame为组件提供一定的空间?   java如何使JHipster“热重载”类   swing mouseover删除java中圆形按钮的透明背景   来自接口实现函数和AsyncTask的java Set类变量   由字符串数组填充的java JComboBox(使用for循环)未出现   java中的多链接组合框   java找不到安卓方法。所容纳之物资源。可提取的。。发生错误   java如何检测字符串中的n个短语或单词   如何使用Java播放wav文件?   java如何使用ObjectContentManager在节点下添加节点?