このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
kfoldEdge
学習で使用しない観測値の分類エッジ
説明
は、1 つ以上の e
= kfoldEdge(CVMdl
,Name,Value
)Name,Value
引数のペアによって指定された追加オプションを使用します。たとえば、エッジの計算に使用する分割を指定します。
入力引数
CVMdl
— 交差検証済みのバイナリ線形分類モデル
ClassificationPartitionedLinear
モデル オブジェクト
交差検証済みバイナリ線形分類モデル。ClassificationPartitionedLinear
モデル オブジェクトとして指定します。ClassificationPartitionedLinear
モデル オブジェクトを作成するには、fitclinear
を使用し、交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossVal
など) を指定します。
推定値を取得するため、kfoldEdge は線形分類モデルの交差検証に使用したものと同じデータ (X
および Y
) を適用します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
Folds
— 分類スコアの予測に使用する分割のインデックス
1:CVMdl.KFold
(既定値) | 正の整数の数値ベクトル
分類スコアの予測に使用する分割のインデックス。'Folds'
と正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。Folds
の要素は 1
から CVMdl.KFold
の範囲でなければなりません。
例: 'Folds',[1 4 10]
データ型: single
| double
Mode
— エッジの集約レベル
'average'
(既定値) | 'individual'
エッジの集約レベル。'Mode'
と 'average'
または 'individual'
から構成されるコンマ区切りのペアとして指定します。
値 | 説明 |
---|---|
'average' | 分割全体で平均した分類エッジを返す |
'individual' | 各分割について分類エッジを返す |
例: 'Mode','individual'
出力引数
e
— 交差検証済みの分類エッジ
数値スカラー | 数値ベクトル | 数値行列
交差検証済みの分類エッジ。数値スカラー、ベクトルまたは行列として返されます。
交差検証済みモデルの正則化強度の個数を L
(つまり、L は numel(CVMdl.Trained{1}.Lambda)
)、分割数 (CVMdl.KFold
に格納) を F
とします。
Mode
が'average'
の場合、e
は 1 行L
列のベクトルになります。e(
は、正則化強度j
)j
を使用する交差検証済みモデルのすべての分割に対する平均分類エッジです。それ以外の場合、
e
はF
行L
列の行列になります。e(
は、正則化強度i
,j
)j
を使用する交差検証済みモデルの分割i
に対する分類エッジです。
例
k 分割交差検証エッジの推定
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。
モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。
Ystats = Y == 'stats';
あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できるバイナリ線形分類モデルの交差検証を行います。
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'CrossVal','on');
CVMdl
は ClassificationPartitionedLinear
モデルです。既定では、10 分割交差検証が実行されます。'KFold'
名前と値のペアの引数を使用して分割数を変更できます。
分割外のエッジの平均を推定します。
e = kfoldEdge(CVMdl)
e = 8.1243
あるいは、kfoldEdge
内の名前と値のペアの引数 'Mode','individual'
を指定することで各分割エッジを取得できます。
k 分割エッジを使用した特徴選択
特徴選択を実行する方法の 1 つは、複数のモデルの k 分割エッジを比較することです。この条件のみに基づくと、エッジが最高となる分類器が最善の分類器となります。
NLP のデータ セットを読み込みます。k 分割交差検証エッジの推定で説明されているようにデータを前処理します。
load nlpdata Ystats = Y == 'stats'; X = X';
2 つのデータ セットを作成します。
fullX
にはすべての予測子が含まれます。partX
には、無作為に選択した予測子の 1/2 が含まれます。
rng(1); % For reproducibility p = size(X,1); % Number of predictors halfPredIdx = randsample(p,ceil(0.5*p)); fullX = X; partX = X(halfPredIdx,:);
2 つのバイナリ線形分類モデルを交差検証します。1 つではすべての予測子を、もう 1 つでは半分の予測子を使用します。観測値が列に対応することを指定し、SpaRSA を使用して目的関数を最適化します。
CVMdl = fitclinear(fullX,Ystats,'CrossVal','on','Solver','sparsa',... 'ObservationsIn','columns'); PCVMdl = fitclinear(partX,Ystats,'CrossVal','on','Solver','sparsa',... 'ObservationsIn','columns');
CVMdl
および PCVMdl
は ClassificationPartitionedLinear
モデルです。
各分類器について k 分割エッジを推定します。
fullEdge = kfoldEdge(CVMdl)
fullEdge = 16.5629
partEdge = kfoldEdge(PCVMdl)
partEdge = 13.9030
k 分割エッジによれば、すべての予測子を使用する分類器の方がモデルとして優れています。
k分割エッジの使用による適切な LASSO ペナルティの特定
ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、k 分割エッジを比較します。
NLP のデータ セットを読み込みます。k 分割交差検証エッジの推定で説明されているようにデータを前処理します。
load nlpdata Ystats = Y == 'stats'; X = X';
~ の範囲で対数間隔で配置された 11 個の正則化強度を作成します。
Lambda = logspace(-8,1,11);
5 分割の交差検証と各正則化強度を使用して、バイナリ線形分類モデルを交差検証します。SpaRSA を使用して目的関数を最適化します。目的関数の勾配の許容誤差を 1e-8
に下げます。
rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 5 Partition: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none'
CVMdl
は ClassificationPartitionedLinear
モデルです。fitclinear
は 5 分割の交差検証を実装するので、各分割について学習させる 5 つの ClassificationLinear
モデルが CVMdl
に格納されます。
各分割および正則化強度のエッジを推定します。
eFolds = kfoldEdge(CVMdl,'Mode','individual')
eFolds = 5×11
0.9958 0.9958 0.9958 0.9958 0.9958 0.9923 0.9772 0.9231 0.8419 0.8127 0.8127
0.9991 0.9991 0.9991 0.9991 0.9991 0.9939 0.9780 0.9181 0.8257 0.8128 0.8128
0.9992 0.9992 0.9992 0.9992 0.9992 0.9942 0.9779 0.9103 0.8255 0.8128 0.8128
0.9974 0.9974 0.9974 0.9974 0.9974 0.9931 0.9772 0.9195 0.8486 0.8130 0.8130
0.9976 0.9976 0.9976 0.9976 0.9976 0.9942 0.9782 0.9194 0.8400 0.8127 0.8127
eFolds
は 5 行 11 列のエッジの行列です。行は分割に、列は Lambda
の正則化強度に対応します。eFolds
を使用して、性能が低い分割、つまり非常に低いエッジを特定します。
各正則化強度について、すべての分割に対する平均エッジを推定します。
e = kfoldEdge(CVMdl)
e = 1×11
0.9978 0.9978 0.9978 0.9978 0.9978 0.9935 0.9777 0.9181 0.8364 0.8128 0.8128
各正則化強度について 5 分割エッジの平均をプロットすることにより、モデルがどの程度一般化を行うかを判断します。グリッド全体で 5 分割エッジを最大化する正則化強度を特定します。
figure; plot(log10(Lambda),log10(e),'-o') [~, maxEIdx] = max(e); maxLambda = Lambda(maxEIdx); hold on plot(log10(maxLambda),log10(e(maxEIdx)),'ro'); ylabel('log_{10} 5-fold edge') xlabel('log_{10} Lambda') legend('Edge','Max edge') hold off
いくつかの Lambda
の値で同じようにエッジが高くなっています。Lambda の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。
エッジが低下する直前にある正則化強度を選択します。
LambdaFinal = Lambda(5);
正則化強度 LambdaFinal
を指定し、データ セット全体を使用して線形分類モデルに学習をさせます。
MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',LambdaFinal);
新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
詳細
分類エッジ
"分類エッジ" は、分類マージンの加重平均です。
特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。
分類マージン
バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。
このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。
x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。
各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
分類スコア
線形分類モデルの場合、行ベクトルである観測値 x を陽性クラスに分類する生の "分類スコア" は次により定義されます。
正則化強度が j のモデルでは、 は推定された係数の列ベクトル (モデルの Beta(:,j)
プロパティ)、 は推定されたスカラー バイアス (モデルの Bias(j)
プロパティ) です。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器から構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます (ScoreTransform
を参照)。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入R2024a: GPU 配列の指定 (Parallel Computing Toolbox が必要)
kfoldEdge
は GPU 配列を完全にサポートします。
R2023b: 予測子に欠損値がある観測値を再代入と交差検証の計算に使用
R2023b 以降では、次の分類モデルのオブジェクト関数において、予測子に欠損値がある観測値が再代入 ("resub") と交差検証 ("kfold") による分類エッジ、損失、マージン、および予測の計算でその一部として使用されます。
以前のリリースでは、予測子に欠損値がある観測値は再代入と交差検証の計算で省略されていました。
R2022a: 既定以外のコスト行列をもつモデルに対して kfoldEdge
で異なる値が返される
入力モデル オブジェクトに学習させるときに既定以外のコスト行列を指定すると、関数 kfoldEdge
で以前のリリースとは異なる値が返されます。
関数 kfoldEdge
は、W
プロパティに格納された観測値の重みを使用します。W
プロパティの値を関数で使用する方法については変更されていません。ただし、既定以外のコスト行列をもつモデルについて入力モデル オブジェクトに格納されるプロパティの値が変更されたため、関数から異なる値が返されることがあります。
プロパティの値の変更に関する詳細については、Cost プロパティにユーザー指定のコスト行列を格納を参照してください。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
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)