kfoldEdge
交差検証済みカーネル ECOC モデルの分類エッジ
説明
edge = kfoldEdge(CVMdl)ClassificationPartitionedKernelECOC) CVMdl によって取得した分類エッジを返します。kfoldEdge は、すべての分割について、学習分割観測値に対して学習をさせたモデルを使用して、検証分割観測値の分類エッジを計算します。
edge = kfoldEdge(CVMdl,Name,Value)
例
フィッシャーのアヤメのデータ セットを読み込みます。X には花の測定値が、Y には花の種類の名前が格納されています。
load fisheriris
X = meas;
Y = species;カーネル バイナリ学習器から構成される ECOC モデルを交差検証します。
CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on')
CVMdl = 
  ClassificationPartitionedKernelECOC
    CrossValidatedModel: 'KernelECOC'
           ResponseName: 'Y'
        NumObservations: 150
                  KFold: 10
              Partition: [1×1 cvpartition]
             ClassNames: {'setosa'  'versicolor'  'virginica'}
         ScoreTransform: 'none'
  Properties, Methods
CVMdl は ClassificationPartitionedKernelECOC モデルです。既定では、10 分割交差検証が実行されます。異なる分割数を指定するには、'Crossval' ではなく名前と値のペアの引数 'KFold' を指定します。
交差検証分類エッジを推定します。
edge = kfoldEdge(CVMdl)
edge = 0.6218
あるいは、kfoldEdge 内の名前と値のペアの引数 'Mode','individual' を指定することで各分割エッジを取得できます。
複数のモデルの k 分割エッジを比較することにより、特徴選択を実行します。この条件のみに基づくと、エッジが最高である分類器が最善の分類器となります。
フィッシャーのアヤメのデータ セットを読み込みます。X には花の測定値が、Y には花の種類の名前が格納されています。
load fisheriris
X = meas;
Y = species;予測子変数の半分を無作為に選択します。
rng(1); % For reproducibility p = size(X,2); % Number of predictors idxPart = randsample(p,ceil(0.5*p));
カーネル分類モデルから構成されている 2 つの ECOC モデルを交差検証します。1 つではすべての予測子を、もう 1 つでは半分の予測子を使用します。
CVMdl = fitcecoc(X,Y,'Learners','kernel','CrossVal','on'); PCVMdl = fitcecoc(X(:,idxPart),Y,'Learners','kernel','CrossVal','on');
CVMdl および PCVMdl は ClassificationPartitionedKernelECOC モデルです。既定では、10 分割交差検証が実行されます。異なる分割数を指定するには、'Crossval' ではなく名前と値のペアの引数 'KFold' を指定します。
各分類器について k 分割エッジを推定します。
fullEdge = kfoldEdge(CVMdl)
fullEdge = 0.6137
partEdge = kfoldEdge(PCVMdl)
partEdge = 0.6359
k 分割エッジによれば、2 つの分類器は同等です。
入力引数
交差検証済みのカーネル ECOC モデル。ClassificationPartitionedKernelECOC モデルを指定します。ClassificationPartitionedKernelECOC モデルは、fitcecoc を使用し、以下の名前と値のペアの引数を指定して、ECOC モデルに学習をさせることにより作成できます。
- 'Learners'– 値を- 'kernel'、- templateKernelが返すテンプレート オブジェクト、またはこのようなテンプレート オブジェクトの cell 配列に設定します。
- 引数 - 'CrossVal'、- 'CVPartition'、- 'Holdout'、- 'KFold'、- 'Leaveout'のいずれか。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。 
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。 
例: kfoldEdge(CVMdl,'BinaryLoss','hinge') は、バイナリ学習器の損失関数として 'hinge' を指定します。
バイナリ学習器の損失関数。'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 になるように正規化されます。また、各クラスについて平均のバイナリ損失が計算されます[1]。 
- カスタム バイナリ損失関数の場合は関数ハンドルを指定します。たとえば、 - customFunctionの場合は- 'BinaryLoss',@customFunctionを指定します。- customFunctionの形式は次のとおりです。- bLoss = customFunction(M,s) - Mは- Mdl.CodingMatrixに格納された K 行 B 列の符号化行列です。
- sは 1 行 B 列の分類スコアの行ベクトルです。
- bLossは分類損失です。このスカラーは、特定のクラスのすべての学習器についてバイナリ損失を集計します。たとえば、平均バイナリ損失を使用して、各クラスの学習器の損失を集計できます。
- K は、クラスの数です。 
- B はバイナリ学習器の数です。 
 
既定では、すべてのバイナリ学習器が SVM を使用するカーネル分類モデルである場合、BinaryLoss は 'hinge' です。すべてのバイナリ学習器がロジスティック回帰を使用するカーネル分類モデルである場合、BinaryLoss は 'quadratic' です。
例: 'BinaryLoss','binodeviance'
データ型: char | string | function_handle
バイナリ損失を集計する復号化方式。'Decoding' と 'lossweighted' または 'lossbased' から構成されるコンマ区切りのペアとして指定します。詳細は、バイナリ損失を参照してください。
例: 'Decoding','lossbased'
予測の分割インデックス。'Folds' および正の整数の数値ベクトルで構成されるコンマ区切りのペアとして指定します。Folds の要素は 1 から CVMdl.KFold の範囲でなければなりません。
予測用の Folds で指定された分割のみが使用されます。
例: 'Folds',[1 4 10]
データ型: single | double
出力の集約レベル。'Mode' と 'average' または 'individual' から構成されるコンマ区切りのペアとして指定します。
次の表は値を説明します。
| 値 | 説明 | 
|---|---|
| 'average' | 出力は、すべての分割の平均を表すスカラー値です。 | 
| 'individual' | 出力は、分割ごとに 1 つずつの値が含まれている長さ k のベクトルです。k は分割数です。 | 
例: 'Mode','individual'
推定オプション。statset によって返される構造体配列として指定します。
並列計算を起動するには、Parallel Computing Toolbox™ ライセンスが必要です。
例: Options=statset(UseParallel=true)
データ型: struct
詳細レベル。0 または 1 として指定します。Verbose は、コマンド ウィンドウに表示される診断メッセージの量を制御します。
Verbose が 0 の場合、診断メッセージは表示されません。それ以外の場合は、診断メッセージが表示されます。
例: Verbose=1
データ型: single | double
出力引数
詳細
"分類エッジ" は、分類マージンの加重平均です。
特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。
"分類マージン" は、各観測値における真のクラスの負の損失と偽のクラスの負の最大損失の差です。各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
"バイナリ損失" は、バイナリ学習器がどの程度の精度で観測値をクラスに分類するかを決定する、クラスと分類スコアの関数です。ソフトウェアでバイナリ損失をどのように集計して各観測値の予測クラスを判定するかは、ECOC モデルの "復号化方式" で指定します。
以下のように仮定します。
- mkj は符号化設計行列 M の要素 (k,j)、つまりバイナリ学習器 j のクラス k に対応する符号。M は K 行 B 列の行列であり、K はクラスの数、B はバイナリ学習器の数です。 
- sj は観測値に対するバイナリ学習器 j のスコア。 
- g はバイナリ損失関数。 
- は観測値の予測クラス。 
ソフトウェアでは 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 になるようにバイナリ損失が正規化され、バイナリ学習器の平均が集計に使用されます[1]。
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.
拡張機能
並列実行するには、この関数を呼び出すときに名前と値の引数 Options を指定し、statset を使用してオプション構造体の UseParallel フィールドを true に設定します。
Options=statset(UseParallel=true)
並列計算の詳細については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2018b で導入R2023b 以降では、次の分類モデルのオブジェクト関数において、予測子に欠損値がある観測値が再代入 ("resub") と交差検証 ("kfold") による分類エッジ、損失、マージン、および予測の計算でその一部として使用されます。
以前のリリースでは、予測子に欠損値がある観測値は再代入と交差検証の計算で省略されていました。
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)