《人工智能導論》實驗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

提交評論