网站可以做的兼职,杰森影像网站建设,wordpress文章自动获取标签,论坛平台主要产品欢迎来到雲闪世界.PRISM 是一种现有算法#xff08;尽管我确实创建了一个 Python 实现#xff09;#xff0c;PRISM 相对简单#xff0c;但在机器学习中#xff0c;有时最复杂的解决方案效果最好#xff0c;有时最简单的解决方案效果最好。然而#xff0c;当我们希望建立… 欢迎来到雲闪世界.PRISM 是一种现有算法尽管我确实创建了一个 Python 实现PRISM 相对简单但在机器学习中有时最复杂的解决方案效果最好有时最简单的解决方案效果最好。然而当我们希望建立可解释的模型时简单性会带来很大的好处。 PRISM 是一种规则归纳工具。也就是说它创建一组规则来根据其他特征预测目标特征。 规则在机器学习中至少有几个非常重要的用途。一是预测。与决策树、线性回归、GAM、ikNN、加性决策树、决策表和少数其他工具类似它们可以提供可解释的分类模型。
规则也可以简单地用作理解数据的一种技术。事实上即使没有标签它们也可以以无监督的方式使用创建一组规则来预测每个特征之间的区别依次将表中的每个特征视为目标列这可以突出显示数据中的任何强模式。
还有其他用于在 Python 中创建规则的工具包括非常强大的imodels 库。但是创建一组既准确又易于理解的规则仍然具有挑战性。规则感应系统通常无法创建合理准确的模型或者如果可以也只能通过创建许多规则和包含许多术语的规则来实现。例如以下规则
如果颜色 ’蓝色’ 并且高度 3.4 并且宽度 3.2 并且长度 33.21 并且温度 33.2 并且温度 44.2 并且宽度 5.1 并且重量 554.0 并且 … 那么…
如果规则包含超过五到十个术语它们就会变得难以遵循。如果术语足够多规则最终可能会变得无法解释。如果规则集包含的规则数量超过中等数量整个规则集就会变得难以遵循如果每条规则都包含许多术语情况就更是如此。
PRISM 规则
PRISM 是一个规则归纳系统由 Chendrowska 首次提出并在《数据挖掘原理》中进行了描述。
PRISM 支持生成规则既可以作为描述模型描述表中的模式以特征之间的关联形式也可以作为预测模型。它通常会生成一组非常简洁、清晰的可解释规则。
作为一个预测模型它提供了所谓的全局和局部解释在可解释人工智能XAI中使用的术语中。也就是说它是完全可解释的既可以理解整个模型也可以理解单个预测。
测试多个规则感应系统后我经常发现 PRISM 生成的规则集最简洁。不过没有一个系统始终表现最佳通常需要尝试一些规则感应工具。
生成的规则采用析取范式AND 的 OR每个单独的规则都是一个或多个项的 AND每个项的形式为特征 值其中某个值位于该特征的值集合中。例如生成的规则可能采用以下形式
目标值“蓝色”的规则
如果 feat_A ‘hot’ 并且 feat_C ‘round’ 那么 ‘blue’如果 feat_A ‘warm’ 并且 feat_C ‘square’ 那么 ‘blue’
目标值“red”的规则
如果 feat_A ‘冷’ 并且 feat_C ‘三角形’ 那么 ‘红色’如果 feat_A ‘cool’ 并且 feat_C ‘triangular’ 那么 ‘red’
该算法严格适用于 X 和 Y 列中的分类特征。因此此实现将自动对所有数字列进行分箱以支持该算法。默认情况下使用三个等计数分箱代表特征的低、中、高值但这可以通过 nbins 参数进行配置可以使用更多或更少的分箱。
PRISM 算法
对于本节我们假设使用 PRISM 作为预测模型具体来说是作为分类器。
该算法的工作原理是为目标列中的每个类创建一组规则。例如如果在 Iris 数据集上执行其中目标列中有三个值Setosa、Versicolour 和 Virginica那么将有一组与 Setosa 相关的规则、一组与 Versicolour 相关的规则和一组与 Virginica 相关的规则。
生成的规则应以“先触发规则”的方式读取因此所有规则都以合理的顺序生成和呈现从与每个目标类别最相关到最不相关。例如检查与 Setosa 相关的规则集我们将有一组预测鸢尾花是否为 Setosa 的规则这些规则将按预测性从高到低的顺序排列。其他两个类别的规则集也是如此。
生成规则
我们将在此描述 PRISM 用于为一个类别生成一组规则的算法。假设我们即将使用 Iris 数据集为 Setosa 类别生成规则。
首先PRISM 会找到可用来预测目标值的最佳规则。Setosa 的第一条规则会预测尽可能多的 Setosa 记录。也就是说我们会在其他特征的某个子集中找到唯一值集这些值集最能预测记录何时会是 Setosa。这是 Setosa 的第一条规则。
但是第一条规则不会涵盖所有 Setosa 记录因此我们创建了额外的规则来涵盖 Setosa 的剩余行或尽可能多的行。
当发现每个规则时将删除与该规则匹配的行并找到下一个规则来最好地描述该目标值的剩余行。
每个规则可以有任意数量的术语。
对于目标列中的每个其他值我们再次从完整数据集开始在发现规则时删除行并生成其他规则来解释此目标类值的剩余行。因此在找到 Setosa 的规则后PRISM 将生成 Versicolour 的规则然后生成 Virginica 的规则。
覆盖范围和支持
此实现通过输出与每个规则相关的统计数据增强了数据挖掘原理中描述的算法因为许多导出的规则可能比其他导出的规则更相关或者相反其重要性大大降低。
此外跟踪有关每条规则的简单统计数据允许提供参数来指定每条规则的最小覆盖率该规则适用的训练数据中的最小行数以及最小支持度目标类别与与规则匹配的行的期望值匹配的最小概率。这些有助于减少噪音额外的规则只会给模型的描述或预测能力增加很小的价值但可能会导致某些目标类别的规则很少或没有规则可能无法覆盖一个或多个目标列值的所有行。在这些情况下用户可能希望调整这些参数。
与决策树的比较
决策树是最常见的可解释模型之一很可能是最常见的。当足够小时它们可以合理地解释可能与任何模型类型一样可解释并且它们对于许多问题当然不是全部都可以相当准确。然而它们作为可解释模型确实有局限性而 PRISM 的设计就是为了解决这个问题。
决策树并非专门为可解释性而设计的决策树的一个方便属性就是它们具有可解释性。例如它们通常会变得比容易理解的要大得多并且经常会出现重复的子树因为与特征的关系必须在树中重复多次才能被正确捕获。
此外单个预测的决策路径可能包含与最终预测无关甚至具有误导性的节点从而进一步降低可压缩性。
Cendrowska 的论文提供了一些无法用树轻易表示的简单规则集的示例。例如
规则 1如果 a 1 并且 b 1则 class 1规则 2如果 c 1 并且 d 1则 class 1
这些导致了一棵令人惊讶的复杂树。事实上这是一种导致决策树过于复杂的常见模式“有两个底层规则没有共同的属性这种情况在实践中很可能经常发生” [3]
规则通常可以生成比决策树更易于解释的模型尽管反之亦然并且对于任何需要可解释模型的项目来说规则都非常有用。而且如果目标不是构建预测模型而是理解数据那么使用多个模型可能有利于捕获数据的不同元素。
安装
该项目由一个Python 文件组成可以使用以下命令下载并包含在任何项目中
从prism_rules导入PrismRules
使用 sklearn 的 Wine 数据集的示例
github 页面提供了两个示例笔记本提供了使用该工具的简单但全面的示例。不过该工具非常简单。要使用该工具生成规则只需创建一个 PrismRules 对象并使用数据集调用 get_prism_rules()指定目标列
import pandas as pd
from sklearn.datasets import load_winedata datasets.load_wine()
df pd.DataFrame(data.data, columnsdata.feature_names)
df[Y] data[target]
display(df.head())prism PrismRules()
_ prism.get_prism_rules(df, Y)
结果
该数据集在目标列中有三个值因此将生成三组规则
................................................................
Target: 00
................................................................proline High AND alcohol HighSupport: the target has value: 0 for 100.000% of the 39 rows matching the rule Coverage: the rule matches: 39 out of 59 rows for target value: 0. This is:66.102% of total rows for target value: 021.910% of total rows in dataproline High AND alcalinity_of_ash LowSupport: The target has value: 0 for 100.000% of the 10 remaining rows matching the rule Coverage: The rule matches: 10 out of 20 rows remaining for target value: 0. This is:50.000% of remaining rows for target value: 016.949% of total rows for target value: 05.618% of total rows in data0................................................................
Target: 1
................................................................
color_intensity Low AND alcohol LowSupport: the target has value: 1 for 100.000% of the 46 rows matching the rule Coverage: the rule matches: 46 out of 71 rows for target value: 1. This is:64.789% of total rows for target value: 125.843% of total rows in datacolor_intensity LowSupport: The target has value: 1 for 78.571% of the 11 remaining rows matching the rule Coverage: The rule matches: 11 out of 25 rows remaining for target value: 1. This is:44.000% of remaining rows for target value: 115.493% of total rows for target value: 16.180% of total rows in data................................................................
Target: 2
................................................................
flavanoids Low AND color_intensity MedSupport: the target has value: 2 for 100.000% of the 16 rows matching the rule Coverage: the rule matches: 16 out of 48 rows for target value: 2. This is:33.333% of total rows for target value: 28.989% of total rows in dataflavanoids Low AND alcohol HighSupport: The target has value: 2 for 100.000% of the 10 remaining rows matching the rule Coverage: The rule matches: 10 out of 32 rows remaining for target value: 2. This is:31.250% of remaining rows for target value: 220.833% of total rows for target value: 25.618% of total rows in dataflavanoids Low AND color_intensity High AND hue LowSupport: The target has value: 2 for 100.000% of the 21 remaining rows matching the rule Coverage: The rule matches: 21 out of 22 rows remaining for target value: 2. This is:95.455% of remaining rows for target value: 243.750% of total rows for target value: 211.798% of total rows in data
对于每条规则我们都可以看到支持和覆盖。
支持度表示有多少行支持该规则即在可以应用该规则的行中有多少行是正确的。这里的第一条规则是
proline High AND alcohol HighAND alcohol HighSupport: the target has value: 0 for 100.000% of the 39 rows matching the rule
这表明在脯氨酸 高特征脯氨酸具有高数值且酒精度为高特征酒精具有高数值的 39 行中其中 100% 的目标为 0。
覆盖率表示规则覆盖了多少行。对于第一条规则覆盖率是
Coverage: the rule matches: 39 out of 59 rows for target value: 0. This is:matches: 39 out of 59 rows for target value: 0. This is:66.102% of total rows for target value: 021.910% of total rows in data
这表示行数和数据行百分比的覆盖率。
生成预测的示例
为了创建预测我们只需调用 predict() 并传递具有与用于拟合模型的数据框相同特征的数据框尽管可以选择省略目标列如本例所示。
y_pred prism.predict(df.drop(columns[Y]))是 ]
这样PRISM 规则可以等效地用于任何其他预测模型例如决策树、随机森林、XGBoost 等。
但是在生成预测时某些行可能不符合任何规则。在这种情况下默认情况下将使用训练期间目标列中最常见的值可以通过访问 prism.default_target 看到。predict() 方法还支持参数 leave_unknown。如果将其设置为 True则任何不符合任何规则的记录都将设置为“无预测”。在这种情况下即使原始目标列是数字预测也将以字符串类型返回。
示例笔记本中提供了更多示例。
数值数据示例
在此示例中我们使用 sklearn 的 make_classification() 方法创建数值数据目标列除外然后将其分箱。这将使用每个数值特征三个分箱的默认值。
x, y make_classification(n_samples1000, 1000, n_features20, n_informative2,n_redundant2,n_repeated0,n_classes2,n_clusters_per_class1,class_sep2,flip_y0, random_state0)df pd.DataFrame(x)
df[Y] y
prism PrismRules()
_ prism.get_prism_rules(df, Y)
结果
每列的数据被分为低、中、高三个值。结果是每个目标类别的一组规则。
Target: 00
1 HighSupport: the target has value: 0 for 100.000% of the 333 rows matching the rule Coverage: the rule matches: 333 out of 500 rows for target value: 0. This is:66.600% of total rows for target value: 033.300% of total rows in data15 Low AND 4 MedSupport: The target has value: 0 for 100.000% of the 63 remaining rows matching the rule Coverage: The rule matches: 63 out of 167 rows remaining for target value: 0. This is:37.725% of remaining rows for target value: 012.600% of total rows for target value: 06.300% of total rows in data4 High AND 1 MedSupport: The target has value: 0 for 100.000% of the 47 remaining rows matching the rule Coverage: The rule matches: 47 out of 104 rows remaining for target value: 0. This is:45.192% of remaining rows for target value: 09.400% of total rows for target value: 04.700% of total rows in data
《数据挖掘原理》一书中的示例
此示例是在 github 页面上的一个示例笔记本中提供的。 PRISM 制定了三条规则
如果眼泪 1 那么目标3如果 astig 1 并且 tears 2 并且 specRX 2 那么 Target2如果 astig 2 且 tears 2 AND specRX 1 那么 Target 1
执行时间处理时间
该算法通常能够在几秒或几分钟内生成一组规则但如果需要减少算法的执行时间可以使用数据样本代替完整数据集。该算法通常在数据样本上效果很好因为模型寻找的是一般模式而不是例外并且这些模式将存在于任何足够大的样本中。
github 页面上提供了有关调整模型的进一步说明。
结论
不幸的是目前可用的可解释预测模型相对较少。此外没有一个可解释模型对所有数据集都足够准确或足够可解释。因此在可解释性很重要的地方值得测试多个可解释模型包括决策树、其他规则归纳工具、GAM、ikNN、加法决策树和 PRISM 规则。
PRISM 规则通常会生成清晰、可解释的规则并且通常具有较高的准确度尽管这会因项目而异。虽然与其他预测模型类似但需要进行一些调整。
感谢关注雲闪世界。亚马逊aws和谷歌GCP服务协助解决云计算及产业相关解决方案 订阅频道(https://t.me/awsgoogvps_Host) TG交流群(t.me/awsgoogvpsHost)d