kfoldPredict
交差検証済み線形分類モデルの観測値の分類
説明
例
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'); Mdl1 = CVMdl.Trained{1}
Mdl1 = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'none' Beta: [34023×1 double] Bias: -1.0008 Lambda: 3.5193e-05 Learner: 'svm' Properties, Methods
CVMdl
は ClassificationPartitionedLinear
モデルです。既定では、10 分割交差検証が実行されます。'KFold'
名前と値のペアの引数を使用して分割数を変更できます。
fitclinear
で分割の学習に使用されなかった観測値のラベルを予測します。
label = kfoldPredict(CVMdl);
Mdl1
内の正則化強度は 1 つなので、label
は予測の列ベクトルになり、行数は X
内の観測値数と同じになります。
混同行列を作成します。
ConfusionTrain = confusionchart(Ystats,label);
このモデルは、15 個の 'stats'
ドキュメンテーション ページを Statistics and Machine Learning Toolbox ドキュメンテーションの外部にあると誤分類し、9 個のページを 'stats'
ページとして誤分類します。
線形分類モデルは、ロジスティック回帰学習器の場合のみ事後確率を返します。
NLP のデータ セットを読み込み、k 分割交差検証ラベルの予測 で説明されているように前処理します。予測子データ行列を転置します。
load nlpdata Ystats = Y == 'stats'; X = X';
5 分割の交差検証を使用してバイナリ線形分類モデルを交差検証します。SpaRSA を使用して目的関数を最適化します。目的関数の勾配の許容誤差を 1e-8
に下げます。
rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'KFold',5,'Learner','logistic','Solver','sparsa',... 'Regularization','lasso','GradientTolerance',1e-8);
各分割で学習に使用しなかった観測値の事後クラス確率を予測します。
[~,posterior] = kfoldPredict(CVMdl); CVMdl.ClassNames
ans = 2×1 logical array
0
1
CVMdl
内の正則化強度は 1 つなので、posterior
は列数が 2 で行数が観測値数と同じである行列になります。列 i には、与えられた特定の観測値に対する Mdl.ClassNames(i)
の事後確率が格納されます。
rocmetrics
オブジェクトを作成し、ROC 曲線のパフォーマンス メトリクス (真陽性率と偽陽性率) を計算して ROC 曲線の下の領域 (AUC) の値を求めます。
rocObj = rocmetrics(Ystats,posterior,CVMdl.ClassNames);
rocmetrics
の関数 plot
を使用して、2 番目のクラスの ROC 曲線をプロットします。
plot(rocObj,ClassNames=CVMdl.ClassNames(2))
ROC 曲線から、モデルが検証の観測値をほぼ完璧に分類することがわかります。
ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、交差検証 AUC の値を比較します。
NLP のデータ セットを読み込みます。k 分割交差検証事後クラス確率の推定で説明されているようにデータを前処理します。
load nlpdata Ystats = Y == 'stats'; X = X';
テスト標本には 9471 個の観測値があります。
~ の範囲で対数間隔で配置された 11 個の正則化強度を作成します。
Lambda = logspace(-6,-0.5,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: [1×1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none' Properties, Methods
Mdl1 = CVMdl.Trained{1}
Mdl1 = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023×11 double] Bias: [-13.2936 -13.2936 -13.2936 -13.2936 -13.2936 -6.8954 -5.4359 -4.7170 -3.4108 -3.1566 -2.9792] Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162] Learner: 'logistic' Properties, Methods
Mdl1
は ClassificationLinear
モデル オブジェクトです。Lambda
は正則化強度のシーケンスなので、Mdl1
はそれぞれが Lambda
の各正則化強度に対応する 11 個のモデルであると考えることができます。
交差検証されたラベルと事後クラス確率を予測します。
[label,posterior] = kfoldPredict(CVMdl); CVMdl.ClassNames; [n,K,L] = size(posterior)
n = 31572
K = 2
L = 11
posterior(3,1,5)
ans = 1.0000
label
は、予測されたラベルが含まれている 31572 行 11 列の行列です。各列は、対応する正則化強度を使用して学習を行ったモデルの予測ラベルに対応します。posterior
は事後クラス確率が含まれている 31572 x 2 x 11 の行列です。列はクラスに対応し、ページは正則化強度に対応します。たとえば、posterior(3,1,5)
は、正則化強度として Lambda(5)
を使用するモデルによって 1 番目のクラス (ラベルは 0
) が観測値 3 に割り当てられる事後確率を示し、値は 1.0000 です。
それぞれのモデルについて、rocmetrics
を使用して AUC を計算します。
auc = 1:numel(Lambda); % Preallocation for j = 1:numel(Lambda) rocObj = rocmetrics(Ystats,posterior(:,:,j),CVMdl.ClassNames); auc(j) = rocObj.AUC(1); end
Lambda
の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。データ セット全体を使用し、モデルに学習をさせたときと同じオプションを指定して、各正則化強度について線形分類モデルに学習をさせます。モデルごとに非ゼロの係数を特定します。
Mdl = fitclinear(X,Ystats,'ObservationsIn','columns', ... 'Learner','logistic','Solver','sparsa','Regularization','lasso', ... 'Lambda',Lambda,'GradientTolerance',1e-8); numNZCoeff = sum(Mdl.Beta~=0);
同じ図に、各正則化強度についてのテスト標本の誤差率と非ゼロ係数の頻度をプロットします。すべての変数を対数スケールでプロットします。
figure yyaxis left plot(log10(Lambda),log10(auc),'o-') ylabel('log_{10} AUC') yyaxis right plot(log10(Lambda),log10(numNZCoeff + 1),'o-') ylabel('log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') title('Cross-Validated Statistics') hold off
予測子変数のスパース性と AUC の高さのバランスがとれている正則化強度のインデックスを選択します。この場合、 ~ の値で十分なはずです。
idxFinal = 9;
選択した正則化強度のモデルを Mdl
から選択します。
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal
は、1 つの正則化強度が含まれている ClassificationLinear
モデルです。新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
入力引数
交差検証済みバイナリ線形分類モデル。ClassificationPartitionedLinear
モデル オブジェクトとして指定します。ClassificationPartitionedLinear
モデル オブジェクトを作成するには、fitclinear
を使用し、交差検証用の名前と値のペアの引数のいずれか 1 つ (CrossVal
など) を指定します。
推定値を取得するため、kfoldPredict
は線形分類モデルの交差検証に使用したものと同じデータ (X
および Y
) を適用します。
出力引数
交差検証予測クラス ラベル。categorical 配列、文字配列、logical 行列、数値行列、または文字ベクトルの cell 配列として返されます。
ほとんどの場合 Label
は、CVMdl
の作成に使用した、観測されたクラス ラベル (Y
を参照) と同じデータ型の n 行 L 列の配列になります。(string 配列は文字ベクトルの cell 配列として扱われます)。n は予測子データ内の観測値の個数 (X
を参照)、L は CVMdl.Trained{1}.Lambda
内の正則化強度の個数です。つまり Label(
は、正則化強度が i
,j
)CVMdl.Trained{1}.Lambda(
である線形分類モデルを使用した、観測値 j
)i
の予測クラス ラベルです。
Y
が文字配列で L > 1 の場合、Label
はクラス ラベルの cell 配列になります。
詳細
線形分類モデルの場合、行ベクトルである観測値 x を陽性クラスに分類する生の "分類スコア" は次により定義されます。
正則化強度が j のモデルでは、 は推定された係数の列ベクトル (モデルの Beta(:,j)
プロパティ)、 は推定されたスカラー バイアス (モデルの Bias(j)
プロパティ) です。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器から構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます (ScoreTransform
を参照)。
拡張機能
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入kfoldPredict
は GPU 配列を完全にサポートします。
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)