kfoldPredict
交差検証済み分類モデルの観測値の分類
構文
説明
は、計算に交互作用項を含めるかどうかを指定します。この構文は一般化加法モデルにのみ適用されます。label = kfoldPredict(CVMdl,'IncludeInteractions',includeInteractions)
例
判別分析モデルの 10 分割の交差検証予測を使用して、混同行列を作成します。
fisheriris データ セットを読み込みます。X には 150 種類の花に関する花の測定値が格納されており、y は各花の種類またはクラスの一覧です。クラスの順序を指定する変数 order を作成します。
load fisheriris
X = meas;
y = species;
order = unique(y)order = 3×1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
関数 fitcdiscr を使用して、10 分割の交差検証判別分析モデルを作成します。既定では、fitcdiscr により、学習セットとテスト セットで花の種類の比率がほぼ同じになることが保証されます。花のクラスの順序を指定します。
cvmdl = fitcdiscr(X,y,'KFold',10,'ClassNames',order);
テスト セットの花の種類を予測します。
predictedSpecies = kfoldPredict(cvmdl);
真のクラス値を予測したクラス値と比較する混同行列を作成します。
confusionchart(y,predictedSpecies)

フィッシャーのアヤメのデータに基づいてモデルの交差検証予測を求めます。
フィッシャーのアヤメのデータ セットを読み込みます。
load fisheririsAdaBoostM2 を使用して分類木のアンサンブルに学習をさせます。弱学習器として木の切り株を指定します。
rng(1); % For reproducibility t = templateTree('MaxNumSplits',1); Mdl = fitcensemble(meas,species,'Method','AdaBoostM2','Learners',t);
10 分割交差検証を使用して学習済みアンサンブルを交差検証します。
CVMdl = crossval(Mdl);
ラベルとスコアを予測された交差検証を推定します。
[elabel,escore] = kfoldPredict(CVMdl);
各クラスの最大スコアと最小スコアを表示します。
max(escore)
ans = 1×3
9.3862 8.9871 10.1866
min(escore)
ans = 1×3
0.0018 3.8359 0.9573
最初にホールドアウト検証を使用して分割し、次に 3 分割交差検証を使用して分割した分類モデルについて、それらの損失と予測を計算します。2 つの損失と予測のセットを比較します。
fisheriris データ セットから table を作成します。このデータ セットには、3 種のアヤメの花のがく片と花弁からの長さと幅の測定値が含まれています。最初の 8 つの観測値を表示します。
fisheriris = readtable("fisheriris.csv");
head(fisheriris) SepalLength SepalWidth PetalLength PetalWidth Species
___________ __________ ___________ __________ __________
5.1 3.5 1.4 0.2 {'setosa'}
4.9 3 1.4 0.2 {'setosa'}
4.7 3.2 1.3 0.2 {'setosa'}
4.6 3.1 1.5 0.2 {'setosa'}
5 3.6 1.4 0.2 {'setosa'}
5.4 3.9 1.7 0.4 {'setosa'}
4.6 3.4 1.4 0.3 {'setosa'}
5 3.4 1.5 0.2 {'setosa'}
データの分割にはcvpartitionを使用します。まず、観測値の約 70% を学習データ、約 30% を検証データに使用して、ホールドアウト検証用の分割を作成します。次に、3 分割交差検証用の分割を作成します。
rng(0,"twister") % For reproducibility holdoutPartition = cvpartition(fisheriris.Species,Holdout=0.30); kfoldPartition = cvpartition(fisheriris.Species,KFold=3);
holdoutPartition と kfoldPartition は、どちらも無作為な層化区分です。それぞれtraining関数とtest関数を使用して、学習セットと検証セットにおける観測値のインデックスを特定できます。
fisheriris のデータを使用して分類木モデルに学習させます。応答変数として Species を指定します。
Mdl = fitctree(fisheriris,"Species");crossval を使用して、分割された分類モデルを作成します。
holdoutMdl = crossval(Mdl,CVPartition=holdoutPartition)
holdoutMdl =
ClassificationPartitionedModel
CrossValidatedModel: 'Tree'
PredictorNames: {'SepalLength' 'SepalWidth' 'PetalLength' 'PetalWidth'}
ResponseName: 'Species'
NumObservations: 150
KFold: 1
Partition: [1×1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
Properties, Methods
kfoldMdl = crossval(Mdl,CVPartition=kfoldPartition)
kfoldMdl =
ClassificationPartitionedModel
CrossValidatedModel: 'Tree'
PredictorNames: {'SepalLength' 'SepalWidth' 'PetalLength' 'PetalWidth'}
ResponseName: 'Species'
NumObservations: 150
KFold: 3
Partition: [1×1 cvpartition]
ClassNames: {'setosa' 'versicolor' 'virginica'}
ScoreTransform: 'none'
Properties, Methods
holdoutMdl と kfoldMdl は ClassificationPartitionedModel オブジェクトです。
kfoldLoss を使用して、holdoutMdl と kfoldMdl の最小予測誤分類コストを計算します。どちらのモデルも既定のコスト行列を使用しているため、このコストは分類誤差と同じになります。
holdoutL = kfoldLoss(holdoutMdl)
holdoutL = 0.0889
kfoldL = kfoldLoss(kfoldMdl)
kfoldL = 0.0600
holdoutL は 1 つの検証セットに対する予測を使用して計算された誤差で、kfoldL は検証データの 3 つの分割に対する予測を使用して計算された平均誤差です。未観測データに対するモデルの性能については、交差検証のメトリクスの方が優れた指標となる傾向があります。
kfoldPredict を使用して、2 つのモデルの検証データの予測を計算します。
[holdoutLabels,holdoutScores] = kfoldPredict(holdoutMdl); [kfoldLabels,kfoldScores] = kfoldPredict(kfoldMdl); holdoutClassNames = holdoutMdl.ClassNames; holdoutScores = array2table(holdoutScores,VariableNames=holdoutClassNames); kfoldClassNames = kfoldMdl.ClassNames; kfoldScores = array2table(kfoldScores,VariableNames=kfoldClassNames); predictions = table(holdoutLabels,kfoldLabels, ... holdoutScores,kfoldScores, ... VariableNames=["holdoutMdl Labels","kfoldMdl Labels", ... "holdoutMdl Scores","kfoldMdl Scores"])
predictions=150×4 table
holdoutMdl Labels kfoldMdl Labels holdoutMdl Scores kfoldMdl Scores
_________________ _______________ _________________________________ _________________________________
setosa versicolor virginica setosa versicolor virginica
______ __________ _________ ______ __________ _________
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} 1 0 0 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} 1 0 0 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
{'setosa'} {'setosa'} 1 0 0 1 0 0
{'setosa'} {'setosa'} 1 0 0 1 0 0
{'setosa'} {'setosa'} NaN NaN NaN 1 0 0
⋮
holdoutMdl.Trained の学習に使用された観測値に対して、kfoldPredict は NaN スコアを返します。これらの観測値について、関数は最も頻度が高いクラス ラベルを予測ラベルとして選択します。このケースでは、すべてのクラスの頻度が同じであるため、関数は最初のクラス (setosa) を予測ラベルとして選択します。関数は、学習させたモデルを使用して検証セットの観測値に対する予測を返します。kfoldPredict は、その観測値を使用せずに学習させた kfoldMdl.Trained のモデルを使用して kfoldMdl のそれぞれの予測を返します。
未観測データに対する応答を予測するには、holdoutMdl や kfoldMdl などの分割されたモデルではなく、データ セット全体で学習させたモデル (Mdl) とその predict 関数を使用します。
入力引数
交差検証された分割済みの分類器。ClassificationPartitionedModel オブジェクト、ClassificationPartitionedEnsemble オブジェクト、ClassificationPartitionedGAM オブジェクト、または ClassificationPartitionedNeuralNetwork オブジェクトとして指定します。オブジェクトは 2 つの方法で作成できます。
次の表に記載されている学習済み分類モデルをそのオブジェクト関数
crossvalに渡す。次の表に記載されている関数を使用して分類モデルに学習をさせ、その関数の交差検証に関する名前と値の引数のいずれかを指定する。
モデルの交互作用項を含むというフラグ。true または false として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、CVMdl が ClassificationPartitionedGAM である場合だけです。
CVMdl のモデル (CVMdl.Trained) に交互作用項が含まれる場合、既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。
データ型: logical
出力引数
予測クラス ラベル。categorical ベクトル、logical ベクトル、数値ベクトル、文字配列、または文字ベクトルの cell 配列として返されます。label のデータ型および行数は CVMdl.Y と同じです。label の各エントリは、CVMdl.X の対応する観測値の予測されたクラス ラベルに対応します。
ホールドアウト検証の手法を使用して CVMdl を作成する (つまり、CVMdl.KFold が 1 である) 場合、学習分割観測値の label の値は無視します。これらの値は、最も頻度が高いクラスと一致します。
分類スコア。n 行 K 列の行列として返されます。n は観測値の数 (観測値が行に含まれる場合は size(CVMdl.X,1))、K は一意のクラスの数 (size(CVMdl.ClassNames,1)) です。分類スコア Score(i,j) は、i 番目の観測値がクラス j に属する信頼度を表します。
ホールドアウト検証の手法を使用して CVMdl を作成する (つまり、CVMdl.KFold が 1 である) 場合、Score には学習分割観測値について NaN 値が含まれます。
予測誤分類コスト。n 行 K 列の行列として返されます。n は観測値の数 (観測値が行に含まれる場合は size(CVMdl.X,1))、K は一意のクラスの数 (size(CVMdl.ClassNames,1)) です。値 Cost(i,j) は、i 番目の観測値がクラス j に属するという予測の平均誤分類コストです。
メモ
この出力引数を返す場合、CVMdl は判別分析、k 最近傍、単純ベイズ、ニューラル ネットワーク、または木分類器でなければなりません。
ホールドアウト検証の手法を使用して CVMdl を作成する (つまり、CVMdl.KFold が 1 である) 場合、Cost には学習分割観測値について NaN 値が含まれます。
アルゴリズム
kfoldPredict は、対応するオブジェクト関数 predict で説明されているように、予測を計算します。モデル固有の説明については、次の表に示す該当する関数 predict のリファレンス ページを参照してください。
拡張機能
使用上の注意事項および制限事項:
この関数は、次の交差検証済みモデル オブジェクトの GPU 配列を完全にサポートします。
fitcensembleで学習させたアンサンブル分類器fitcknnで学習させた k 最近傍分類器fitcsvmで学習させたサポート ベクター マシン分類器fitctreeで学習させたマルチクラス分類用の二分決定木fitcnetで学習させた分類用のニューラル ネットワーク
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2011a で導入kfoldPredict は、fitcnet を使用して学習させた ClassificationPartitionedModel モデルの 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)