PyCaret(Python自动化机器学习)自定义交互式解释性模型

要点

  1. PyCaret代码实现数学定义分类、聚类、异常检测和自然语言处理模型
  2. PyCaret模型创建模型和数据分析:身体质量指数回归模型探索性数据分析,植物物种分类模型预测,合成数据聚类模型探索性数据分析,批发商客户异常检测模型探索性数据分析,新闻板块自然语言处理探索性数据分析。模型部署到云端,或创建自定义交互式网页应用。
  3. PyCaret更多示例:预测饱和成本下,不同营销渠道销售额; 关联规则挖掘Power BI;蛋白质皮质异常检测;自然语言处理生成预防性维护视觉见解;应用博弈论沙普利值解释模型输出结果。

解释性模型

当人类可以轻松理解模型做出的预测和决策背后的推理时,模型就是可解释的。模型的可解释性越高,人们就越容易理解和信任该模型。深度学习和梯度提升等模型是不可解释的,被称为黑盒模型,因为它们对于人类理解来说过于复杂。 人类不可能立即理解整个模型并理解每个决策背后的推理。

有许多易于解释的传统模型类别,例如线性回归和决策树模型。 可解释性不仅仅是一个二元决定,因为它还取决于所讨论的特定模型的复杂性。 例如,使用 5 个特征的线性回归比使用 100 个特征的线性回归更容易解释。

本质上可解释的模型

线性/逻辑

对于线性模型和逻辑回归等线性模型,我们可以从每个特征的权重/系数中获取重要性。让我们快速回顾一下。假设我们尝试使用线性回归来预测员工的工资。自变量是多年的经验和之前的评分(满分 5 分)。
薪酬  = W 1 ∗ 经验  + W2* 评分  \text { 薪酬 }=W 1^* \text { 经验 }+ \text { W2* 评分 }  薪酬 =W1 经验 + W2* 评分 
对于标准化数据,W1 和 W2 本质上可以告诉我们,经验还是评级更重要。在这里,请注意,这是一种特定于模型的技术,可用于全局和局部解释。

决策树

决策树是另一种易于解释的算法,因为我们可以访问每个特征的所有分割:

我们可以清楚地看到从根节点到叶节点是如何做出决策的。 我们只需遵循基于自变量的规则,并将它们列出来解释每个预测。 同样,这是一种特定于模型的技术,可用于局部解释。

全局解释又如何呢?

对于小型决策树,我们可以使用上图。 然而,如果我们有很多特征,并且我们正在训练深度决策树,比如说深度为 8 或 9,那么就会有太多的决策规则无法有效地呈现。 在这种情况下,我们可以使用特征重要性来解释每个特征在全局层面的重要性。

决策树进行分裂以最大限度地减少杂质。我们可以使用这种减少来衡量每个特征的贡献。

Python实现可解释模型示例

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_errorfrom sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from xgboost.sklearn import XGBRegressor
from sklearn.preprocessing import OneHotEncoder, LabelEncoder
from sklearn import treeimport matplotlib.pyplot as plt
%matplotlib inline

读取数据

df = pd.read_csv('data.csv')

处理缺失值

df['Item_Weight'].fillna(df['Item_Weight'].median(), inplace=True)
df['Outlet_Size'].fillna(df['Outlet_Size'].mode()[0], inplace=True)

特征工程

df['Item_Type_Combined'] = df['Item_Identifier'].apply(lambda df: df[0:2])
df['Item_Type_Combined'] = df['Item_Type_Combined'].map({'FD':'Food', 'NC':'Non-Consumable', 'DR':'Drinks'})df['Item_Type_Combined'].value_counts()df['Outlet_Years'] = 2013 - df['Outlet_Establishment_Year']df['Item_Fat_Content'] = df['Item_Fat_Content'].replace({'LF':'Low Fat', 'reg':'Regular', 'low fat':'Low Fat'})
df['Item_Fat_Content'].value_counts()

数据预处理

le = LabelEncoder()
df['Outlet'] = le.fit_transform(df['Outlet_Identifier'])
var_mod = ['Item_Fat_Content','Outlet_Location_Type','Outlet_Size','Item_Type_Combined','Outlet_Type','Outlet']
le = LabelEncoder()
for i in var_mod:
df[i] = le.fit_transform(df[i])df = pd.get_dummies(df, columns=['Item_Fat_Content','Outlet_Location_Type','Outlet_Size','Outlet_Type','Item_Type_Combined','Outlet'])

训练-测试-分割

df.drop(['Item_Type','Outlet_Establishment_Year', 'Item_Identifier', 'Outlet_Identifier'],axis=1,inplace=True)X = df.drop('Item_Outlet_Sales',1)
y = df['Item_Outlet_Sales']X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.25, random_state=42)

训练决策树模型

dt = DecisionTreeRegressor(max_depth = 5, random_state=10)# fitting the decision tree model on the training set
dt.fit(X_train, y_train)

可视化决策树

decision_tree = tree.export_graphviz(dt, out_file='tree.dot', feature_names=X_train.columns, filled=True, max_depth=2)!dot -Tpng tree.dot -o tree.pngimage = plt.imread('tree.png')
plt.figure(figsize=(25,25))
plt.imshow(image)

我们的决策树的可视化清楚地显示了它用于进行预测的规则。 在这里,Item_MRP 和 Outlet_Type 是影响每个商店各种商品销售的首要特征。 如果您想查看完整的决策树,可以通过使用export_graphviz函数更改max_深度参数来轻松实现。

PyCaret

PyCaret 是一个开源、低代码的 Python 机器学习库,可自动化机器学习工作流程。 它是一种端到端的机器学习和模型管理工具,可以成倍地加快实验周期并提高您的工作效率。与其他开源机器学习库相比,PyCaret 是一个替代的低代码库,只需几行代码即可替换数百行代码。 这使得实验速度呈指数级增长且更加高效。 PyCaret 本质上是多个机器学习库和框架的 Python 包装器,例如 scikit-learn、XGBoost、LightGBM、CatBoost、spaCy、Optuna、Hyperopt、Ray 等。

PyCaret 简单易用。 PyCaret 中执行的所有操作都按顺序存储在为部署而完全编排的管道中。 无论是估算缺失值、转换分类数据、特征工程,甚至是超参数调整,PyCaret 都能自动执行所有操作。

线性回归模型

监督机器学习的一项基本任务是回归,其目标是预测连续值。这是通过了解给定数据集上目标变量 y y y 和特征变量 x x x 之间的关系来实现的。最基本的回归模型之一是线性回归 6 { }^6 6,其定义如下。还提供了方程的等效矢量化形式,其中计算转置矢量 β ⊤ \boldsymbol{\beta}^{\top} β X n \boldsymbol{X}_n Xn 的内积。
y n = β 0 + β 1 x n 1 + ⋯ + β p x n p + ϵ n = β ⊤ X n + ϵ n y_n=\beta_0+\beta_1 x_{n 1}+\cdots+\beta_p x_{n p}+\epsilon_n=\boldsymbol{\beta}^{\top} \boldsymbol{X}_{\boldsymbol{n}}+\epsilon_n yn=β0+β1xn1++βpxnp+ϵn=βXn+ϵn

  • y n y_n yn 是给定数据集的 n th  n^{\text {th }} nth  实例的目标变量。
  • x 1 x_1 x1 x p x_p xp 是特征变量。
  • β 0 \beta_0 β0 是截距项。
  • β 1 \beta_1 β1 β p \beta_p βp 是特征变量的系数。
  • ϵ \epsilon ϵ 是错误变量。

分类

分类是基本的监督学习任务之一,其目标是预测一个分类变量,称为类标签。 当只有两个类(0 和 1)时,此任务称为二元分类;如果有更多类,则称为多类分类。 最广泛使用的二元分类模型之一是逻辑回归,其数学定义如下式:
log ⁡ ( p n 1 − p n ) = β 0 + β 1 x n 1 + ⋯ + β p x n p = β ⊤ X n \log \left(\frac{p_n}{1-p_n}\right)=\beta_0+\beta_1 x_{n 1}+\cdots+\beta_p x_{n p}=\boldsymbol{\beta}^{\top} \boldsymbol{X}_{\boldsymbol{n}} log(1pnpn)=β0+β1xn1++βpxnp=βXn

  • log ⁡ ( p n 1 − p n ) \log \left(\frac{p_n}{1-p_n}\right) log(1pnpn) 是赔率的自然对数,称为 logit 函数。
  • x 1 x_1 x1 x p x_p xp 是特征变量。
  • β 0 \beta_0 β0 是截距项。
  • β 1 \beta_1 β1 β p \beta_p βp 是特征变量的系数。
  • β ⊤ X n \boldsymbol{\beta}^{\top} \boldsymbol{X}_n βXn​ 是方程的矢量化形式。

聚类

无监督机器学习的基本任务之一是聚类。 此任务的目标是根据给定数据集的共同特征对不同集群中的实例进行分类。 聚类在各个领域都有许多实际应用,包括市场研究、社交网络分析、生物信息学、医学等。 K-Means 聚类是一种简单且广泛使用的方法,数学定义如下式:
minimize ⁡ C 1 , … , C K { ∑ k = 1 K W ( C k ) } \operatorname{minimize}_{C_1, \ldots, C_K}\left\{\sum_{k=1}^K W\left(C_k\right)\right\} minimizeC1,,CK{k=1KW(Ck)}
K K K 是所有簇的数量,而 C K C_K CK 代表每个单独的簇。我们的目标是最小化 W W W,这是簇内变化的度量。
W ( C k ) = 1 ∣ C k ∣ ∑ i , i ′ ∈ C k ∑ j = 1 p ( x i j − x i ′ j ) 2 W\left(C_k\right)=\frac{1}{\left|C_k\right|} \sum_{i, i^{\prime} \in C_k} \sum_{j=1}^p\left(x_{i j}-x_{i^{\prime} j}\right)^2 W(Ck)=Ck1i,iCkj=1p(xijxij)2

异常检测

异常检测是无监督机器学习的主要任务之一,其目标是识别与大多数数据集实例显着不同的数据集实例。 这些实例被称为异常值,并且根据每个应用程序的上下文和领域,有各种激励措施来检测它们。 还有用于异常检测的半监督和完全监督方法,但我们将重点关注无监督方法,因为它受到 PyCaret 支持。局部离群因素是主要的异常检测模型之一,数学定义如下式:
LOF ⁡ k ( A ) = ∑ B ∈ N k ( A ) lrd ⁡ k ( B ) ld ⁡ k ( A ) ∣ N k ( A ) ∣ \operatorname{LOF}_k(A)=\frac{\sum_{B \in N_k(A)} \frac{\operatorname{lrd}_k(B)}{\operatorname{ld}_k(A)}}{\left|\mathbf{N}_k(A)\right|} LOFk(A)=Nk(A)BNk(A)ldk(A)lrdk(B)

自然语言处理

自然语言处理位于计算语言学和机器学习的交叉点。 这个动态领域的主要目标是从自然语言(即人类在日常生活中使用的语言)中提取信息和见解。 包含多种方法和技术,包括主题建模、情感分析、机器翻译、文档摘要和语音到文本转换。 我们将重点关注主题建模,因为它受到 PyCaret 库的 NLP 模块的支持。 我们可以使用这种技术来发现主题,即隐藏的结构,让我们可以对文档集合(称为语料库)进行语义分组。 潜在狄利克雷分配是一种可用于主题建模的生成概率模型,数学其定义如下。
p ( w ∣ α , β ) = ∫ p ( θ ∣ α ) ( ∏ n = 1 N ∑ z n p ( z n ∣ θ ) p ( w n ∣ z n , β ) ) d θ p(\mathbf{w} \mid \boldsymbol{\alpha}, \boldsymbol{\beta})=\int p(\theta \mid \alpha)\left(\prod_{n=1}^N \sum_{z_n} p\left(z_n \mid \theta\right) p\left(w_n \mid z_n, \boldsymbol{\beta}\right)\right) d \theta p(wα,β)=p(θα)(n=1Nznp(znθ)p(wnzn,β))dθ

参阅一:计算思维
参阅二:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/734396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GFP-GAN环境搭建推理测试

引子 近期,文生图,wav2lip很火,文生图,见识的太多,不多说了。wav2lip其通过语音驱动唇部动作并对视频质量进行修复,里面一般涉及到三个步骤,文本到语音转化,语音驱动唇部动作&#…

YOLOv9/YOLOv8算法改进【NO.103】引入YOLOv9提出模块RepNCSPELAN模块,亲测有效

前 言 YOLO算法改进系列出到这,很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解YOLO算法改进方法的顺序选择。具体有需求的同学可以私信我沟通: 首推,是将两种最新推出算法的模块进行融合形成…

【C++初阶】第五站:C/C++内存管理 (匹配使用,干货到位)

前言: 本文知识点: 1. C/C内存分布2. C语言中动态内存管理方式3. C中动态内存管理4. operator new与operator delete函数 5. new和delete的实现原理 (干货在此) 6. 定位new表达式(placement-new)7. 常见面试题 目录 C/C内…

Linux操作系统内核参数调优-2

1. 请解释Linux内核参数调优的目的和重要性。 Linux内核参数调优的目的主要是提高系统性能、稳定性和安全性。它的重要性体现在以下几个方面: 提升系统性能:通过调整内核参数,可以使系统更高效地利用硬件资源,例如CPU、内存和I/…

Java反射、枚举类和lambda表达式

前言: 本章我们就来了解Java中的反射和枚举类。枚举类和反射其实有些关系,接下来我们就来学习他们的使用。 反射: 反射的作用: 反射:反射允许对成员变量,成员方法和构造方法的信息进行编程访问。 Java中有…

CVE-2021-31440:eBPF verifier __reg_combine_64_into_32 边界更新错误

文章目录 前言漏洞分析构造 vuln reg 漏洞利用漏洞修复参考 前言 影响版本:Linux 5.7 ~ 5.11.20 8.8 编译选项:CONFIG_BPF_SYSCALL,config 所有带 BPF 字样的编译选项。General setup —> Choose SLAB allocator (SLUB (Unqueued Allocat…

从0到1手把手实现RPC|01 RpcProvider本地实现

RPC的简化版原理如下图(核心是代理机制)。 1.本地代理存根: Stub2.本地序列化反序列化3.网络通信4.远程序列化反序列化5.远程服务存根: Skeleton6.调用实际业务服务7.原路返回服务结果8.返回给本地调用方 注意处理异常。 RpcProvider的本地实现 1、工…

xss.haozi.me靶机 通关

0x00 没有任何过滤可以直接注入<img srcx οnerrοralert(1)> 0x01 使用了testarea标签将我们的输入内容以普通的字符串进行展示 但是我们可以将标签进行闭合 </textarea><img srcx οnerrοralert(1)> 0x02 我们依然可以先闭合之后添加属性a" οncl…

word[::-1] for word in s.split()得到的是一个列表

你可以将上述的列表推导式代码拆分为更明确的几个步骤&#xff0c;如下所示&#xff1a; # 原始字符串 s "hello world" # 使用 split() 方法将字符串分割成单词列表 words s.split() # 创建一个空列表&#xff0c;用于存储反转后的单词 reversed_words [] # 遍历…

npm与Maven:前端与后端构建工具深度对比学习

文章目录 npm与Maven&#xff1a;前端与后端构建工具深度对比学习引言一、基础概念与起源1.1 npm简介&#xff1a;定义与在Node.js生态中的角色及其发展历程1.2 Maven简介&#xff1a;设计理念“约定优于配置”及在Java生态系统中的地位与应用范围二、核心功能对比分析2.1 依赖…

对于两个独立随机变量X,Y, E(XY)=E(X)E(Y)

两个独立随机变量X&#xff0c;Y的期望分别是E(X), E(Y), 其乘积XY的期望是多少&#xff1f; 我们可以利用期望的性质来求得XY的期望。由于X、Y是独立随机变量&#xff0c;因此它们的协方差为0&#xff0c;即&#xff1a; cov(X, Y) E(XY) - E(X)E(Y) 0 因此&#xff0c; …

Java17 --- SpringCloud之Consul

目录 一、consul的使用 1.1、主要功能 1.2、安装及运行 1.3、添加微服务到consul 1.3.1、8001微服务添加相关pom、配置文件、注解 1.3.2、80微服务添加相关pom、配置文件、注解 1.4、三个注册中心异同 1.5、consul进行分布式配置 1.5.1、修改8001的yml配置文件 1.5.2…

数字化运营在教育行业的技术架构实践总结

随着科技的不断进步和数字化时代的到来&#xff0c;教育行业也正面临着数字化转型的挑战和机遇。教育行业的数字化运营需要依靠合理的技术架构来支撑&#xff0c;本文将探讨教育行业数字化运营的技术架构设计。 ## 第一步&#xff1a;需求分析和架构设计 在构建教育行业数字化…

SpringMVC08、Json

8、Json 8.1、什么是JSON&#xff1f; JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式&#xff0c;目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和…

Windows更改MySQL-8的数据库数据存放位置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、为什么要用8.x版本&#xff1f;二、为什么要更改存放位置三、开始操作1.断开Client并关闭Server2.找到Data目录3.创建备份目录4.更改配置文件5.更改注册表6…

华为OD面试分享13(2024年)

华为OD面经 二战失败选手,双非一本部门目标院校,数学与应用数学专业,无相关工作经验也没有什么拿得出手的项目。3月中旬开始重新学java(大学里有学过一个学期的java,很水)。期间经常通宵肝,学习框架、刷leedcode,可能是因为数学专业出身,数据结构和算法这一块学起来并…

leetcode299--猜数字游戏

1. 题意 给两个数组&#xff0c;一个是正确答案&#xff0c;一个是猜出的答案&#xff1b; 求猜出的答案中正确位置字符的个数&#xff0c;和错误位置正确字符的位置。 猜数字游戏 2. 题解 直接模拟即可。 当两个串匹配时&#xff0c;公牛数自增&#xff1b;否则分别统计…

LeetCode 173.二叉搜索树迭代器

实现一个二叉搜索树迭代器类BSTIterator &#xff0c;表示一个按中序遍历二叉搜索树&#xff08;BST&#xff09;的迭代器&#xff1a; BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在…

探索机器学习的无限可能性:从初学者到专家的旅程

探索机器学习的无限可能性&#xff1a;从初学者到专家的旅程 在当今数字时代&#xff0c;机器学习无疑是最引人注目的技术之一。它已经深入到我们生活的方方面面&#xff0c;从个性化推荐到自动驾驶汽车&#xff0c;再到医疗诊断和金融预测。但是&#xff0c;即使我们已经见证…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RotationGesture)

用于触发旋转手势事件&#xff0c;触发旋转手势的最少手指为2指&#xff0c;最大为5指&#xff0c;最小改变度数为1度。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 RotationGesture(value?: …