结合基于规则和机器学习的方法构建强大的混合系统

人工智能 机器学习
经过这些年的发展,我们都确信ML即使不能表现得更好,至少也可以在几乎所有地方与前ML时代的解决方案相匹配。

经过这些年的发展,我们都确信ML即使不能表现得更好,至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束,我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的,虽然机器学习在解决问题上肯定有自己的位置,但它并不总是最好的解决方案。基于规则的系统甚至可以胜过机器学习,特别是在可解释性、健壮性和透明度至关重要的领域。

在本文中,我将介绍一些实际的案例,以及如何将手动规则和ML结合使得我们的方案变得更好。

基于规则的系统

基于规则的系统是通过预定义规则来为决策提供支持,系统根据存储的规则评估数据,并根据映射执行特定操作。

下面是几个例子:

欺诈检测:在欺诈检测中,基于规则的系统可用于根据预定义规则快速标记和调查可疑交易。

比如说国际象棋的作弊者,他们的的基本作法是在另一个窗口中安装计算机象棋应用程序,使用程序进行对弈,对于程序来说无论多复杂,每一步都需要 4-5 秒才能完成。所以添加“阈值”来计算玩家每一步的时间,如果在浮动不大就有可能被判断为是作弊者,如下图所示:

图片

医疗保健行业:基于规则的系统可用于管理处方和防止用药错误。它们还可以非常有用地帮助医生根据先前的结果为患者开出额外的分析处方。

供应链管理:在供应链管理中,基于规则的系统可用于生成低库存警报、帮助管理到期日期或新产品推出。

基于机器学习的系统

机器学习 (ML) 系统使用算法从数据中学习并做出预测或采取行动,且无需明确编程。机器学习系统使用通过大量数据训练获得的知识来对新数据进行预测和决策。随着更多数据用于训练,ML 算法可以提高其性能。机器学习系统包括自然语言处理、图像和语音识别、预测分析等。

欺诈检测:银行可能会使用机器学习系统从过去的欺诈交易中学习并实时识别潜在的欺诈活动。或者,它可能会对系统进行逆向工程并寻找看起来非常“异常”的交易。

医疗保健:医院可能会使用 ML 系统来分析患者数据,并根据某些 X 射线预测患者患某种疾病的可能性。

图片

对比

基于规则的系统和ML系统都有各自的优点和缺点

基于规则的系统的优点很明显:

  • 易于理解和解释
  • 快速实现
  • 易于修改
  • 健壮的

缺点:

  • 涉及大量变量的问题
  • 约束条件多的问题
  • 限于现有规则

基于ml的系统的优点也很明显

  • 自主学习系统
  • 解决更复杂问题的能力
  • 与基于规则的系统相比,减少了人为干预,提高了效率
  • 通过不断学习,灵活地适应数据和环境的变化

缺点:

  • 需要的数据,有时很多
  • 仅限于之前看到的数据ML
  • 认知能力有限

通过对比我们发现,这两种系统的优缺点并不冲突,并且是互补的,那么有没有一种方法可以将他们的优点结合起来呢?

混合型系统

图片

混合系统,结合了基于规则的系统和机器学习算法,最近变得越来越流行。它们可以提供更健壮、准确和有效的结果,特别是在处理复杂问题时。

让我们来看看可以使用租赁数据集实现的混合系统:

图片

特征工程:将楼层转换为三个类别之一:高、中或低,具体取决于建筑物的楼层数。这样可以提高ML模型的效率

硬编码规则可以用作特征工程过程的一部分,以识别和提取输入数据中的重要特征。例如,如果问题领域清晰明确,规则可以很容易地而准确地定义,硬编码规则可以用来创建新特征或修改现有特征,以提高机器学习模型的性能。虽然硬编码规则和特征工程是两种不同的技术,但它们可以结合使用以提高机器学习模型的性能。硬编码规则可以用于创建新特征或修改现有特征,而特征工程可以用于提取不易通过硬编码规则捕获的特征。

后处理:四舍五入或归一化最终结果。

硬编码规则可以作为后处理阶段的一部分来修改机器学习模型的输出。例如,如果机器学习模型输出一组预测结果与某些已知规则或约束条件不一致,硬编码规则可以用来修改预测结果,使其符合规则或约束条件。比如过滤或平滑等后处理技术可以通过消除噪声或错误,或提高预测的整体准确性来精细机器学习模型的输出。当机器学习模型输出概率预测或输入数据存在不确定性时,这些技术尤其有效。在某些情况下,后处理技术也可以用于使用额外信息增强输入数据。例如,如果机器学习模型是在有限数据集上训练的,后处理技术可以用来从外部来源(如社交媒体或新闻提要)中提取额外的特征,以提高预测的准确性。

案例

医疗保健

让我们来看看心脏病的数据:

图片

如果我们用随机森林来预测目标类:

clf = RandomForestClassifier(n_estimators=100, random_state=random_seed
X_train, X_test, y_train, y_test = train_test_split(
df.iloc[:, :-1], df.iloc[:, -1], test_size=0.30, random_state=random_seed
)
clf.fit(X_train, y_train))

这里选择随机森林的原因之一是它的构建特征重要性能力。下面可以看到用于训练的特征的重要性:

图片

看看结果:

y_pred = pd.Series(clf.predict(X_test), index=y_test.index
cm = confusion_matrix(y_test, y_pred, labels=clf.classes_)
conf_matrix = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=clf.classes_)
conf_matrix.plot())

图片

f1_score(y_test, y_pred): 0.74
recall_score(y_test, y_pred): 0.747

这时一位心脏病专家看到了你的模型。基于他的经验和领域知识,他认为地中海贫血特征(thal)比上面所示的要重要得多。所以我们决定建立一个直方图并查看结果。

图片

然后指定一个强制性规则

y_pred[X_test[X_test["thal"] == 2].index] = 1

结果的混淆矩阵变成这样:

图片

f1_score(y_test, y_pred): 0.818
recall_score(y_test, y_pred): 0.9

结果有了很大的提升。这就是领域知识在评估患者得分方面发挥了重要作用。

欺诈交易

下面的数据集是银行欺诈交易。

图片

数据集高度不平衡:

df["Class"].value_counts()
0 28431
1 4925

为了创建规则,我们查看特征的分布箱线图:

图片

我们们要编写一个自己的HybridEstimator类,他将作为我们手动规则的预估器:

from hulearn.classification import FunctionClassifier
rules = {
"V3": ("<=", -2),
"V12": ("<=", -3),
"V17": ("<=", -2),
}
def create_rules(data: pd.DataFrame, rules):
filtered_data = data.copy()
for col in rules:
filtered_data[col] = eval(f"filtered_data[col] {rules[col][0]} {rules[col][1]}")
result = np.array(filtered_data[list(rules.keys())].min(axis=1)).astype(int)
return result
hybrid_classifier = FunctionClassifier(create_rules, rules=rules)

我们可以比较纯基于规则的系统和kNN方法的结果,这里使用kNN的原因是,它可以处理不平衡数据:

图片

可以看到,我们只写了3个规则,就比KNN模型的表现好

总结

我们这里的例子可能并不非常的确切,但是它足以说明,混合模型提供了实际的好处,例如快速实施、对异常值的稳健性和增加的透明度。在将业务逻辑与机器学习相结合时,它们是有益的。例如,医疗保健中的混合规则-ML 系统可以通过结合临床规则和分析患者数据的机器学习算法来诊断疾病。机器学习能够在很多任务上取得出色的结果,但是它也需要领域知识的补充。领域知识可以帮助机器学习模型更好地理解数据,并更准确地进行预测和分类。

混合模型可以帮助我们将领域知识和机器学习模型结合起来。混合模型通常是由多个子模型组成,其中每个子模型都针对特定的领域知识进行了优化。这些子模型可以是基于硬编码规则的模型,也可以是基于统计方法的模型,甚至可以是基于深度学习的模型。

混合模型可以利用领域知识来指导机器学习模型的学习过程,从而提高模型的准确性和可靠性。例如,在医学领域中,混合模型可以结合医生的专业知识和机器学习模型的能力,以诊断患者的疾病。在自然语言处理领域,混合模型可以结合语言学知识和机器学习模型的能力,以更好地理解和生成自然语言。

总之,混合模型可以帮助我们将领域知识和机器学习模型结合起来,从而提高模型的准确性和可靠性,并且在各种任务中都有广泛的应用。

责任编辑:华轩 来源: DeepHub IMBA
相关推荐

2021-02-24 09:15:48

kubernetes混合云云端

2023-08-08 09:00:00

开源Prometheus

2022-09-20 23:38:24

机器学习工具数字优化

2012-10-30 10:09:56

Redis

2017-08-10 09:11:38

规则引擎构建

2015-09-21 15:00:38

机器学习

2020-06-15 10:05:12

人工智能机器学习技术

2023-12-01 10:21:00

机器学习算法

2023-03-01 11:18:59

人工智能机器学习

2020-02-03 09:09:23

机器学习ML深度学习

2015-02-26 09:35:48

AWSOpenStack混合云

2021-04-16 10:49:07

人工智能机器学习

2016-12-28 15:19:22

大数据机器学习销售预测

2010-07-06 11:34:15

EclipseRationalJazz

2017-02-05 21:02:44

大数据深度学习推荐系统

2022-10-21 16:07:10

编码器自然语言模型

2015-07-22 16:16:47

PythonScikit-Lear机器学习

2018-08-30 14:58:12

机器学习磁盘故障

2017-02-16 08:25:35

2024-11-04 08:14:48

点赞
收藏

51CTO技术栈公众号