loss
説明
は、L
= loss(thresholder
,Tbl
)fairnessThresholder
オブジェクト thresholder
と table データ Tbl
を使用して分類損失 (thresholder.LossFun
で指定) を計算します。
は、L
= loss(thresholder
,X
,attribute
,Y
)fairnessThresholder
オブジェクト thresholder
、行列データ X
、attribute
で指定されたセンシティブ属性、および真のクラス ラベル Y
を使用して分類損失 (thresholder.LossFun
で指定) を計算します。
例
公平性についてのスコアのしきい値の調整
バイナリ分類用の木アンサンブルに学習させ、センシティブ属性の各グループについての差異の影響を計算します。非参照グループの差異の影響の値を小さくするために、観測値を分類するスコアのしきい値を調整します。
データ census1994
を読み込みます。これには、データ セット adultdata
とテスト データ セット adulttest
が含まれています。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するために使用できる、米国国勢調査局の人口統計情報から構成されています。adultdata
の最初の数行をプレビューします。
load census1994
head(adultdata)
age workClass fnlwgt education education_num marital_status occupation relationship race sex capital_gain capital_loss hours_per_week native_country salary ___ ________________ __________ _________ _____________ _____________________ _________________ _____________ _____ ______ ____________ ____________ ______________ ______________ ______ 39 State-gov 77516 Bachelors 13 Never-married Adm-clerical Not-in-family White Male 2174 0 40 United-States <=50K 50 Self-emp-not-inc 83311 Bachelors 13 Married-civ-spouse Exec-managerial Husband White Male 0 0 13 United-States <=50K 38 Private 2.1565e+05 HS-grad 9 Divorced Handlers-cleaners Not-in-family White Male 0 0 40 United-States <=50K 53 Private 2.3472e+05 11th 7 Married-civ-spouse Handlers-cleaners Husband Black Male 0 0 40 United-States <=50K 28 Private 3.3841e+05 Bachelors 13 Married-civ-spouse Prof-specialty Wife Black Female 0 0 40 Cuba <=50K 37 Private 2.8458e+05 Masters 14 Married-civ-spouse Exec-managerial Wife White Female 0 0 40 United-States <=50K 49 Private 1.6019e+05 9th 5 Married-spouse-absent Other-service Not-in-family Black Female 0 0 16 Jamaica <=50K 52 Self-emp-not-inc 2.0964e+05 HS-grad 9 Married-civ-spouse Exec-managerial Husband White Male 0 0 45 United-States >50K
各行には、成人 1 人の人口統計情報が格納されています。age
、marital_status
、relationship
、race
、sex
などのセンシティブ属性の情報が含まれます。3 列目の flnwgt
に観測値の重みが格納されており、最後の列 salary
は個人の年収が $50,000 以下 (<=50K
) か $50,000 を超える (>50K
) かを示します。
欠損値を含む観測値を削除します。
adultdata = rmmissing(adultdata); adulttest = rmmissing(adulttest);
adultdata
を学習セットと検証セットに分割します。観測値の 60% を学習セット trainingData
に使用し、観測値の 40% を検証セット validationData
に使用します。
rng("default") % For reproducibility c = cvpartition(adultdata.salary,"Holdout",0.4); trainingIdx = training(c); validationIdx = test(c); trainingData = adultdata(trainingIdx,:); validationData = adultdata(validationIdx,:);
学習データ セット trainingData
を使用して木のブースティング アンサンブルに学習させます。table adultdata
内の変数名を使用して、応答変数、予測子変数、および観測値の重みを指定します。ランダム アンダーサンプリング ブースティングをアンサンブル集約法として使用します。
predictors = ["capital_gain","capital_loss","education", ... "education_num","hours_per_week","occupation","workClass"]; Mdl = fitcensemble(trainingData,"salary", ... PredictorNames=predictors, ... Weights="fnlwgt",Method="RUSBoost");
テスト データ セット adulttest
内の観測値について、給与の値を予測し、分類誤差を計算します。
labels = predict(Mdl,adulttest); L = loss(Mdl,adulttest)
L = 0.2080
テスト セットの観測値の約 80% について、給与の分類がモデルで正確に予測されています。
テスト セットのモデル予測を使用して、センシティブ属性 sex
についての公平性メトリクスを計算します。特に、sex
の各グループについての差異の影響を調べます。fairnessMetrics
のオブジェクト関数 report
と plot
を使用して結果を表示します。
evaluator = fairnessMetrics(adulttest,"salary", ... SensitiveAttributeNames="sex",Predictions=labels, ... ModelNames="Ensemble",Weights="fnlwgt"); evaluator.PositiveClass
ans = categorical
>50K
evaluator.ReferenceGroup
ans = 'Male'
report(evaluator,BiasMetrics="DisparateImpact")
ans=2×4 table
ModelNames SensitiveAttributeNames Groups DisparateImpact
__________ _______________________ ______ _______________
Ensemble sex Female 0.73792
Ensemble sex Male 1
plot(evaluator,"DisparateImpact")
差異の影響の値は、非参照グループ (Female
) について、そのグループの陽性クラスの値 (>50K
) をもつ予測の比率を参照グループ (Male
) の陽性クラスの値をもつ予測の比率で除算したものです。差異の影響の値は 1 に近くなるのが理想的です。
非参照グループの差異の影響の値が改善するか試すために、関数 fairnessThresholder
を使用してモデル予測を調整できます。この関数は、検証データを使用して、公平性の範囲を満たしながら精度が最大になる最適なスコアのしきい値を探します。最適なしきい値を下回る臨界領域の観測値については、参照グループと非参照グループで公平性の制約が保たれるように関数でラベルが変更されます。既定では、この関数は非参照グループの差異の影響の値が範囲 [0.8,1.25] になるスコアのしきい値を見つけようとします。
fairnessMdl = fairnessThresholder(Mdl,validationData,"sex","salary")
fairnessMdl = fairnessThresholder with properties: Learner: [1x1 classreg.learning.classif.CompactClassificationEnsemble] SensitiveAttribute: 'sex' ReferenceGroups: Male ResponseName: 'salary' PositiveClass: >50K ScoreThreshold: 1.6749 BiasMetric: 'DisparateImpact' BiasMetricValue: 0.9702 BiasMetricRange: [0.8000 1.2500] ValidationLoss: 0.2017
fairnessMdl
は fairnessThresholder
モデル オブジェクトです。アンサンブル モデル Mdl
の関数 predict
が返すスコアは事後確率ではないことに注意してください。スコアの範囲は であり、各観測値の最大スコアは 0 より大きくなります。最大スコアが新しいスコアのしきい値 (fairnessMdl.ScoreThreshold
) より小さい観測値について、fairnessMdl
オブジェクトの関数 predict
で予測が調整されます。非参照グループの観測値の場合、関数はその観測値を陽性クラスに予測します。参照グループの観測値の場合、関数はその観測値を陰性クラスに予測します。これらの調整の結果として予測ラベルが常に変わるとは限りません。
新しいスコアのしきい値を使用してテスト セットの予測を調整し、分類誤差を計算します。
fairnessLabels = predict(fairnessMdl,adulttest); fairnessLoss = loss(fairnessMdl,adulttest)
fairnessLoss = 0.2064
新しい分類誤差は元の分類誤差と同程度です。
Mdl
を使用して計算した元の予測と fairnessMdl
を使用して計算した調整後の予測の 2 セットのテストの予測で、それらの差異の影響の値を比較します。
newEvaluator = fairnessMetrics(adulttest,"salary", ... SensitiveAttributeNames="sex",Predictions=[labels,fairnessLabels], ... ModelNames=["Original","Adjusted"],Weights="fnlwgt"); newEvaluator.PositiveClass
ans = categorical
>50K
newEvaluator.ReferenceGroup
ans = 'Male'
report(newEvaluator,BiasMetrics="DisparateImpact")
ans=2×5 table
Metrics SensitiveAttributeNames Groups Original Adjusted
_______________ _______________________ ______ ________ ________
DisparateImpact sex Female 0.73792 1.0048
DisparateImpact sex Male 1 1
plot(newEvaluator,"di")
調整後の予測を使用した場合の方が、非参照グループ (Female
) の差異の影響の値が 1 に近くなっています。
入力引数
thresholder
— 公平性の分類モデル
fairnessThresholder
オブジェクト
公平性の分類モデル。fairnessThresholder
オブジェクトとして指定します。オブジェクトの ScoreThreshold
プロパティは空であってはなりません。
Tbl
— データ セット
テーブル
データ セット。table として指定します。Tbl
の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。fairnessThresholder
オブジェクトの作成に table を使用する場合は、関数 loss
を使用するときに table を使用する必要があります。必要なすべての予測子変数、センシティブ属性、および応答変数を table に含める必要があります。追加の変数も table に含めることができます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
データ型: table
attribute
— センシティブ属性
数値列ベクトル | logical 列ベクトル | 文字配列 | string 配列 | 文字ベクトルの cell 配列 | categorical 列ベクトル
Y
— クラス ラベル
数値列ベクトル | logical 列ベクトル | 文字配列 | string 配列 | 文字ベクトルの cell 配列 | categorical 列ベクトル
クラス ラベル。数値列ベクトル、logical 列ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical 列ベクトルとして指定します。
Y
が文字配列の場合、配列の各行がクラス ラベルに対応していなければなりません。Y
のデータ型はthresholder
の作成に使用される応答変数のデータ型と同じでなければなりません。thresholder.Learner
が分類モデル オブジェクトの場合、Y
の各クラスはthresholder.Learner.ClassNames
のクラスのサブセットでなければなりません。
データ型: single
| double
| logical
| char
| string
| cell
| categorical
出力引数
L
— 分類損失
数値スカラー
分類損失。数値スカラーとして返されます。関数 loss
は、thresholder
の作成時に使用される LossFun
の値で指定された分類損失を計算します。thresholder.ScoreThreshold
の値を使用して調整されたデータ セットの予測が関数で使用されます。詳細については、棄却オプションベース分類を参照してください。
バージョン履歴
R2023a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)