fscchi2
カイ二乗検定を使用した分類に向けた一変量の特徴量ランク付け
構文
説明
は、カイ二乗検定を使用して特徴量 (予測子) をランク付けします。table idx = fscchi2(Tbl,ResponseVarName)Tbl には予測子変数と応答変数が含まれていて、ResponseVarName は Tbl 内の応答変数の名前です。関数は idx を返します。これには予測子の重要度順に並べ替えられた予測子のインデックスが含まれます。つまり、idx(1) は最も重要な予測子のインデックスです。idx を使用して、分類問題用の重要な予測子を選択できます。
例
数値行列内の予測子をランク付けし、予測子の重要度スコアの棒グラフを作成します。
標本データを読み込みます。
load ionosphereionosphere には、予測子変数 (X) と応答変数 (Y) が含まれます。
カイ二乗検定を使用して予測子をランク付けします。
[idx,scores] = fscchi2(X,Y);
scores の値は、p 値の負の対数です。p 値が eps(0) よりも小さい場合、対応するスコア値は Inf です。棒グラフを作成する前に、scores が Inf 値を含むかどうかを判断します。
find(isinf(scores))
ans = 1×0 empty double row vector
scores に Inf 値は含まれていません。scores が Inf 値を含む場合、可視化のために、棒グラフを作成する前に大きな数値で Inf を置き換えることができます。詳細については、table 内の予測子のランク付けを参照してください。
予測子の重要度スコアの棒グラフを作成します。
bar(scores(idx)) xlabel('Predictor rank') ylabel('Predictor importance score')

上位 5 つの最も重要な予測子を選択します。X におけるこれらの予測子の列を求めます。
idx(1:5)
ans = 1×5
5 7 3 8 6
X の 5 列目が、Y の最も重要な予測子です。
table 内の予測子をランク付けし、予測子の重要度スコアの棒グラフを作成します。
データが table 内にあり、fscchi2 が table 内の変数のサブセットをランク付けする場合、関数はサブセットのみを使用して変数にインデックスを作成します。そのため、ランク付けしない予測子を table の最後に移動させることをお勧めします。応答変数、および観測値の重みベクトルも同様に移動させます。すると、出力引数のインデックスは table のインデックスと一致します。
census1994 データ セットを読み込みます。
load census1994census1994 内の table adultdata には、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データが含まれています。table の最初の 3 行を表示します。
head(adultdata,3)
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
table adultdata では、3 番目の列 fnlwgt はサンプルの重みで、最後の列 salary は応答変数です。関数 movevars を使用して fnlwgt を salary の左側に移動します。
adultdata = movevars(adultdata,'fnlwgt','before','salary'); head(adultdata,3)
age workClass education education_num marital_status occupation relationship race sex capital_gain capital_loss hours_per_week native_country fnlwgt salary
___ ________________ _________ _____________ __________________ _________________ _____________ _____ ____ ____________ ____________ ______________ ______________ __________ ______
39 State-gov Bachelors 13 Never-married Adm-clerical Not-in-family White Male 2174 0 40 United-States 77516 <=50K
50 Self-emp-not-inc Bachelors 13 Married-civ-spouse Exec-managerial Husband White Male 0 0 13 United-States 83311 <=50K
38 Private HS-grad 9 Divorced Handlers-cleaners Not-in-family White Male 0 0 40 United-States 2.1565e+05 <=50K
adultdata の予測子をランク付けします。列 salary を応答変数として指定し、列 fnlwgt を観測値の重みとして指定します。
[idx,scores] = fscchi2(adultdata,'salary','Weights','fnlwgt');
scores の値は、p 値の負の対数です。p 値が eps(0) よりも小さい場合、対応するスコア値は Inf です。棒グラフを作成する前に、scores が Inf 値を含むかどうかを判断します。
idxInf = find(isinf(scores))
idxInf = 1×8
1 3 4 5 6 7 10 12
scores には 8 つの Inf 値が含まれます。
予測子の重要度スコアの棒グラフを作成します。予測子の名前を x 軸の目盛りラベルに使用します。
figure bar(scores(idx)) xlabel('Predictor rank') ylabel('Predictor importance score') xticklabels(strrep(adultdata.Properties.VariableNames(idx),'_','\_')) xtickangle(45)
関数 bar が Inf 値に関するバーをプロットすることはありません。Inf 値について、最も大きい有限のスコアと同じ長さのバーをプロットします。
hold on bar(scores(idx(length(idxInf)+1))*ones(length(idxInf),1)) legend('Finite Scores','Inf Scores') hold off

棒グラフでは、異なる色を使用して有限のスコアと Inf スコアを表示します。
入力引数
標本データ。table として指定します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、Tbl に応答変数用および観測値の重み用の追加列を含めることができます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列にすることができます。応答変数が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
Tblに応答変数が含まれている場合にTbl内の他の変数をすべて予測子として使用するには、ResponseVarNameを使用して応答変数を指定します。Tblに観測値の重みも含まれている場合、Weightsを使用して重みを指定できます。Tblに応答変数が含まれている場合にTbl内の他の変数のサブセットのみを予測子として使用するには、formulaを使用して変数のサブセットを指定します。Tblに応答変数が含まれていない場合は、Yを使用して応答変数を指定します。応答変数とTblの行数は同じでなければなりません。
fscchi2 が Tbl 内の変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。名前と値のペアの引数 'CategoricalPredictors' と出力引数 idx 内の値は、関数がランク付けを行わない予測子はカウントしません。
fscchi2 は、応答変数の Tbl に含まれている NaN、'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> の値を欠損値と見なします。fscchi2 は、応答変数に欠損値がある観測値を使用しません。
データ型: table
応答変数名。Tbl 内の変数の名前を含む文字ベクトルまたは string スカラーを指定します。
たとえば、応答変数が Tbl の列 Y (Tbl.Y) である場合、ResponseVarName を "Y" として指定します。
データ型: char | string
応答変数および予測子変数サブセットの説明モデル。"Y ~ x1 + x2 + x3" という形式の文字ベクトルまたは string スカラーとして指定します。この形式では、Y は応答変数を、x1、x2 および x3 は予測子変数を表します。
予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、fscchi2 は formula に現れない Tbl 内の変数をランク付けしません。
式の変数名は Tbl の変数名 (Tbl.Properties.VariableNames) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname を使用して Tbl の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName を使用してそれらを変換できます。
データ型: char | string
応答変数。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。Y の各行は、X の対応する行のラベルを表します。
fscchi2 は Y に含まれている NaN、'' (空の文字ベクトル)、"" (空の string)、<missing> および <undefined> 値を欠損値と見なします。fscchi2 は、Y に対し欠損値がある観測値を使用しません。
データ型: single | double | categorical | logical | char | string | cell
予測子データ。数値行列として指定します。X の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
データ型: single | double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'NumBins',20,'UseMissing',true は、ビンの数を 20 として設定し、ランク付けのために予測子内の欠損値を使用するように指定します。
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
| 値 | 説明 |
|---|---|
| 正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
| logical ベクトル |
|
| 文字行列 | 行列の各行は予測子変数の名前です。名前は Tbl の名前に一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
| 文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は Tbl の名前に一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データが table (Tbl) の場合、fscchi2 は、その変数が logical ベクトル、順序付けのない categorical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X) である場合、fscchi2 はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors を使用してそれらを指定します。
例: "CategoricalPredictors","all"
例: CategoricalPredictors=[1 5 6 8]
データ型: single | double | logical | char | string | cell
ランク付けに使用するクラスの名前。'ClassNames' と categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。ClassNames のデータ型は Y または Tbl 内の応答変数と同じでなければなりません。
ClassNames が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
'ClassNames' の使用目的は次のとおりです。
クラスの順序に対応する
Priorの次元の順序を指定する。ランク付け用にクラスのサブセットを選択する。たとえば、
Yに含まれているすべての異なるクラス名の集合が{'a','b','c'}であるとします。クラス'a'および'c'のみの観測値を使用して予測子をランク付けするには、'ClassNames',{'a','c'}を指定します。
'ClassNames' の既定値は、Y または Tbl 内の応答変数に含まれているすべての異なるクラス名の集合です。応答変数に順序がある場合、既定値 'ClassNames' には数学的順序が設定されています。それ以外の場合、既定値にはアルファベット順が設定されています。
例: 'ClassNames',{'b','g'}
データ型: categorical | char | string | logical | single | double | cell
連続予測子をビン化するためのビンの数。'NumBins' と正の整数スカラーから構成されるコンマ区切りのペアとして指定します。
例: 'NumBins',50
データ型: single | double
各クラスの事前確率。次のいずれかとして指定します。
文字ベクトルまたは string スカラー。
ベクトル (クラスごとに 1 つのスカラー値)。
'Prior'の対応する要素についてクラスの順序を指定するには、名前と値の引数'ClassNames'を設定します。次の 2 つのフィールドがある構造体
S。S.ClassNamesには、YまたはTblの応答変数と同じ型の変数のクラス名が格納されます。S.ClassProbsには、対応する確率のベクトルが格納されます。
fscchi2 は、合計がクラスの事前確率の値になるように各クラスの重み ('Weights') を正規化します。
例: 'Prior','uniform'
データ型: char | string | single | double | struct
予測子内の欠損値を使用するか破棄するかを示すインジケーター。'UseMissing' と、ランク付けのために予測子内の欠損値を使用する (true) または破棄する (false) のいずれかから構成されるコンマ区切りのペアとして指定します。
fscchi2 は、NaN、'' (空の文字ベクトル)、"" (空の string)、<missing>、および <undefined> の値を欠損値と見なします。
'UseMissing',true を指定した場合、fscchi2 はランク付けに欠損値を使用します。カテゴリカル変数の場合、fscchi2 は欠損値を追加のカテゴリとして扱います。連続変数の場合、fscchi2 はビン化するために別個のビン内に NaN 値を配置します。
'UseMissing',false を指定した場合、fscchi2 はランク付けに欠損値を使用しません。fscchi2 は各予測子について個別に重要度スコアを計算するため、関数は行内の値が部分的に欠損している場合も行全体を破棄することはありません。各変数について、fscchi2 は欠損していないすべての値を使用します。
例: 'UseMissing',true
データ型: logical
観測値の重み。'Weights' とスカラー値のベクトルまたは Tbl 内の変数の名前から構成されるコンマ区切りのペアとして指定します。関数は、X または Tbl の各行の観測値に、Weights の対応する値で重みを付けます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。
入力データを table Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトルが Tbl の列 W (Tbl.W) である場合、'Weights,'W' を指定します。
fscchi2 は、合計がクラスの事前確率の値になるように各クラスの重みを正規化します。Inf の重みはサポートされません。
データ型: single | double | char | string
出力引数
予測子の重要度順に並べ替えられた X または Tbl の予測子のインデックス。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。
Tbl に応答変数が含まれている場合、関数は応答変数を除外して予測子にインデックスを付けます。たとえば、Tbl に列が 10 個あり、Tbl の 2 列目を応答変数として指定するとします。idx(3) が 5 である場合、3 番目に重要な予測子は Tbl の 6 列目です。
fscchi2 が Tbl 内の変数のサブセットを予測子として使用する場合、関数はサブセットのみを使用して予測子にインデックスを作成します。たとえば、Tbl に列が 10 個あり、formula を使用して Tbl の最後の 5 列を予測子変数として指定するとします。idx(3) が 5 である場合、3 番目に重要な予測子は Tbl の 10 列目 (サブセットの 5 番目の予測子) です。
予測子スコア。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。
大きなスコア値は、対応する予測子が重要であることを示します。
たとえば、Tbl に列が 10 個あり、formula を使用して Tbl の最後の 5 列を予測子変数として指定するとします。この場合、score(3) には Tbl 内の 8 番目の列のスコア値が含まれます。これは、サブセットの 3 番目の予測子です。
アルゴリズム
バージョン履歴
R2020a で導入
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)