fscchi2
構文
説明
は、カイ二乗検定を使用して特徴量 (予測子) をランク付けします。テーブル idx
= fscchi2(Tbl
,ResponseVarName
)Tbl
には予測子変数と応答変数が含まれていて、ResponseVarName
は Tbl
内の応答変数の名前です。関数は idx
を返します。これには予測子の重要度順に並べ替えられた予測子のインデックスが含まれます。つまり、idx(1)
は最も重要な予測子のインデックスです。idx
を使用して、分類問題用の重要な予測子を選択できます。
例
行列内の予測子のランク付け
数値行列内の予測子をランク付けし、予測子の重要度スコアの棒グラフを作成します。
標本データを読み込みます。
load ionosphere
ionosphere
には、予測子変数 (X
) と応答変数 (Y
) が含まれます。
カイ二乗検定を使用して予測子をランク付けします。
[idx,scores] = fscchi2(X,Y);
scores
の値は、p 値の負の対数です。p 値が eps(0)
よりも小さい場合、対応するスコア値は Inf
です。棒グラフを作成する前に、scores
が Inf
値を含むかどうかを判断します。
find(isinf(scores))
ans = 1x0 empty double row vector
scores
に Inf
値は含まれていません。scores
が Inf
値を含む場合、可視化のために、棒グラフを作成する前に大きな数値で Inf
を置き換えることができます。詳細については、テーブル内の予測子のランク付けを参照してください。
予測子の重要度スコアの棒グラフを作成します。
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
の最も重要な予測子です。
テーブル内の予測子のランク付け
テーブル内の予測子をランク付けし、予測子の重要度スコアの棒グラフを作成します。
データがテーブル内にあり、fscchi2
がテーブル内の変数のサブセットをランク付けする場合、関数はサブセットのみを使用して変数にインデックスを作成します。そのため、ランク付けしない予測子をテーブルの最後に移動させることをお勧めします。応答変数、および観測値の重みベクトルも同様に移動させます。すると、出力引数のインデックスはテーブルのインデックスと一致します。
census1994 データ セットを読み込みます。
load census1994
census1994
内のテーブル adultdata
には、個人の年収が $50,000 を超えるかどうかを予測するための、米国勢調査局の人口統計データが含まれています。テーブルの最初の 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
テーブル 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 スコアを表示します。
入力引数
Tbl
— 標本データ
テーブル
標本データ。テーブルとして指定します。文字ベクトルの 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
ResponseVarName
— 応答変数名
Tbl
内の変数の名前を含む文字ベクトルまたは string スカラー
応答変数名。Tbl
内の変数の名前を含む文字ベクトルまたは string スカラーを指定します。
たとえば、応答変数が Tbl
の列 Y
(Tbl.Y
) である場合、ResponseVarName
を "Y"
として指定します。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | 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
Y
— 応答変数
数値ベクトル | categorical ベクトル | logical ベクトル | 文字配列 | string 配列 | 文字ベクトルの cell 配列
応答変数。数値ベクトル、categorical ベクトル、logical ベクトル、文字配列、string 配列、または文字ベクトルの cell 配列として指定します。Y
の各行は、X
の対応する行のラベルを表します。
fscchi2
は Y
に含まれている NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
および <undefined>
値を欠損値と見なします。fscchi2
は、Y
に対し欠損値がある観測値を使用しません。
データ型: single
| double
| categorical
| logical
| char
| string
| cell
X
— 予測子データ
数値行列
予測子データ。数値行列として指定します。X
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。
データ型: single
| double
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'NumBins',20,'UseMissing',true
は、ビンの数を 20 として設定し、ランク付けのために予測子内の欠損値を使用するように指定します。
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | "all"
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 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'
と 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
— 連続予測子をビン化するためのビンの数
10 (既定値) | 正の整数スカラー
連続予測子をビン化するためのビンの数。'NumBins'
と正の整数スカラーから構成されるコンマ区切りのペアとして指定します。
例: 'NumBins',50
データ型: single
| double
Prior
— 事前確率
'empirical'
(既定値) | 'uniform'
| スカラー値のベクトル | 構造体
各クラスの事前確率。次のいずれかとして指定します。
文字ベクトルまたは string スカラー。
ベクトル (クラスごとに 1 つのスカラー値)。
'Prior'
の対応する要素についてクラスの順序を指定するには、名前と値の引数'ClassNames'
を設定します。次の 2 つのフィールドがある構造体
S
。S.ClassNames
には、Y
またはTbl
の応答変数と同じ型の変数のクラス名が格納されます。S.ClassProbs
には、対応する確率のベクトルが格納されます。
fscchi2
は、合計がクラスの事前確率の値になるように各クラスの重み ('Weights'
) を正規化します。
例: 'Prior','uniform'
データ型: char
| string
| single
| double
| struct
UseMissing
— 予測子内の欠損値を使用するか破棄するかを示すインジケーター
false
(既定値) | true
予測子内の欠損値を使用するか破棄するかを示すインジケーター。'UseMissing'
と、ランク付けのために予測子内の欠損値を使用する (true
) または破棄する (false
) のいずれかから構成されるコンマ区切りのペアとして指定します。
fscchi2
は、NaN
、''
(空の文字ベクトル)、""
(空の string)、<missing>
、および <undefined>
の値を欠損値と見なします。
'UseMissing',true
を指定した場合、fscchi2
はランク付けに欠損値を使用します。カテゴリカル変数の場合、fscchi2
は欠損値を追加のカテゴリとして扱います。連続変数の場合、fscchi2
はビン化するために別個のビン内に NaN
値を配置します。
'UseMissing',false
を指定した場合、fscchi2
はランク付けに欠損値を使用しません。fscchi2
は各予測子について個別に重要度スコアを計算するため、関数は行内の値が部分的に欠損している場合も行全体を破棄することはありません。各変数について、fscchi2
は欠損していないすべての値を使用します。
例: 'UseMissing',true
データ型: logical
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | スカラー値のベクトル | Tbl
内の変数の名前
観測値の重み。'Weights'
とスカラー値のベクトルまたは Tbl
内の変数の名前から構成されるコンマ区切りのペアとして指定します。関数は、X
または Tbl
の各行の観測値に、Weights
の対応する値で重みを付けます。Weights
のサイズは、X
または Tbl
の行数と同じでなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトルが Tbl
の列 W
(Tbl.W
) である場合、'Weights,'W'
を指定します。
fscchi2
は、合計がクラスの事前確率の値になるように各クラスの重みを正規化します。
データ型: single
| double
| char
| string
出力引数
idx
— 予測子の重要度順に並べ替えられた予測子のインデックス
数値ベクトル
scores
— 予測子スコア
数値ベクトル
予測子スコア。1 行 r 列の数値ベクトルとして返されます。r はランク付けされた予測子の数です。
大きなスコア値は、対応する予測子が重要であることを示します。
たとえば、Tbl
に列が 10 個あり、formula
を使用して Tbl
の最後の 5 列を予測子変数として指定するとします。この場合、score(3)
には Tbl
内の 8 番目の列のスコア値が含まれます。これは、サブセットの 3 番目の予測子です。
アルゴリズム
カイ二乗検定を使用した一変量の特徴量ランク付け
バージョン履歴
R2020a で導入
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)