transform
構文
説明
は、transformedData = transform(remover,Tbl)Tbl の予測子データを disparateImpactRemover オブジェクト (remover) の変換に従って変換します。Tbl の予測子変数とセンシティブ属性は、remover の作成に使用した変数と同じ名前でなければなりません。変数の名前を確認するには、remover.PredictorNames および remover.SensitiveAttribute を使用します。
transformedData を返すために使用されたデータ変換の比率を確認するには、remover.RepairFraction を使用します。
は、センシティブ属性 transformedData = transform(remover,X,attribute)attribute を基準に変換されたデータ X を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、名前と値の引数 transformedData = transform(___,Name=Value)RepairFraction を使用してデータ変換の範囲を指定できます。値 1 は完全な変換を示し、値 0 は変換なしを示します。
例
バイナリ分類器に学習させ、モデルを使用してテスト データを分類し、センシティブ属性の各グループについての差異の影響を計算します。差異の影響の値を小さくするために、disparateImpactRemover を使用してからバイナリ分類器に再学習させます。テスト データ セットを変換し、観測値を再分類して、差異の影響の値を計算します。
学習データ adultdata およびテスト データ adulttest を含む、標本データ census1994 を読み込みます。このデータ セットは、個人の年収が $50,000 を超えるかどうかを予測するために使用できる、米国国勢調査局の人口統計情報から構成されています。学習データ セットの最初の数行をプレビューします。
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 人の人口統計情報が格納されています。最後の列 salary は個人の年収が $50,000 以下か、$50,000 を超えるかどうかを示します。
adultdata と adulttest から欠損値を含む観測値を削除します。
adultdata = rmmissing(adultdata); adulttest = rmmissing(adulttest);
モデルの学習に使用する連続数値予測子を指定します。
predictors = ["age","education_num","capital_gain","capital_loss", ... "hours_per_week"];
学習セット adultdata を使用してアンサンブル分類器に学習させます。応答変数として salary、観測値の重みとして fnlwgt を指定します。学習セットが不均衡であるため、RUSBoost アルゴリズムを使用します。モデルに学習させた後、テスト セット adulttest の観測値の給与 (クラス ラベル) を予測します。
rng("default") % For reproducibility mdl = fitcensemble(adultdata,"salary",Weights="fnlwgt", ... PredictorNames=predictors,Method="RUSBoost"); labels = predict(mdl,adulttest);
センシティブ属性 race を使用して学習セットの予測子を変換します。
[remover,newadultdata] = disparateImpactRemover(adultdata, ... "race",PredictorNames=predictors); remover
remover =
disparateImpactRemover with properties:
RepairFraction: 1
PredictorNames: {'age' 'education_num' 'capital_gain' 'capital_loss' 'hours_per_week'}
SensitiveAttribute: 'race'
remover は disparateImpactRemover オブジェクトであり、変数 remover.SensitiveAttribute を基準とする予測子 remover.PredictorNames の変換が格納されます。
remover に格納された同じ変換をテスト セットの予測子に適用します。メモ: 学習データ セットとテスト データ セットは、どちらも分類器に渡す前に変換する必要があります。
newadulttest = transform(remover,adulttest, ...
PredictorNames=predictors);mdl と同じタイプのアンサンブル分類器に今度は変換後の予測子データを使用して学習させます。前と同じように、テスト セット adulttest の観測値の給与 (クラス ラベル) を予測します。
rng("default") % For reproducibility newMdl = fitcensemble(newadultdata,"salary",Weights="fnlwgt", ... PredictorNames=predictors,Method="RUSBoost"); newLabels = predict(newMdl,newadulttest);
元のモデル (mdl) による予測と変換後のデータで学習させたモデル (newMdl) による予測について、差異の影響の値を比較します。差異の影響の値は、センシティブ属性のグループごとに、そのグループの陽性クラスの値をもつ予測の比率 () を参照グループの陽性クラスの値をもつ予測の比率 () で除算したものです。理想的な分類器による予測では、各グループの が に近くなります (つまり、差異の影響の値が 1 に近くなります)。
fairnessMetrics を使用して、mdl による予測と newMdl による予測の差異の影響の値を計算します。観測値の重みを含めます。オブジェクト関数 report を使用して、metricsResults オブジェクトに格納された差異の影響などのバイアス メトリクスを表示できます。
metricsResults = fairnessMetrics(adulttest,"salary", ... SensitiveAttributeNames="race",Predictions=[labels,newLabels], ... Weights="fnlwgt",ModelNames=["Original Model","New Model"]); metricsResults.PositiveClass
ans = categorical
>50K
metricsResults.ReferenceGroup
ans = 'White'
report(metricsResults,BiasMetrics="DisparateImpact")ans=5×5 table
Metrics SensitiveAttributeNames Groups Original Model New Model
_______________ _______________________ __________________ ______________ _________
DisparateImpact race Amer-Indian-Eskimo 0.41702 0.92804
DisparateImpact race Asian-Pac-Islander 1.719 0.9697
DisparateImpact race Black 0.60571 0.66629
DisparateImpact race Other 0.66958 0.86039
DisparateImpact race White 1 1
mdl による予測について、いくつかの差異の影響の値が業界標準の 0.8 を下回っており、1.25 を超える値も 1 つあります。これらの値は、陽性クラス >50K とセンシティブ属性 race を基準とする予測のバイアスを示しています。
mdl による予測の差異の影響の値に比べ、newMdl による予測の差異の影響の値は 1 に近くなっています。0.8 を下回る値もまだ 1 つあります。
オブジェクト関数 plot で返される棒グラフを使用して、差異の影響の値を視覚的に比較します。
plot(metricsResults,"DisparateImpact")
関数 disparateImpactRemover により、差異の影響のメトリクスに関しては、テスト セットに対するモデル予測が改善しているように見えます。
変換後の予測子がモデル予測の精度にマイナスの影響を与えていないかどうかをチェックします。2 つのモデル mdl と newMdl について、テスト セットの予測の精度を計算します。
accuracy = 1-loss(mdl,adulttest,"salary")accuracy = 0.8024
newAccuracy = 1-loss(newMdl,newadulttest,"salary")newAccuracy = 0.7955
テスト セットの精度について、変換後の予測子を使用して学習させたモデル (newMdl) でも元の予測子で学習させたモデル (mdl) と同等の精度になっています。
センシティブ属性を基準とする連続数値予測子の変換の範囲を指定します。関数 disparateImpactRemover の名前と値の引数 RepairFraction を使用します。
100 人の患者の医療情報を含む patients データ セットを読み込みます。変数 Gender と Smoker をカテゴリカル変数に変換します。1 と 0 の代わりに、Smoker と Nonsmoker というわかりやすいカテゴリ名を指定します。
load patients Gender = categorical(Gender); Smoker = categorical(Smoker,logical([1 0]), ... ["Smoker","Nonsmoker"]);
連続予測子 Diastolic と Systolic を含む行列を作成します。
X = [Diastolic,Systolic];
センシティブ属性 Gender の 2 つのグループの観測値を調べます。
femaleIdx = Gender=="Female"; maleIdx = Gender=="Male"; femaleX = X(femaleIdx,:); maleX = X(maleIdx,:);
センシティブ属性 Gender を使用して X の予測子 Diastolic と Systolic を変換します。修復率を 0.5 と指定します。値 1 は完全な変換を示し、値 0 は変換なしを示すことに注意してください。
[remover,newX50] = disparateImpactRemover(X,Gender, ...
RepairFraction=0.5);
femaleNewX50 = newX50(femaleIdx,:);
maleNewX50 = newX50(maleIdx,:);remover オブジェクトのオブジェクト関数 transform を使用して、予測子変数を完全に変換します。
newX100 = transform(remover,X,Gender,RepairFraction=1); femaleNewX100 = newX100(femaleIdx,:); maleNewX100 = newX100(maleIdx,:);
X の元の値、newX50 の部分的に修復した値、および newX100 の完全に変換した値での Diastolic の分布の違いを可視化します。関数 ksdensity を使用して、確率密度推定を計算して表示します。
t = tiledlayout(1,3); title(t,"Diastolic Distributions with Different " + ... "Repair Fractions") xlabel(t,"Diastolic") ylabel(t,"Density Estimate") nexttile ksdensity(femaleX(:,1)) hold on ksdensity(maleX(:,1)) hold off title("Fraction=0") ylim([0,0.07]) nexttile ksdensity(femaleNewX50{:,1}) hold on ksdensity(maleNewX50{:,1}) hold off title("Fraction=0.5") ylim([0,0.07]) nexttile ksdensity(femaleNewX100{:,1}) hold on ksdensity(maleNewX100{:,1}) hold off title("Fraction=1") ylim([0,0.07]) legend(["Female","Male"],Location="eastoutside")

関数 disparateImpactRemover によって予測子変数 Diastolic の値が変換され、修復率が大きくなるほど、Female の値の分布と Male の値の分布がより似たような分布になっています。
入力引数
予測子データの変換器。disparateImpactRemover オブジェクトとして指定します。新しいデータ セットについて、オブジェクト関数 transform は remover.SensitiveAttribute で指定されたセンシティブ属性を基準に予測子変数 remover.PredictorNames を変換します。
remover.SensitiveAttribute が変数の名前以外の変数の場合、transform での新しいデータの変換時に、格納されているセンシティブ属性の値が使用されないことに注意してください。代わりに attribute の値が関数で使用されます。
データ セット。table として指定します。Tbl の各行は 1 つの観測値に対応し、各列は 1 つの変数に対応します。disparateImpactRemover オブジェクトの作成に table を使用する場合は、オブジェクト関数 transform を使用するときに table を使用する必要があります。必要なすべての予測子変数とセンシティブ属性を table に含める必要があります。応答変数などの追加の変数も table に含めることができます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
データ型: table
予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。disparateImpactRemover オブジェクトの作成に行列を使用する場合は、オブジェクト関数 transform を使用するときに行列を使用する必要があります。X と attribute の行数は同じでなければなりません。
データ型: single | double
センシティブ属性。数値列ベクトル、logical 列ベクトル、文字配列、string 配列、文字ベクトルの cell 配列、または categorical 列ベクトルとして指定します。
attributeのデータ型はremover.SensitiveAttributeのデータ型と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。attributeの各クラスはremover.SensitiveAttributeのクラスのサブセットでなければなりません。attributeが配列の場合、配列の各行がセンシティブ属性のグループに対応していなければなりません。attributeとXの行数は同じでなければなりません。
データ型: single | double | logical | char | string | cell | categorical
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
例: transform(remover,Tbl,RepairFraction=1,PredictorNames=["Diastolic","Systolic"]) は、table Tbl 内の変数 Diastolic と Systolic を remover に格納されている変換を使用して完全に変換するように指定します。
変換する予測子変数の名前。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。予測子変数の名前は、remover.PredictorNames に格納されている名前のサブセットでなければなりません。
例: PredictorNames=["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string | cell
データ変換の比率。範囲 [0,1] の数値スカラーとして指定します。値 1 は完全な変換を示し、値 0 は変換なしを示します。
修復率が大きいほど、モデル予測の精度が低下する可能性があります。
例: RepairFraction=0.75
データ型: single | double
出力引数
バージョン履歴
R2022b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)