AIF360入门教学

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 Reweighingfrom 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.mzph.cn/news/37595.shtml

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

相关文章

OPENCV C++(十一)

鼠标响应函数 //鼠标响应函数 void on_mouse(int EVENT, int x, int y, int flags, void* userdata) {Mat hh;hh *(Mat*)userdata;switch (EVENT){case EVENT_LBUTTONDOWN:{vP.x x;vP.y y;drawMarker(hh, vP, Scalar(255, 255, 255));//circle(hh, vP, 4, cvScalar(255, 255…

人工智能在监控系统中的预测与优化:提升效率和响应能力

引言:人工智能的发展给监控系统带来了新的可能性,通过分析历史监控数据和其他相关数据,人工智能可以预测未来可能发生的事件,如交通拥堵、安全隐患等,并帮助优化监控系统的配置和资源分配。这种预测和优化的能力可以提…

2023年国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…

vue3表格,编辑案例

index.vue <script setup> import { onMounted, ref } from "vue"; import Edit from "./components/Edit.vue"; import axios from "axios";// TODO: 列表渲染 const list ref([]); const getList async () > {const res await ax…

6.2.0在线编辑:GrapeCity Documents for Word (GcWord) Crack

GrapeCity Word 文档 (GcWord) 支持 Office Math 函数以及转换为 MathML GcWord 现在支持在 Word 文档中创建和编辑 Office Math 内容。GcWord 中的 OMath 支持包括完整的 API&#xff0c;可处理科学、数学和通用 Word 文档中广泛使用的数学符号、公式和方程。以下是通过 OMa…

无法在 macOS Ventura 上启动 Multipass

异常信息 ➜ ~ sudo multipass authenticate Please enter passphrase: authenticate failed: Passphrase is not set. Please multipass set local.passphrase with a trusted client. ➜ ~ multipass set local.passphrase Please enter passphrase: Please re-enter…

大语言模型LLM的一些点

LLM发展史 GPT模型是一种自然语言处理模型,使用Transformer来预测下一个单词的概率分布,通过训练在大型文本语料库上学习到的语言模式来生成自然语言文本。 GPT-1(117亿参数),GPT-1有一定的泛化能力。能够用于和监督任务无关的任务中。GPT-2(15亿参数),在生成方面表现出很…

vue自定义指令--动态参数绑定

在企业微信侧边栏应用中&#xff0c;给dialog添加了拖拽功能&#xff0c;但是因为dialog高度超过了页面高度&#xff0c;所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制&#xff0c;拖拽效果并不理想&#xff0c;所以就想缩小dialog再进行拖拽。 拖拽…

IntelliJ IDEA和Android studio怎么去掉usage和作者提示

截止到目前我已经写了 600多道算法题&#xff0c;其中部分已经整理成了pdf文档&#xff0c;目前总共有1000多页&#xff08;并且还会不断的增加&#xff09;&#xff0c;大家可以免费下载 下载链接&#xff1a;https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ 提取码&#xf…

java处理CSV文件

文章目录 1. 方法2. maven依赖3. 示例代码 1. 方法 opencsv–>CSVParser&#xff1b;commons-csv–>CSVReader&#xff1b;有时候文本里有逗号可能会导致错误分割 2. maven依赖 <dependency><groupId>org.apache.commons</groupId><artifactId>…

457. 环形数组是否存在循环

457. 环形数组是否存在循环 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;经验吸取 原题链接&#xff1a; 457. 环形数组是否存在循环 https://leetcode.cn/problems/circular-array-loop/description/ 完成情况&#xff1a; 解题思路…

使用Pandas进行数据清理的入门示例

数据清理是数据分析过程中的关键步骤&#xff0c;它涉及识别缺失值、重复行、异常值和不正确的数据类型。获得干净可靠的数据对于准确的分析和建模非常重要。 本文将介绍以下6个经常使用的数据清理操作&#xff1a; 检查缺失值、检查重复行、处理离群值、检查所有列的数据类型…

explicit关键字 和 static成员

explicit关键字 和 static成员 1、explicit 关键字2、static成员&#xff08;静态成员变量属于类的&#xff08;只有所属这个类的对象才能修改&#xff09;&#xff0c;不同于全局变量&#xff08;任何对象都能修改&#xff09;&#xff09;2.1 定义和性质2.2 静态成员的使用场…

opencv进阶02-在图像上绘制多种几何图形

OpenCV 提供了方便的绘图功能&#xff0c;使用其中的绘图函数可以绘制直线、矩形、圆、椭圆等多种几何图形&#xff0c;还能在图像中的指定位置添加文字说明。 OpenCV 提供了绘制直线的函数 cv2.line()、绘制矩形的函数 cv2.rectangle()、绘制圆的函数cv2.circle()、绘制椭圆的…

【Quarkus技术系列】「云原生架构体系」在云原生时代下的Java“拯救者”是Quarkus,那云原生是什么呢?

云原生时代下的Java"拯救者" 在云原生时代&#xff0c;其实Java程序是有很大的劣势的&#xff0c;以最流行的spring boot/spring cloud微服务框架为例&#xff0c;启动一个已经优化好&#xff0c;很多bean需要lazy load的application至少需要3-4秒时间&#xff0c;内…

广西一公司泄露22万个人信息,被罚23万

近日&#xff0c;广西北海公安网安部门发现&#xff0c;北海某公司网站存在严重数据泄露问题&#xff0c;约22万个人信息数据已挂在暗网售卖。 经查&#xff0c;涉案公司主要提供网上咨询服务&#xff0c;在日常工作中收集了个人和企业等大量公民信息&#xff0c;但公司存放数…

【算法题】2547. 拆分数组的最小代价

题目&#xff1a; 给你一个整数数组 nums 和一个整数 k 。 将数组拆分成一些非空子数组。拆分的 代价 是每个子数组中的 重要性 之和。 令 trimmed(subarray) 作为子数组的一个特征&#xff0c;其中所有仅出现一次的数字将会被移除。 例如&#xff0c;trimmed([3,1,2,4,3,4…

一站式自动化测试平台-Autotestplat

3.1 自动化平台开发方案 3.1.1 功能需求 3.1.3 开发时间计划 如果是刚入门、但有一点代码基础的测试人员&#xff0c;大概 3 个月能做出演示版(Demo)进行自动化测试&#xff0c;6 个月内胜任开展工作中项目的自动化测试。 如果是有自动化测试基础的测试人员&#xff0c;大概 …

python序列化反序列化和异常处理笔记

迭代器 迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问&#xff0c;直到所有的元素被访问完结束。迭代器只能往前不会后退。 1. 可迭代对象 我们已经知道可以对list、tuple、str等类型的数据使用for...in...的…

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k&#xff0c;请返回数组中第 k 个最大的元素。 请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素&#xff0c;我们往往想到就是先给数组…