AIF360入门教学

news2024/12/25 10:40:59

1、AIF360简介

  • AI Fairness 360 工具包(AIF360)是一个开源软件工具包,可以帮助检测和缓解整个AI应用程序生命周期中机器学习模型中的偏见。
  • 在整个机器学习的过程中,偏见可能存在于初始训练数据、创建分类器的算法或分类器所做的预测中。AI Fairness 360 工具包可以衡量和缓解机器学习过程中三个阶段的偏见。
  • 开源网站:https://github.com/Trusted-AI/AIF360

2、安装AIF360

  • 使用pip安装最新稳定的版本(先使用这个)
  • pip install aif360
  • 【注】某些算法需要额外的依赖包,安装额外的依赖包,例如运行:
    • pip install aif360[LFR,OptimPreproc]
    • 或安装完整功能的AIF360
    • pip install aif360[all]

3、使用示例

  • 从github上找到官方提供的有关教程。
  • 网站:AIF360/examples/README.md at master ·可信AI/AIF360 ·GitHub

3.1、信用评分(数据预处理去偏)

  • 本案例演示了在使用德国信用数据集的信用评分场景中的年龄偏差背景下使用一个公平性指标(平均差)和一个偏见缓解算法(重新加权)
  • 具体工作:检查初始训练数据中的偏见,缓解偏见,然后重新检查。
  • 网站:Jupyter 笔记本查看器 (nbviewer.org)

3.2、新建项目

  • 使用PyCharm建立一个新的项目。
  • 【注】在系统中使用pip下载的包,在Pycharm中一定要选择系统解释器才能够引用。

3.3、编写导入语句

  • 以下所有语句都在main.py中编写。
  • 与任何python程序一样,第一步是导入必要的包。下面我们从包中导入几个组件。我们导入 GermanDataset,用于检查偏见的指标以及与我们将用于减轻偏差的算法相关的类。
  • # 导入所有需要的包
    import sys
    sys.path.insert(1, "../")  
    
    import numpy as np
    np.random.seed(0)
    
    from aif360.datasets import GermanDataset
    from aif360.metrics import BinaryLabelDatasetMetric
    from aif360.algorithms.preprocessing import Reweighing
    
    from IPython.display import Markdown, display
  • 编译报错(没什么包,加什么包)
  • 添加包(还是报错先不管它)
  • pip install aif360[LawSchoolGPA]
  •  安装IPython
  • pip install ipython
  • 再次编译报错
  • 需要下载数据集到指定位置。分别点击上述两个链接,右键另存为到指定的位置。(注意修改文件名字和后缀)

3.4、设置偏差检测选项、加载数据集并在训练和测试之间拆分

  • 加载初始数据集,将受保护属性设置为 age。
  • 将原始数据集拆分为训练数据集和测试数据集。虽然在本教程中我们将仅使用训练数据集,但正常的工作流也会使用测试数据集来评估机器学习模型开发期间的有效性(准确性、公平性等)。
  • 为 age 属性的特权群体(1)和非特权群体(0)设置两个变量。
  • dataset_orig = GermanDataset(
        protected_attribute_names=['age'],           # 将年龄指定为被保护属性
        privileged_classes=[lambda x: x >= 25],      # age >=25 认为是特权
        features_to_drop=['personal_status', 'sex']  # 忽略与性别有关的属性
    )
    
    dataset_orig_train, dataset_orig_test = dataset_orig.split([0.7], shuffle=True)
    
    privileged_groups = [{'age': 1}]
    unprivileged_groups = [{'age': 0}]  # 其中“1”(大于或等于 25)和“0”(小于 25)分别是特权组和非特权组的值

3.5、计算原始训练数据集上的公平性指标

  • 使用平均差来度量数据集中的偏见。比较特权和非特权群体的有利结果百分比,从后者中减去前者的百分比,负值表示对非特权组不利的结果。
  • 使用BinaryLabelDatasetMetric类中的mean_difference方法实现。
  • # 创建BinaryLabelDatasetMetric对象,传入原始训练数据集dataset_orig_train,以及privileged_groups和unprivileged_groups的定义
    metric_orig_train = BinaryLabelDatasetMetric(dataset_orig_train, 
                                                 unprivileged_groups=unprivileged_groups,
                                                 privileged_groups=privileged_groups)
    display(Markdown("#### Original training dataset"))
    print("Difference in mean outcomes between unprivileged and privileged groups = %f" % metric_orig_train.mean_difference())
  • 编译后显示差值为 -0.169905。

3.6、通过转换原始数据集来缓解偏差

  • 尝试减轻训练数据集中的偏见被称为预处理去偏,因为它发生在创建模型之前。
  • AI Fairness 360 实现了多种预处理缓解算法,选择重新加权算法(通过改变样本权重的方式来减少数据集中不同群体之间的偏差),该算法在包中的类中实现。此算法将转换数据集,使其在特权组和非特权组的受保护属性的积极结果上具有更大的公平性。
  • 再调用拟合和转换方法来执行转换,生成新转换的训练数据集(dataset_transf_train)。
  • RW = Reweighing(unprivileged_groups=unprivileged_groups,
                    privileged_groups=privileged_groups)  # 创建Reweighing对象RW
    dataset_transf_train = RW.fit_transform(dataset_orig_train)  # 计算权重,并生成一个新的训练数据集

3.7、在转换后的训练数据集上计算公平性指标

  • 再次使用平均差来度量它的去偏效果。
  • metric_transf_train = BinaryLabelDatasetMetric(dataset_transf_train, 
                                                   unprivileged_groups=unprivileged_groups,
                                                   privileged_groups=privileged_groups)
    display(Markdown("#### Transformed training dataset"))
    print("Difference in mean outcomes between unprivileged and privileged groups = %f" % metric_transf_train.mean_difference())
  • 结果显示去偏效果非常明显,平均结果的差异现在是0.0。

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

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

相关文章

UI自动化测试(下拉框(select类),多窗口,属性,类的方法实战)

一、下拉框(select类实现的) 在UI的自动化测试实战中,如果遇到下拉框的选择,我们可以使用Select类里面的方法来具体进行定位和解决。下面我们使用HTML的代码来写一个下拉框的页面交互,让大家从直观上知道下拉框的交互…

Node工程的依赖包管理方式

在前端工程化中,JavaScript 依赖包管理是非常重要的一环。依赖包通常是项目所依赖的第三方库、工具和框架等资源,它们能够帮助我们减少重复开发、提高效率并且确保项目可以正确的运行。 目前比较常见的前端包管理器有 npm 和 Yarn,npm 是 No…

16.3.2 【Linux】程序的管理

程序之间是可以互相控制的。举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序, 你既然可以让她关闭或启动,当然就是可以控制该程序。 使用kill-l或者是man 7 signal可以查询到有多少个signal。主要的讯号代号与名…

Stable Diffusion 告别复制关键词,高质量提示词自动生成插件

在使用SD时,我们经常会遇到心中无想法,或不知如何描述心中所想的图像。有时由于提示词的选择不当,生成的图片质量也不尽如人意。为此,我今天为大家推荐一个高质量的提示词自动生成插件——One Button Prompt。 下面是他生成的一些样图。 文章目录 插件安装插件说明主菜单工…

【Linux】可重入函数 volatile关键字 以及SIGCHLD信号

可重入函数 volatile关键字 以及SIGCHLD信号 一、可重入函数1、引入2、可重入函数的判断 二、volatile关键字1、引入2、关于编译器的优化的简单讨论 三、SIGCHLD信号 一、可重入函数 1、引入 我们来先看一个例子来帮助我们理解什么是可重入函数: 假设我们现在要对…

基于Yolov5与LabelMe训练自己数据的图像分割完整流程

基于Yolov5与LabelMe训练自己数据的实例分割完整流程 1. Yolov5配置2. 创建labelme虚拟环境4. 接下来开始使用labelme绘制分割数据集4.1 json to txt4.2 划分数据集(可分可不分) 5. 训练 1. Yolov5配置 参照这边文章: https://blog.csdn.net/ruotianxia/article/de…

Python3,lmproof库,你不知道的小技能,这一篇给安排。

lmproof技能介绍 1、引言2、代码实战2.1 定义2.2 常用语法2.3 安装2.4 示例 3、总结 1、引言 小屌丝:鱼哥,鱼哥,我要考考你 小鱼:你要考考我? 小屌丝:是的啊, 我要考你, 小鱼&#…

ZooKeeper的应用场景(数据发布订阅、负载均衡)

ZooKeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。另一方面,通过对ZooKeeper中丰富的数据节点类型进行交叉使用,配合Watcher事件通知机制,可以非常方便地构建一系…

DaVinci Resolve Studio 18 for Mac 达芬奇调色

DaVinci Resolve Studio 18是一款专业的视频编辑和调色软件,适用于电影、电视节目、广告等各种视觉媒体的制作。它具有完整的后期制作功能,包括剪辑、调色、特效、音频处理等。 以下是DaVinci Resolve Studio 18的主要特点: - 提供了全面的视…

【AGC】发布后应用信息支持设备不能删除问题

【关键字】 AGC、应用发布、兼容设备类型 【问题描述】 有开发者反馈发布新版本应用,应用信息可支持设备不能删除原有在架应用已选择的设备类型。发布应用问题,目前应用是面向车机开发的,在上一个开放性测试版本中,支持设备除了…

【vue】简洁优雅的火花线、趋势线

来由 在github发现个好看易用的vue趋势线组件,特此记录。 效果 趋势图生成后效果如上,线条为渐变色,可设置是否平滑。具体线条走势,根据数据动态生成。 使用 安装 npm i vuetrend -S 引入 import Vue from "vue"…

[已解决]使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

linux目录文件系统:磁盘分区情况

查看系统中的磁盘分区情况 使用命令: fdisk -l由上图可知,一共有4个磁盘分区: 分区1 : /dev/sdb分区2 : /dev/sda分区3: /dev/mapper/centos-root分区4: /dev/mapper/centos-swap查看有哪些目录/文件挂载在上面…

使用 Ploomber、Arima、Python 和 Slurm 进行时间序列预测

推荐:使用 NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 简短的笔记本说明 笔记本由 8 个任务组成,如下图所示。它包括建模的大多数基本步骤 - 获取数据清理、拟合、超参数调优、验证和可视化。作为捷径,我拿起笔记本并使用Soorgeon工具…

ES 概念

es 概念 Elasticsearch是分布式实时搜索、实时分析、实时存储引擎,简称(ES)成立于2012年,是一家来自荷兰的、开源的大数据搜索、分析服务提供商,为企业提供实时搜索、数据分析服务,支持PB级的大数据。 -- …

ssm社区文化宣传网站源码和论文

ssm社区文化宣传网站源码和论文019 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 研究或设计的目的和意义: (一)研究目的: 通过本次课题能够将所学的Java编程知识以及Mysql数据库知…

msvcp140.dll如何重新安装?快速安装msvcp140.dll的方法分享

msvcp140.dll是Windows操作系统的一个动态链接库文件,它是Microsoft Visual C Redistributable的一部分。这个文件在运行某些应用程序时非常重要。然而,在某些情况下,msvcp140.dll文件可能会损坏或遗失,导致应用程序无法正常运行。…

甲基化系列 4. 基于芯片甲基化数据寻找简单的CpG甲基化标志物 (CimpleG)

甲基化系列分析教程 桓峰基因公众号推出甲基化系列分析教程,整理如下: 甲基化系列 1. 甲基化之前世今生(Methylation) 甲基化系列 2. 甲基化芯片数据介绍与下载(GEO) 甲基化系列 3. 甲基化芯片数据分析完整…

见证马斯克的钞能力,AI.com再次易主,OpenAI投掷1100万美金购买AI.com刚满五个月

我们又一次见证了马斯克的钞能力。上次是去年他用440亿美元买下推特。 高价值的AI.com域名在2021年易主后,闲置过一段时间,今年2月份突然重定向到ChatGPT。 对于ChatGPT用户来说,每次访问都要在浏览器里敲这些字符:https://chat.o…

Java继承详解

目录 继承 为什么需要继承 继承的概念 继承的语法 父类成员的访问 子类中访问父类的成员变量 1.子类和父类不存在同名的成员变量 2.子类和父类成员变量同名 子类中访问父类的成员方法 1.成员方法名字不同 2.成员方法名字相同 super关键字 子类构造方法 super和thi…