《人工智能导论》实验4 机器学习伦理与公平性评估_第1页
《人工智能导论》实验4 机器学习伦理与公平性评估_第2页
《人工智能导论》实验4 机器学习伦理与公平性评估_第3页
《人工智能导论》实验4 机器学习伦理与公平性评估_第4页
《人工智能导论》实验4 机器学习伦理与公平性评估_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验4机器学习伦理与公平性评估一、实验目的及要求理解机器学习应用中可能存在的数据偏见、虚假特征等伦理风险及其形成机制。掌握通过分组评估识别模型公平性问题的方法,能够计算并比较不同群体间的准确率、精确率、召回率差异。掌握移除敏感属性、重采样等简单的去偏处理思路,并理解其适用场景与局限。能够从“数据非中立,开发者即责任主体”的角度审视机器学习项目,强化“科技向善”的价值导向。培养对模型输出进行批判性验证的习惯,不将模型结果视为唯一真理。二、实验学时2学时(建议时间分配:讲解15分钟,任务实践75分钟,总结报告10分钟)三、实验前准备软件环境:Python3.8及以上,建议使用JupyterNotebook或VSCode。依赖库:NumPy、Pandas、scikit-learn。安装命令如下:pipinstallnumpypandasscikit-learn知识储备:已学习教材第4.5节(机器学习的潜在风险),理解历史偏见、采样偏见、标签偏见与虚假特征的概念。四、实验任务任务1案例分析与数据集构建(15分钟)回顾教材中“简历筛选AI系统”与“超市盗窃识别系统”两个案例,分析数据偏见与虚假特征的来源。随后构建一个模拟的简历筛选数据集,包含:性别、笔试成绩、面试评分、实习时长、是否录用。在历史偏见模拟中,设定女性录用率系统性低于男性。任务2训练“有偏”模型并分组评估(20分钟)将性别作为特征之一,训练逻辑回归模型;分别计算总体准确率与按性别划分的准确率、精确率、召回率,观察差异。任务3去偏处理实验(20分钟)移除性别特征后重新训练模型,再次进行分组评估,比较总体指标与分组指标的变化。任务4虚假特征识别(10分钟)向数据集中加入一个与录用结果无因果关系的“伪特征”(如应聘者编号的末位数字),训练模型并观察该特征是否被赋予非零权重,讨论其危害。任务5讨论与报告(10分钟)结合实验结果,回答:①数据偏见如何被模型继承并放大?②移除敏感属性能否完全消除偏见?③在风险敏感场景中应如何设置人工复核机制?参考代码以下为完整可运行代码:#实验五:机器学习伦理与公平性评估

importnumpyasnp

importpandasaspd

fromsklearn.model_selectionimporttrain_test_split

fromsklearn.preprocessingimportStandardScaler

fromsklearn.linear_modelimportLogisticRegression

fromsklearn.metricsimportaccuracy_score,precision_score,recall_score

np.random.seed(42)

n=400

#1.构造含历史偏见的数据集

#笔试成绩、面试评分、实习时长是真实能力信号

exam=np.random.normal(75,8,n)

interview=np.random.normal(75,8,n)

internship=np.random.uniform(0,24,n)

gender=np.random.choice(["男","女"],n)

#真实录用概率只取决于能力信号

ability_score=0.5*exam+0.5*interview+0.8*internship

true_prob=1/(1+np.exp(-(ability_score-80)/12))

true_hired=(np.random.random(n)<true_prob).astype(int)

#引入历史偏见:同等能力下女性录用率降低约25%

hired=true_hired.copy()

hired[(gender=="女")&(true_hired==1)]=(

np.random.random(sum((gender=="女")&(true_hired==1)))>0.25

).astype(int)

df=pd.DataFrame({

"性别":gender,

"笔试成绩":exam,

"面试评分":interview,

"实习时长":internship,

"编号末位":np.random.randint(0,10,n),#虚假特征

"是否录用":hired

})

print("数据集概况:")

print(df.head())

print("\n按性别统计录用率:")

print(df.groupby("性别")["是否录用"].mean())

#2.定义评估函数

defevaluate(model,X,y,group):

y_pred=model.predict(X)

print(f"总体准确率:{accuracy_score(y,y_pred):.4f}")

forgingroup.unique():

mask=group==g

ify[mask].sum()>0:

print(f"{g}群体准确率={accuracy_score(y[mask],y_pred[mask]):.4f},"

f"精确率={precision_score(y[mask],y_pred[mask],zero_division=0):.4f},"

f"召回率={recall_score(y[mask],y_pred[mask],zero_division=0):.4f}")

else:

print(f"{g}群体准确率={accuracy_score(y[mask],y_pred[mask]):.4f}")

#3.训练含性别特征的“有偏”模型

X_biased=pd.get_dummies(df.drop("是否录用",axis=1),columns=["性别"],drop_first=True)

y=df["是否录用"]

X_train,X_test,y_train,y_test=train_test_split(

X_biased,y,test_size=0.2,random_state=42

)

num_cols=["笔试成绩","面试评分","实习时长","编号末位"]

scaler=StandardScaler()

X_train[num_cols]=scaler.fit_transform(X_train[num_cols])

X_test[num_cols]=scaler.transform(X_test[num_cols])

model_biased=LogisticRegression(random_state=42,solver='liblinear')

model_biased.fit(X_train,y_train)

print("\n===模型A:含性别特征===")

evaluate(model_biased,X_test,y_test,df.loc[X_test.index,"性别"])

print("特征权重:")

forname,coefinzip(X_biased.columns,model_biased.coef_[0]):

print(f"{name}:{coef:.4f}")

#4.移除性别特征后重新训练

X_fair=X_biased.drop(columns=["性别_男"])

X_train_f,X_test_f,y_train_f,y_test_f=train_test_split(

X_fair,y,test_size=0.2,random_state=42

)

X_train_f[num_cols]=scaler.fit_transform(X_train_f[num_cols])

X_test_f[num_cols]=scaler.transform(X_test_f[num_cols])

model_fair=LogisticRegression(random_state=42,solver='liblinear')

model_fair.fit(X_train_f,y_train_f)

print("\n===模型B:移除性别特征===")

evaluate(model_fair,X_test_f,y_test_f,df.loc[X_test_f.index,"性别"])

print("特征权重:")

forname,coefinzip(X_fair.columns,model_fair.coef_[0]):

print(f"{name}:{coef:.4f}")

#5.讨论问题(写入实验报告)

print("\n思考题:")

print("1.为什么模型A中性别特征的权重不为零?")

print("2.移除性别特征后,男女群体的准确率差异是否缩小?为什么仍可能存在差异?")

print("3.虚假特征“编号末位”的权重说明了什么?")

预期结果(参考)运行代码后,你应看到类似以下的结果:按性别统计录用率:

性别

女0.4577

男0.5930

===模型A:含性别特征===

总体准确率:0.7000

女群体准确率=0.6410,精确率=0.6250,召回率=0.5556

男群体准确率=0.7561,精确率=0.7692,召回率=0.8333

特征权重:

笔试成绩:0.3055

面试评分:0.3627

实习时长:0.4713

编号末位:-0.0215

性别_男:0.4734

===模型B:移除性别特征===

总体准确率:0.6125

女群体准确率=0.5128,精确率=0.4762,召回率=0.5556

男群体准确率=0.7073,精确率=0.7500,召回率=0.7500结果解读:模型A中“性别_男”系数为正且较大,说明模型学习到“男性更容易被录用”的历史偏见;移除性别特征后,总体准确率变化不大,但男女群体的召回率差异仍然存在,因为笔试、面试、实习等特征可能与性别存在相关性(代理特征)。结果记录表请将你的实验结果填入下表:评估项模型A(含性别)模型B(去性别)差异分析总体准确率女性群体准确率男性群体准确率女性群体召回率男性群体召回率性别特征权重//虚假特征权重五、实验重点、难点重点:数据偏见(历史偏见、采样偏见、标签偏见)的模拟与识别;分组公平性评估;去偏策略的实现与效果对比。难点:理解“移除敏感属性并不能保证完全公平”的原因(代理特征的存在);区分相关性与因果性;平衡模型准确性与公平性。六、操作要点构造模拟数据时应明确区分“真实能力信号”与“偏见来源”,便于观察模型如何继承偏见。分组评估时务必使用测试集,避免在训练集上评估导致过拟合的乐观偏差。去偏实验中建议同时记录总体指标与分组指标,避免以牺牲某一群体的利益换取整体性能提升。鼓励学生在实验报告中加入自己的伦理判断,而非仅罗列代码输出。七、注意事项本实验数据集为模拟数据,仅用于教学目的;真实项目中处理个人敏感数据必须遵守相关法律法规与伦

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论