このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
kfoldEdge
交差検証済み ECOC モデルの分類エッジ
説明
は、交差検証された ECOC モデル (edge
= kfoldEdge(CVMdl
)ClassificationPartitionedECOC
) CVMdl
が取得した分類エッジを返します。kfoldEdge
は、すべての分割について、学習分割観測値に対して学習をさせた ECOC モデルを使用して、検証分割観測値の分類エッジを計算します。CVMdl.X
には、両方の観測値のセットが含まれます。
は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、分類エッジを返します。たとえば、分割の数、復号化スキームまたは詳細レベルを指定します。edge
= kfoldEdge(CVMdl
,Name,Value
)
例
k 分割交差検証エッジの推定
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
、応答データ Y
、および Y
内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
サポート ベクター マシン (SVM) バイナリ分類器を使用して、ECOC モデルの学習と交差検証を行います。SVM テンプレートを使用して予測子データを標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',1); CVMdl = fitcecoc(X,Y,'CrossVal','on','Learners',t,'ClassNames',classOrder);
CVMdl
は ClassificationPartitionedECOC
モデルです。既定では、10 分割交差検証が実行されます。名前と値のペアの引数 'KFold'
を使用して異なる分割数を指定できます。
エッジの平均を推定します。
edge = kfoldEdge(CVMdl)
edge = 0.7238
あるいは、kfoldEdge
内の名前と値のペアの引数 'Mode','individual'
を指定することで各分割エッジを取得できます。
交差検証分割ごとの各エッジの表示
分類エッジは分類器の品質の相対尺度です。十分には機能しない分割を判別するため、各分割のエッジを表示します。
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
、応答データ Y
、および Y
内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); rng(1); % For reproducibility
SVM バイナリ分類器を使用して ECOC モデルを学習させます。8 分割の交差検証を使用し、SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',1); CVMdl = fitcecoc(X,Y,'KFold',8,'Learners',t,'ClassNames',classOrder);
各分割の分類エッジを推定します。
edges = kfoldEdge(CVMdl,'Mode','individual')
edges = 8×1
0.7187
0.7308
0.6389
0.7951
0.7596
0.6864
0.7290
0.7030
エッジの振幅は分割間で類似しています。十分には機能しない分割は、他の分割よりエッジが小さくなります。
十分に機能する分割の平均分類エッジを取得するため、名前と値のペアの引数 'Folds'
を指定します。
交差検証エッジの比較による ECOC モデル特徴量の選択
分類器エッジは、分類器マージンの平均を測定します。特徴選択を行う方法のひとつとして、複数のモデルからの交差検証エッジを比較します。この条件のみに基づくと、エッジが最高である分類器が最善の分類器となります。
フィッシャーのアヤメのデータセットを読み込みます。予測子データ X
、応答データ Y
、および Y
内のクラスの順序を指定します。
load fisheriris X = meas; Y = categorical(species); classOrder = unique(Y); % Class order rng(1); % For reproducibility
次の 2 つのデータセットを定義します。
fullX
にはすべての予測子が含まれます。partX
には花弁の寸法が含まれます。
fullX = X; partX = X(:,3:4);
各予測子セットについて、SVM バイナリ分類器を使用して ECOC モデルの学習と交差検証を行います。SVM テンプレートを使用して予測子を標準化し、クラスの順序を指定します。
t = templateSVM('Standardize',1); CVMdl = fitcecoc(fullX,Y,'CrossVal','on','Learners',t,... 'ClassNames',classOrder); PCVMdl = fitcecoc(partX,Y,'CrossVal','on','Learners',t,... 'ClassNames',classOrder);
CVMdl
および PCVMdl
は ClassificationPartitionedECOC
モデルです。既定では、10 分割交差検証が実行されます。
各分類器についてエッジを推定します。
fullEdge = kfoldEdge(CVMdl)
fullEdge = 0.7238
partEdge = kfoldEdge(PCVMdl)
partEdge = 0.7426
2 つのモデルでエッジが同程度になっています。
入力引数
CVMdl
— 交差検証 ECOC モデル
ClassificationPartitionedECOC
モデル
交差検証 ECOC モデル。ClassificationPartitionedECOC
モデルとして指定します。ClassificationPartitionedECOC
モデルは 2 つの方法で作成できます。
学習済みの ECOC モデル (
ClassificationECOC
) をcrossval
に渡します。fitcecoc
を使用して ECOC モデルに学習をさせ、交差検証の名前と値のペアの引数'CrossVal'
、'CVPartition'
、'Holdout'
、'KFold'
、'Leaveout'
のいずれかを指定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: kfoldEdge(CVMdl,'BinaryLoss','hinge')
は、バイナリ学習器の損失関数として 'hinge'
を指定します。
BinaryLoss
— バイナリ学習器損失関数
'hamming'
| 'linear'
| 'logit'
| 'exponential'
| 'binodeviance'
| 'hinge'
| 'quadratic'
| 関数ハンドル
バイナリ学習器の損失関数。'BinaryLoss'
と組み込みの損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表で、組み込み関数について説明します。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失の式です。
値 説明 スコア領域 g(yj,sj) 'binodeviance'
二項分布からの逸脱度 (–∞,∞) log[1 + exp(–2yjsj)]/[2log(2)] 'exponential'
指数 (–∞,∞) exp(–yjsj)/2 'hamming'
ハミング [0,1] または (–∞,∞) [1 – sign(yjsj)]/2 'hinge'
ヒンジ (–∞,∞) max(0,1 – yjsj)/2 'linear'
線形 (–∞,∞) (1 – yjsj)/2 'logit'
ロジスティック (–∞,∞) log[1 + exp(–yjsj)]/[2log(2)] 'quadratic'
2 次 [0,1] [1 – yj(2sj – 1)]2/2 バイナリ損失は、yj = 0 の場合に損失が 0.5 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます。
カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、
customFunction
の場合は'BinaryLoss',@customFunction
を指定します。customFunction
の形式は次のとおりです。bLoss = customFunction(M,s)
M
はMdl.CodingMatrix
に格納された K 行 B 列の符号化行列です。s
は 1 行 B 列の分類スコアの行ベクトルです。bLoss
は分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。K は、クラスの数です。
B はバイナリ学習器の数です。
カスタムなバイナリ損失関数を渡す例については、カスタム バイナリ損失関数の使用による ECOC モデルの検定標本ラベルの予測を参照してください。
BinaryLoss
の既定値は、バイナリ学習器が返すスコアの範囲によって異なります。次の表に、既定のスコア変換を使用する場合 (モデルの ScoreTransform
プロパティが 'none'
の場合) の BinaryLoss
の既定値をいくつか示します。
仮定 | 既定値 |
---|---|
すべてのバイナリ学習器が次のいずれかである。
| 'quadratic' |
すべてのバイナリ学習器が SVM である。 | 'hinge' |
すべてのバイナリ学習器が、AdaboostM1 または GentleBoost によって学習をさせたアンサンブルである。 | 'exponential' |
すべてのバイナリ学習器が、LogitBoost によって学習をさせたアンサンブルである。 | 'binodeviance' |
fitcecoc で 'FitPosterior',true を設定して、クラスの事後確率を予測するように指定している。 | 'quadratic' |
バイナリ学習器が異種混合で、さまざまな損失関数を使用している。 | 'hamming' |
既定値を確認するには、コマンド ラインでドット表記を使用して学習済みモデルの BinaryLoss
プロパティを表示します。
例: 'BinaryLoss','binodeviance'
データ型: char
| string
| function_handle
Decoding
— 復号化スキーム
'lossweighted'
(既定値) | 'lossbased'
バイナリ損失を集計する復号化方式。'Decoding'
と 'lossweighted'
または 'lossbased'
から構成されるコンマ区切りのペアとして指定します。詳細については、バイナリ損失を参照してください。
例: 'Decoding','lossbased'
Folds
— 予測の分割インデックス
1:CVMdl.KFold
(既定値) | 正の整数の数値ベクトル
予測の分割インデックス。'Folds'
および正の整数の数値ベクトルで構成されるコンマ区切りのペアとして指定します。Folds
の要素は 1
から CVMdl.KFold
の範囲でなければなりません。
予測用の Folds
で指定された分割のみが使用されます。
例: 'Folds',[1 4 10]
データ型: single
| double
Mode
— 出力の集約レベル
'average'
(既定値) | 'individual'
出力の集約レベル。'Mode'
と 'average'
または 'individual'
から構成されるコンマ区切りのペアとして指定します。
次の表は値を説明します。
値 | 説明 |
---|---|
'average' | 出力は、すべての分割の平均を表すスカラー値です。 |
'individual' | 出力は、分割ごとに 1 つずつの値が含まれている長さ k のベクトルです。k は分割数です。 |
例: 'Mode','individual'
Options
— 推定オプション
[]
(既定値) | statset
によって返される構造体配列
推定オプション。statset
により返される 'Options'
と構造体配列から構成されるコンマ区切りのペアとして指定します。
並列計算を起動するには、以下を行います。
Parallel Computing Toolbox™ ライセンスが必要です。
'Options',statset('UseParallel',true)
を指定します。
Verbose
— 詳細レベル
0
(既定値) | 1
詳細レベル。'Verbose'
と 0
または 1
から構成されるコンマ区切りのペアとして指定します。Verbose
は、コマンド ウィンドウに表示される診断メッセージの量を制御します。
Verbose
が 0
の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。
例: 'Verbose',1
データ型: single
| double
出力引数
詳細
分類エッジ
"分類エッジ" は、分類マージンの加重平均です。
特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。
分類マージン
"分類マージン" は、各観測値における真のクラスの負の損失と偽のクラスの負の最大損失の差です。各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
バイナリ損失
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。
以下のように仮定します。
mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。
sj は観測値に対するバイナリ学習器 j のスコア。
g はバイナリ損失関数。
は観測値の予測クラス。
ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの復号化方式で指定します。ソフトウェアでは 2 つの復号化方式をサポートしています。
関数 predict
、resubPredict
、および kfoldPredict
は、それぞれの観測値とクラスについて、argmin
の目的関数の符号反転値を 2 番目の出力引数 (NegLoss
) として返します。
次の表は、サポートされる損失関数をまとめたものです。ここで、yj は特定のバイナリ学習器のクラス ラベル (集合 {–1,1,0} 内)、sj は観測値 j のスコア、g(yj,sj) はバイナリ損失関数です。
値 | 説明 | スコア領域 | g(yj,sj) |
---|---|---|---|
"binodeviance" | 二項分布からの逸脱度 | (–∞,∞) | log[1 + exp(–2yjsj)]/[2log(2)] |
"exponential" | 指数 | (–∞,∞) | exp(–yjsj)/2 |
"hamming" | ハミング | [0,1] または (–∞,∞) | [1 – sign(yjsj)]/2 |
"hinge" | ヒンジ | (–∞,∞) | max(0,1 – yjsj)/2 |
"linear" | 線形 | (–∞,∞) | (1 – yjsj)/2 |
"logit" | ロジスティック | (–∞,∞) | log[1 + exp(–yjsj)]/[2log(2)] |
"quadratic" | 2 次 | [0,1] | [1 – yj(2sj – 1)]2/2 |
yj = 0 のときに損失が 0.5 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます。
ECOC 分類器の全体的な性能の尺度である全体の分類損失 (オブジェクト関数 kfoldLoss
および kfoldPredict
の名前と値の引数 LossFun
により指定) とバイナリ損失を混同しないでください。
参照
[1] Allwein, E., R. Schapire, and Y. Singer. “Reducing multiclass to binary: A unifying approach for margin classifiers.” Journal of Machine Learning Research. Vol. 1, 2000, pp. 113–141.
[2] Escalera, S., O. Pujol, and P. Radeva. “Separability of ternary codes for sparse designs of error-correcting output codes.” Pattern Recog. Lett., Vol. 30, Issue 3, 2009, pp. 285–297.
[3] Escalera, S., O. Pujol, and P. Radeva. “On the decoding process in ternary error-correcting output codes.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. 32, Issue 7, 2010, pp. 120–134.
拡張機能
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
並列実行するには、この関数を呼び出すときに名前と値の引数 'Options'
を指定し、statset
を使用してオプション構造体の 'UseParallel'
フィールドを true
に設定します。
たとえば、次のようにします。'Options',statset('UseParallel',true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2014b で導入
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)