结合基于规则和机器学习的方法构建强大的混合系统
经过这些年的发展,我们都确信ML即使不能表现得更好,至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束,我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的,虽然机器学习在解决问题上肯定有自己的位置,但它并不总是最好的解决方案。基于规则的系统甚至可以胜过机器学习,特别是在可解释性、健壮性和透明度至关重要的领域。
在本文中,我将介绍一些实际的案例,以及如何将手动规则和ML结合使得我们的方案变得更好。
基于规则的系统
基于规则的系统是通过预定义规则来为决策提供支持,系统根据存储的规则评估数据,并根据映射执行特定操作。
下面是几个例子:
欺诈检测:在欺诈检测中,基于规则的系统可用于根据预定义规则快速标记和调查可疑交易。
比如说国际象棋的作弊者,他们的的基本作法是在另一个窗口中安装计算机象棋应用程序,使用程序进行对弈,对于程序来说无论多复杂,每一步都需要 4-5 秒才能完成。所以添加“阈值”来计算玩家每一步的时间,如果在浮动不大就有可能被判断为是作弊者,如下图所示:

医疗保健行业:基于规则的系统可用于管理处方和防止用药错误。它们还可以非常有用地帮助医生根据先前的结果为患者开出额外的分析处方。
供应链管理:在供应链管理中,基于规则的系统可用于生成低库存警报、帮助管理到期日期或新产品推出。
基于机器学习的系统
机器学习 (ML) 系统使用算法从数据中学习并做出预测或采取行动,且无需明确编程。机器学习系统使用通过大量数据训练获得的知识来对新数据进行预测和决策。随着更多数据用于训练,ML 算法可以提高其性能。机器学习系统包括自然语言处理、图像和语音识别、预测分析等。
欺诈检测:银行可能会使用机器学习系统从过去的欺诈交易中学习并实时识别潜在的欺诈活动。或者,它可能会对系统进行逆向工程并寻找看起来非常“异常”的交易。
医疗保健:医院可能会使用 ML 系统来分析患者数据,并根据某些 X 射线预测患者患某种疾病的可能性。

对比
基于规则的系统和ML系统都有各自的优点和缺点
基于规则的系统的优点很明显:
- 易于理解和解释
- 快速实现
- 易于修改
- 健壮的
缺点:
- 涉及大量变量的问题
- 约束条件多的问题
- 限于现有规则
基于ml的系统的优点也很明显
- 自主学习系统
- 解决更复杂问题的能力
- 与基于规则的系统相比,减少了人为干预,提高了效率
- 通过不断学习,灵活地适应数据和环境的变化
缺点:
- 需要的数据,有时很多
- 仅限于之前看到的数据ML
- 认知能力有限
通过对比我们发现,这两种系统的优缺点并不冲突,并且是互补的,那么有没有一种方法可以将他们的优点结合起来呢?
混合型系统

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

特征工程:将楼层转换为三个类别之一:高、中或低,具体取决于建筑物的楼层数。这样可以提高ML模型的效率
硬编码规则可以用作特征工程过程的一部分,以识别和提取输入数据中的重要特征。例如,如果问题领域清晰明确,规则可以很容易地而准确地定义,硬编码规则可以用来创建新特征或修改现有特征,以提高机器学习模型的性能。虽然硬编码规则和特征工程是两种不同的技术,但它们可以结合使用以提高机器学习模型的性能。硬编码规则可以用于创建新特征或修改现有特征,而特征工程可以用于提取不易通过硬编码规则捕获的特征。
后处理:四舍五入或归一化最终结果。
硬编码规则可以作为后处理阶段的一部分来修改机器学习模型的输出。例如,如果机器学习模型输出一组预测结果与某些已知规则或约束条件不一致,硬编码规则可以用来修改预测结果,使其符合规则或约束条件。比如过滤或平滑等后处理技术可以通过消除噪声或错误,或提高预测的整体准确性来精细机器学习模型的输出。当机器学习模型输出概率预测或输入数据存在不确定性时,这些技术尤其有效。在某些情况下,后处理技术也可以用于使用额外信息增强输入数据。例如,如果机器学习模型是在有限数据集上训练的,后处理技术可以用来从外部来源(如社交媒体或新闻提要)中提取额外的特征,以提高预测的准确性。
案例
医疗保健
让我们来看看心脏病的数据:

如果我们用随机森林来预测目标类:
clf=RandomForestClassifier(n_estimators=100, random_state=random_seedX_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.indexcm=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.74recall_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.818recall_score(y_test, y_pred): 0.9
结果有了很大的提升。这就是领域知识在评估患者得分方面发挥了重要作用。

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

数据集高度不平衡:
df["Class"].value_counts()0 284311 4925
为了创建规则,我们查看特征的分布箱线图:

我们们要编写一个自己的HybridEstimator类,他将作为我们手动规则的预估器:
fromhulearn.classificationimportFunctionClassifierrules= {"V3": ("<=", -2),"V12": ("<=", -3),"V17": ("<=", -2),}defcreate_rules(data: pd.DataFrame, rules):filtered_data=data.copy()forcolinrules: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)returnresulthybrid_classifier=FunctionClassifier(create_rules, rules=rules)
我们可以比较纯基于规则的系统和kNN方法的结果,这里使用kNN的原因是,它可以处理不平衡数据:

可以看到,我们只写了3个规则,就比KNN模型的表现好
总结
我们这里的例子可能并不非常的确切,但是它足以说明,混合模型提供了实际的好处,例如快速实施、对异常值的稳健性和增加的透明度。在将业务逻辑与机器学习相结合时,它们是有益的。例如,医疗保健中的混合规则-ML 系统可以通过结合临床规则和分析患者数据的机器学习算法来诊断疾病。机器学习能够在很多任务上取得出色的结果,但是它也需要领域知识的补充。领域知识可以帮助机器学习模型更好地理解数据,并更准确地进行预测和分类。
混合模型可以帮助我们将领域知识和机器学习模型结合起来。混合模型通常是由多个子模型组成,其中每个子模型都针对特定的领域知识进行了优化。这些子模型可以是基于硬编码规则的模型,也可以是基于统计方法的模型,甚至可以是基于深度学习的模型。
混合模型可以利用领域知识来指导机器学习模型的学习过程,从而提高模型的准确性和可靠性。例如,在医学领域中,混合模型可以结合医生的专业知识和机器学习模型的能力,以诊断患者的疾病。在自然语言处理领域,混合模型可以结合语言学知识和机器学习模型的能力,以更好地理解和生成自然语言。
总之,混合模型可以帮助我们将领域知识和机器学习模型结合起来,从而提高模型的准确性和可靠性,并且在各种任务中都有广泛的应用。
https://avoid.overfit.cn/post/b18da20b320a4471b9f0f11f7c59086a
相关文章:
结合基于规则和机器学习的方法构建强大的混合系统
经过这些年的发展,我们都确信ML即使不能表现得更好,至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束,我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的,虽然机器学习在解决问题…...
Spring Security OAuth2实现多用户类型认证、刷新Token
原本的OAuth2登录支持用户名密码登录,现在还想支持另外用id号码和密码登录。但是OAuth2默认提供的UserDetailsService只允许传入一个参数:想要实现多种用户登录,是不是可以考虑loadUserByUsername方法携带多个参数呢?接下来记录一…...
云计算介绍,让你更了解云计算
同学们好! 第一次接触IT行业吗?没关系,看完这篇文章肯定会让你不再陌生。给自己几分钟时间,认真看完哦! 1、不知道什么是云计算? 网络计算云计算 官方定义是:通过网络提供可伸缩的分布式计算…...
阿里大佬翻遍全网Java面试文章,总结出这份1658页文档,GitHub收获25K+点赞
就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。这不又到了面试跳槽的黄金段,成功升职加薪,不成功饱受打击。当然也要注意&…...
【JDK1.8 新特性】Lambda表达式
1. 什么是Lambda表达式? Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达…...
【Vue.js】Vuex核心概念
文章目录全局状态管理模式Vuexvuex是什么?什么是“状态管理模式”?vuex的应用场景Vuex安装开始核心概念一、State1、单一状态树2、在 Vue 组件中获得 Vuex 状态3、mapState辅助函数二、Getter三、Mutation1、提交载荷(Payload)2、…...
react router零基础使用教程
安装既然学习 react router 就免不了运行 react安装 reactnpx create-react-app my-appcd my-appnpm start安装 react routernpm install react-router-dom如果一切正常,就让我们打开 index.js 文件。配置路由引入 react-router-dom 的 RouterProviderimport {Route…...
IOC三种依赖注入的方式,以及区别
目录构造方法注入(constructor injection)setter 方法注入(setter injection)接口注入(interface injection)三种方式比较构造方法注入(constructor injection) 构造方法中声明依赖…...
Ubuntu18安装新版本PCL-1.13,并和ROS自带PCL-1.8共存
文章目录1.安装新版本PCL-1.132.在工程中使用新版本的PCL-1.133.pcl-1.13误装到/usr/local/下如何卸载1.安装新版本PCL-1.13 下载PCL-1.13代码: 修改CMakeLists.txt文件,不编译vtk相关的代码:vtk的问题比较难解决,但是一般我们安…...
计算机图形学08:中点BH算法绘制抛物线(100x = y^2)
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、算法原理二、…...
基于java的高校辅导员工作管理系统
摘 要网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块,对于高校辅导员工作管理将是又一个传统管理到智能化信息管理的改革,设计高校辅导员工作管理系统的目的就是借助计算机让复杂的班级信息、学籍信息等管…...
字节3次都没裁掉的7年老测试。掌握设计业务与技术方案,打开上升通道!
前言职场中的那些魔幻操作,研发最烦的是哪个?“面对业务需求的时候,可能都听过这样一句话:这个很简单,直接开发,三天内上线;”朋友说:“产品听了流泪,测试见了崩溃&#…...
详细介绍关于链表【数据结构】
文章目录链表单链表尾插头插尾删第一种方式删除第二种头删查找pos之前插入pos位置删除pos后面插入pos位置后面删除链表 顺序表缺点: 空间不够了 需要扩容,但是扩容是有消耗的头部或中间位置需要插入或删除,需要挪动 ,但是挪动是…...
2.3 二分搜索技术
二分搜索算法是运用分治策略的典型例子。给定己排好府的 n个元素a10:n-1],现要在这n个元素中找出一特定元素3。首先较容易想到的是用顺序搜索方法,逐个比较a10:1-1]中元素,直至找出元素,或搜索遍整个数组后确定,不在其…...
RWEQ模型的土壤风蚀模数估算、其变化归因分析
土壤风蚀是一个全球性的环境问题。中国是世界上受土壤风蚀危害最严重的国家之一,土壤风蚀是中国干旱、半干旱及部分湿润地区土地荒漠化的首要过程。中国风蚀荒漠化面积达160.74104km2,占国土总面积的16.7%,严重影响这些地区的资源开发和社会经…...
学习streamlit-1
Streamlit A faster way to build and share data apps streamlit在几分钟内就可以将数据脚本转换为可共享的web应用程序,并且是纯python编程,无需前端经验。 快速开始 streamlit非常容易上手,运行demo只需2行代码: pip install…...
GPS定位知识介绍
GPS定位和网络定位 GPS定位需要卫星参与,设备借助搜到的卫星讯号,计算出设备的位置。网络定位是指利用基站、WIFI MAC,获取一个粗略的位置。3D定位和2D 定位 3D一般是指使用至少4颗以上卫星完成的定位。2D一般使用3颗卫星完成的定位过程。...
【Linux】理解Linux环境变量
🍎作者:阿润菜菜 📖专栏:Linux系统编程 初识环境变量 什么是环境变量 我们平常所用的Linux指令其实也是可执行程序,和我们自己写的二进制程序没什么两样,那么为什么我们在执行自己的程序的时候需要加上 ./…...
ISCSI块存储-集群
ISCSI块存储-集群 1、ISCSI概述 ISCSI与SCSI原理对比 底层都是硬盘 ISCSI第二层就是通过gateway/网络获取–>SCSI:是直连获取 常见的用于ISCSI服务的网络拓扑类型 SAN:Storage Area Network:存储区域网络; 多采用告诉光纤…...
11.Maxwell 部署
Maxwell 部署 一、环境准备 1、确保服务器上已经安装好了zookeeper、kafka、MySQL软件; (1)启动zookeeper: /usr/app/zookeeper3.4/bin/zkServer.sh start(2)启动三台主题的kafka 启动:bin/kafka-serv…...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
篇章二 论坛系统——系统设计
目录 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 1. 数据库设计 1.1 数据库名: forum db 1.2 表的设计 1.3 编写SQL 2.系统设计 2.1 技术选型 2.2 设计数据库结构 2.2.1 数据库实体 通过需求分析获得概念类并结合业务实现过程中的技术需要&#x…...
