kfoldPredict
交差検証済み回帰モデル内の観測値に対する応答の予測
構文
説明
では、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、yFit = kfoldPredict(CVMdl,Name,Value)'IncludeInteractions',true は、一般化加法モデルの計算に交互作用項を含めるために指定します。
[ は、前の構文におけるいずれかの入力引数の組み合わせを使用して、予測子データ yFit,ySD,yInt] = kfoldPredict(___)CVMdl.X 内の各観測値で評価した応答変数の標準偏差と予測区間も返します。この構文は、CVMdl の IsStandardDeviationFit プロパティが true である一般化加法モデル (GAM) にのみ適用されます。
例
交差検証済みの回帰モデルを作成する際に、オブジェクト関数 kfoldLoss を使用して平均二乗誤差 (MSE) を計算できます。あるいは、kfoldPredict を使用して検証分割観測値の応答を予測し、MSE を手動で計算できます。
carsmall データ セットを読み込みます。予測子データ X と応答データ Y を指定します。
load carsmall
X = [Cylinders Displacement Horsepower Weight];
Y = MPG;交差検証済みの回帰木モデルの学習を行います。既定では、10 分割交差検証が実行されます。
rng('default') % For reproducibility CVMdl = fitrtree(X,Y,'CrossVal','on');
kfoldLoss を使用して 10 分割交差検証の MSE を計算します。
L = kfoldLoss(CVMdl)
L = 29.4963
交差検証済みの回帰モデルを使用して、応答 yfit を予測します。yfit と真の応答 CVMdl.Y の間の平均二乗誤差を計算します。計算された MSE は、kfoldLoss で返された損失値と一致します。
yfit = kfoldPredict(CVMdl); mse = mean((yfit - CVMdl.Y).^2)
mse = 29.4963
最初にホールドアウト検証を使用して分割し、次に 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 関数を使用します。
入力引数
交差検証された分割済みの回帰モデル。RegressionPartitionedModel オブジェクト、RegressionPartitionedEnsemble オブジェクト、RegressionPartitionedGAM オブジェクト、RegressionPartitionedGP オブジェクト、RegressionPartitionedNeuralNetwork オブジェクト、または RegressionPartitionedSVM オブジェクトとして指定します。オブジェクトは 2 つの方法で作成できます。
次の表に記載されている学習済み回帰モデルをそのオブジェクト関数
crossvalに渡す。次の表に記載されている関数を使用して回帰モデルに学習をさせ、その関数の交差検証に関する名前と値の引数のいずれかを指定する。
| 回帰モデル | 関数 |
|---|---|
RegressionEnsemble | fitrensemble |
RegressionGAM | fitrgam |
RegressionGP | fitrgp |
RegressionNeuralNetwork | fitrnet |
RegressionSVM | fitrsvm |
RegressionTree | fitrtree |
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。
例: 'Alpha',0.01,'IncludeInteractions',false は信頼水準を 99% として指定し、一般化加法モデルの計算から交互作用項を除外します。
予測区間 yInt の信頼水準の有意水準。範囲 [0,1] の数値スカラーとして指定します。yInt の信頼水準は 100(1 – Alpha)% と等しくなります。
この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、この引数を指定できるのは、CVMdl が RegressionPartitionedGAM であり、かつ CVMdl の IsStandardDeviationFit プロパティが true である場合だけです。
例: 'Alpha',0.01
データ型: single | double
モデルの交互作用項を含むというフラグ。true または false として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、CVMdl が RegressionPartitionedGAM である場合だけです。
CVMdl のモデル (CVMdl.Trained) に交互作用項が含まれる場合、既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。
データ型: logical
R2023b 以降
予測子に欠損値がある観測値に使用する予測した応答値。"median"、"mean"、または数値スカラーとして指定します。この引数は、ガウス過程回帰モデル、ニューラル ネットワーク モデル、サポート ベクター マシン モデルに対してのみ有効です。つまり、この引数を指定できるのは、CVMdl が RegressionPartitionedGP オブジェクト、RegressionPartitionedNeuralNetwork オブジェクト、または RegressionPartitionedSVM オブジェクトである場合だけです。
| 値 | 説明 |
|---|---|
"median" |
この値は、 |
"mean" | kfoldPredict は、予測子に欠損値がある観測値について予測した応答値として、学習分割データ内の観測された応答値の平均値を使用します。 |
| 数値スカラー | kfoldPredict は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。 |
例: "PredictionForMissingValue","mean"
例: "PredictionForMissingValue",NaN
データ型: single | double | char | string
出力引数
予測応答。n 行 1 列の数値ベクトルとして返されます。n は観測値の個数です (観測値が行に含まれる場合、n は size(CVMdl.X,1) です)。yFit の各エントリは、CVMdl.X に対応する行で予測応答と一致します。
ホールドアウト検証の手法を使用して CVMdl を作成する (つまり、CVMdl.KFold が 1 である) 場合、yFit には学習分割観測値について NaN 値が含まれます。
予測子データ 内の各観測値で評価した応答変数の標準偏差。長さが n の列ベクトルとして返されます。n は、予測子データ CVMdl.X に含まれている観測値の個数です。CVMdl.Xi 番目の要素 ySD(i) に、CVMdl の学習済みの標準偏差モデルを使用して評価した i 番目の観測値 CVMdl.X(i,:) に対する i 番目の応答の標準偏差が格納されます。
この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、kfoldPredict がこの引数を返せるのは、CVMdl が RegressionPartitionedGAM であり、かつ CVMdl の IsStandardDeviationFit プロパティが true である場合だけです。
予測子データ 内の各観測値で評価した応答変数の予測区間。n 行 2 列の行列として返されます。n は、予測子データ CVMdl.X に含まれている観測値の個数です。CVMdl.Xi 番目の行 yInt(i,:) に、 を使用している ySD(i)i 番目の観測値 CVMdl.X(i,:) に対する i 番目の応答の推定された 100(1 – の予測区間が格納されます。Alpha)%Alpha 値は、予測区間に真の応答値 CVMdl.Y(i) が含まれない確率です。yInt の 1 列目には予測区間の下限が、2 列目には上限が格納されます。
この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、kfoldPredict がこの引数を返せるのは、CVMdl が RegressionPartitionedGAM であり、かつ CVMdl の IsStandardDeviationFit プロパティが true である場合だけです。
拡張機能
使用上の注意および制限:
この関数は、次のモデルの GPU 配列を完全にサポートします。
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2011a で導入kfoldPredict で RegressionPartitionedGP モデルの GPU 配列が完全にサポートされます。
kfoldPredict で RegressionPartitionedNeuralNetwork モデルの GPU 配列が完全にサポートされます。
R2023b 以降で損失を予測または計算する際、一部の回帰モデルでは、予測子に欠損値がある観測値について予測した応答値を指定できます。名前と値の引数 PredictionForMissingValue を指定して、予測値として数値スカラー、学習セットの中央値、または学習セットの平均値を使用します。損失を計算するときに、予測子に欠損値がある観測値を省略するように指定することもできます。
次の表は、名前と値の引数 PredictionForMissingValue をサポートするオブジェクト関数の一覧です。既定では、これらの関数は、予測子に欠損値がある観測値について予測した応答値として、学習セットの中央値を使用します。
| モデル タイプ | モデル オブジェクト | オブジェクト関数 |
|---|---|---|
| ガウス過程回帰 (GPR) モデル | RegressionGP, CompactRegressionGP | loss, predict, resubLoss, resubPredict |
RegressionPartitionedGP | kfoldLoss, kfoldPredict | |
| ガウス カーネル回帰モデル | RegressionKernel | loss, predict |
RegressionPartitionedKernel | kfoldLoss, kfoldPredict | |
| 線形回帰モデル | RegressionLinear | loss, predict |
RegressionPartitionedLinear | kfoldLoss, kfoldPredict | |
| ニューラル ネットワーク回帰モデル | RegressionNeuralNetwork, CompactRegressionNeuralNetwork | loss, predict, resubLoss, resubPredict |
RegressionPartitionedNeuralNetwork | kfoldLoss, kfoldPredict | |
| サポート ベクター マシン (SVM) 回帰モデル | RegressionSVM, CompactRegressionSVM | loss, predict, resubLoss, resubPredict |
RegressionPartitionedSVM | kfoldLoss, kfoldPredict |
以前のリリースでは、上記の回帰モデル関数 loss および predict は、予測子に欠損値がある観測値について予測した応答値として NaN を使用していました。予測子に欠損値がある観測値は、予測と損失の再代入 ("resub") と交差検証 ("kfold") の計算で省略されていました。
R2023a 以降では、kfoldPredict で RegressionPartitionedSVM モデルの GPU 配列が完全にサポートされます。
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)