このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
kfoldMargin
学習で使用しない観測値の分類マージン
説明
入力引数
CVMdl
— 交差検証済みのバイナリ線形分類モデル
ClassificationPartitionedLinear
モデル オブジェクト
交差検証済みバイナリ線形分類モデル。ClassificationPartitionedLinear
モデル オブジェクトとして指定します。ClassificationPartitionedLinear
モデル オブジェクトを作成するには、fitclinear
を使用し、交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossVal
など) を指定します。
推定値を取得するため、kfoldMargin は線形分類モデルの交差検証に使用したものと同じデータ (X
および Y
) を適用します。
出力引数
例
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'
名前と値のペアの引数を使用して分割数を変更できます。
交差検証マージンを推定します。
m = kfoldMargin(CVMdl); size(m)
ans = 1×2
31572 1
m
は 31572 行 1 列のベクトルです。m(j)
は観測値 j
の分割外マージンの平均です。
箱ひげ図を使用して k 分割マージンをプロットします。
figure;
boxplot(m);
h = gca;
h.YLim = [-5 30];
title('Distribution of Cross-Validated Margins')
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 分割マージンを推定します。箱ひげ図を使用して k 分割マージン セットの分布をプロットします。
fullMargins = kfoldMargin(CVMdl); partMargins = kfoldMargin(PCVMdl); figure; boxplot([fullMargins partMargins],'Labels',... {'All Predictors','Half of the Predictors'}); h = gca; h.YLim = [-30 60]; title('Distribution of Cross-Validated Margins')
2 つの分類器でマージンの分布は似ています。
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
に格納されます。
各正則化強度の k 分割マージンを推定します。
m = kfoldMargin(CVMdl); size(m)
ans = 1×2
31572 11
m
は各観測値の交差検証マージンから構成される 31572 行 11 列の行列です。列は正則化強度に対応します。
各正則化強度について k 分割マージンをプロットします。ロジスティック回帰スコアは [0,1] の範囲にあるので、マージンは [-1,1] の範囲にあります。グリッド全体でマージンを最大化する正則化強度を識別しやすくするため、マージンのスケールを変更します。
figure boxplot(10000.^m) ylabel('Exponentiated test-sample margins') xlabel('Lambda indices')
いくつかの Lambda
の値では、10000 の付近で k 分割マージンの分布が密になっています。Lambda の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。
k 分割マージンの分布の中心が低下する直前にある正則化強度を選択します。
LambdaFinal = Lambda(5);
データセット全体を使用して線形分類モデルに学習をさせます。目的の正則化強度を指定します。
MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns', ... 'Learner','logistic','Solver','sparsa','Regularization','lasso', ... 'Lambda',LambdaFinal);
新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
詳細
分類マージン
バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。
このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。
x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。
各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
分類スコア
線形分類モデルの場合、行ベクトルである観測値 x を陽性クラスに分類する生の "分類スコア" は次により定義されます。
正則化強度が j のモデルでは、 は推定された係数の列ベクトル (モデルの Beta(:,j)
プロパティ)、 は推定されたスカラー バイアス (モデルの Bias(j)
プロパティ) です。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器から構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます (ScoreTransform
を参照)。
バージョン履歴
R2016a で導入R2023b: 予測子に欠損値がある観測値を再代入と交差検証の計算に使用
R2023b 以降では、次の分類モデルのオブジェクト関数において、予測子に欠損値がある観測値が再代入 ("resub") と交差検証 ("kfold") による分類エッジ、損失、マージン、および予測の計算でその一部として使用されます。
以前のリリースでは、予測子に欠損値がある観測値は再代入と交差検証の計算で省略されていました。
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)