このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
kfoldLoss
交差検証された分割済みの回帰モデルの損失
説明
例
アンサンブル回帰の交差検証損失の計算
carsmall
データのアンサンブル回帰の交差検証損失を求めます。
carsmall
データセットを読み込み、排気量、馬力および車両重量を予測子として選択します。
load carsmall
X = [Displacement Horsepower Weight];
回帰木のアンサンブルに学習をさせます。
rens = fitrensemble(X,MPG);
rens
から交差検証済みのアンサンブルを作成し、k 分割交差検証損失を求めます。
rng(10,'twister') % For reproducibility cvrens = crossval(rens); L = kfoldLoss(cvrens)
L = 28.7114
交差検証分割ごとの個々の損失の表示
平均二乗誤差 (MSE) はモデルの品質を示す尺度です。交差検証済み回帰モデルの各分割の MSE を調べます。
carsmall
データセットを読み込みます。予測子 X
と応答データ Y
を指定します。
load carsmall
X = [Cylinders Displacement Horsepower Weight];
Y = MPG;
交差検証済みの回帰木モデルの学習を行います。既定では、10 分割交差検証が実行されます。
rng('default') % For reproducibility CVMdl = fitrtree(X,Y,'CrossVal','on');
各分割の MSE を計算します。箱ひげ図を使用して損失値の分布を可視化します。いずれの値も外れ値でないことがわかります。
losses = kfoldLoss(CVMdl,'Mode','individual')
losses = 10×1
42.5072
20.3995
22.3737
34.4255
40.8005
60.2755
19.5562
9.2060
29.0788
16.3386
boxchart(losses)
kfoldLoss
を使用した GAM の最適な木の数の特定
交差検証済みの 10 分割の一般化加法モデル (GAM) に学習させます。その後、kfoldLoss
を使用して交差検証の累積回帰損失 (平均二乗誤差) を計算します。誤差を使用して、予測子 (予測子の線形項) あたりの最適な木の数と交互作用項あたりの最適な木の数を特定します。
代わりに、名前と値の引数OptimizeHyperparametersを使用して fitrgam
の名前と値の引数の最適な値を特定することもできます。例については、OptimizeHyperparameters を使用した GAM の最適化を参照してください。
patients
データセットを読み込みます。
load patients
予測子変数 (Age
、Diastolic
、Smoker
、Weight
、Gender
、および SelfAssessedHealthStatus
) と応答変数 (Systolic
) を格納する table を作成します。
tbl = table(Age,Diastolic,Smoker,Weight,Gender,SelfAssessedHealthStatus,Systolic);
既定の交差検証オプションを使用して交差検証済み GAM を作成します。名前と値の引数 'CrossVal'
を 'on'
として指定します。また、5 つの交互作用項を含めるように指定します。
rng('default') % For reproducibility CVMdl = fitrgam(tbl,'Systolic','CrossVal','on','Interactions',5);
'Mode'
を 'cumulative'
として指定すると、関数 kfoldLoss
は累積誤差を返します。これは、各分割に同じ数の木を使用して取得したすべての分割の平均誤差です。各分割の木の数を表示します。
CVMdl.NumTrainedPerFold
ans = struct with fields:
PredictorTrees: [300 300 300 300 300 300 300 300 300 300]
InteractionTrees: [76 100 100 100 100 42 100 100 59 100]
kfoldLoss
では、最大で 300 個の予測子木と 42 個の交互作用木を使用して累積誤差を計算できます。
10 分割交差検証を行った累積平均二乗誤差をプロットします。'IncludeInteractions'
を false
として指定して、計算から交互作用項を除外します。
L_noInteractions = kfoldLoss(CVMdl,'Mode','cumulative','IncludeInteractions',false); figure plot(0:min(CVMdl.NumTrainedPerFold.PredictorTrees),L_noInteractions)
L_noInteractions
の最初の要素は、切片 (定数) 項のみを使用して取得したすべての分割の平均誤差です。L_noInteractions
の (J+1
) 番目の要素は、切片項と各線形項の最初の J
個の予測子木を使用して取得した平均誤差です。累積損失をプロットすると、GAM の予測子木の数が増えるにつれて誤差がどのように変化するかを観察できます。
最小誤差とその最小誤差の達成時に使用された予測子木の数を調べます。
[M,I] = min(L_noInteractions)
M = 28.0506
I = 6
GAM に 5 個の予測子木が含まれるときに誤差が最小になっています。
線形項と交互作用項の両方を使用して累積平均二乗誤差を計算します。
L = kfoldLoss(CVMdl,'Mode','cumulative'); figure plot(0:min(CVMdl.NumTrainedPerFold.InteractionTrees),L)
L
の最初の要素は、切片 (定数) 項と各線形項のすべての予測子木を使用して取得したすべての分割の平均誤差です。L
の (J+1
) 番目の要素は、切片項、各線形項のすべての予測子木、および各交互作用項の最初の J
個の交互作用木を使用して取得した平均誤差です。プロットから、交互作用項を追加すると誤差が大きくなることがわかります。
予測子木の数が 5 個のときの誤差で問題がなければ、一変量の GAM にもう一度学習させ、交差検証を使用せずに 'NumTreesPerPredictor',5
と指定して予測モデルを作成できます。
入力引数
CVMdl
— 交差検証された分割済みの回帰モデル
RegressionPartitionedModel
オブジェクト | RegressionPartitionedEnsemble
オブジェクト | RegressionPartitionedGAM
オブジェクト | RegressionPartitionedGP
オブジェクト | RegressionPartitionedSVM
オブジェクト
交差検証された分割済みの回帰モデル。RegressionPartitionedModel
オブジェクト、RegressionPartitionedEnsemble
オブジェクト、RegressionPartitionedGAM
オブジェクト、RegressionPartitionedGP
オブジェクト、または RegressionPartitionedSVM
オブジェクトとして指定します。オブジェクトは 2 つの方法で作成できます。
次の表に記載されている学習済み回帰モデルをそのオブジェクト関数
crossval
に渡す。次の表に記載されている関数を使用して回帰モデルに学習をさせ、その関数の交差検証に関する名前と値の引数のいずれかを指定する。
回帰モデル | 関数 |
---|---|
RegressionEnsemble | fitrensemble |
RegressionGAM | fitrgam |
RegressionGP | fitrgp |
RegressionNeuralNetwork | fitrnet |
RegressionSVM | fitrsvm |
RegressionTree | fitrtree |
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: kfoldLoss(CVMdl,'Folds',[1 2 3 5])
は、平均二乗誤差の計算に 1 番目、2 番目、3 番目、および 5 番目の分割を使用し、4 番目の分割は除外するように指定します。
Folds
— 使用する分割のインデックス
1:CVMdl.KFold
(既定値) | 正の整数ベクトル
使用する分割のインデックス。正の整数ベクトルとして指定します。Folds
の要素は 1
から CVMdl.KFold
の範囲でなければなりません。
Folds
で指定された分割のみが使用されます。
例: 'Folds',[1 4 10]
データ型: single
| double
IncludeInteractions
— 交互作用項を含むというフラグ
true
| false
モデルの交互作用項を含むというフラグ。true
または false
として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、CVMdl
が RegressionPartitionedGAM
である場合だけです。
CVMdl
のモデル (CVMdl.Trained
) に交互作用項が含まれる場合、既定値は true
です。モデルに交互作用項が含まれない場合、値は false
でなければなりません。
例: 'IncludeInteractions',false
データ型: logical
LossFun
— 損失関数
'mse'
(既定値) | 関数ハンドル
損失関数。'mse'
または関数ハンドルとして指定します。
組み込み関数
'mse'
を指定します。この場合、損失関数は平均二乗誤差です。関数ハンドル表記を使用して独自の関数を指定します。
n は学習データの観測値数 (
CVMdl.NumObservations
) とします。使用する関数ではシグネチャがlossvalue =
になっていなければなりません。ここでlossfun
(Y,Yfit,W)出力引数
lossvalue
はスカラーです。関数名 (
lossfun
) を指定します。Y
は、観測された応答の n 行 1 列の数値ベクトルです。Yfit
は、予測された応答の n 行 1 列の数値ベクトルです。W
は、観測値の重みの n 行 1 列の数値ベクトルです。
'LossFun',@
を使用して独自の関数を指定します。lossfun
データ型: char
| string
| function_handle
Mode
— 出力の集約レベル
'average'
(既定値) | 'individual'
| 'cumulative'
出力の集約レベル。'average'
、'individual'
、または 'cumulative'
として指定します。
値 | 説明 |
---|---|
'average' | 出力は、すべての分割の平均を表すスカラー値です。 |
'individual' | 出力は、分割ごとに 1 つずつの値が含まれている長さ k のベクトルです。k は分割数です。 |
'cumulative' | メモ この値を指定する場合、
|
例: 'Mode','individual'
出力引数
L
— 損失
数値スカラー | 数値列ベクトル
損失。数値スカラーまたは数値列ベクトルとして返されます。
既定の損失は、検証分割観測値と、学習分割観測値で学習させた回帰モデルによる予測との間の平均二乗誤差です。
Mode
が'average'
である場合、L
はすべての分割の平均損失です。Mode
が'individual'
である場合、L
は各分割の損失が含まれている k 行 1 列の数値列ベクトルです。k は分割数です。Mode
が'cumulative'
でCVMdl
がRegressionPartitionedEnsemble
である場合、L
はmin(CVMdl.NumTrainedPerFold)
行 1 列の数値列ベクトルです。各要素j
は、弱学習器1:j
で学習させたアンサンブルを使用して取得したすべての分割の平均損失です。Mode
が'cumulative'
でCVMdl
がRegressionPartitionedGAM
の場合、出力の値はIncludeInteractions
の値によって異なります。IncludeInteractions
がfalse
の場合、L
は(1 + min(NumTrainedPerFold.PredictorTrees))
行 1 列の数値列ベクトルです。L
の最初の要素は、切片 (定数) 項のみを使用して取得したすべての分割の平均損失です。L
の(j + 1)
番目の要素は、切片項と各線形項の最初のj
個の予測子木を使用して取得した平均損失です。IncludeInteractions
がtrue
の場合、L
は(1 + min(NumTrainedPerFold.InteractionTrees))
行 1 列の数値列ベクトルです。L
の最初の要素は、切片 (定数) 項と各線形項のすべての予測子木を使用して取得したすべての分割の平均損失です。L
の(j + 1)
番目の要素は、切片項、各線形項のすべての予測子木、および各交互作用項の最初のj
個の交互作用木を使用して取得した平均損失です。
代替機能
木モデルの交差検証損失を計算する場合は、cvloss
を呼び出すことで RegressionPartitionedModel
オブジェクトの作成を回避できます。調査を複数回行う予定の場合、交差検証木オブジェクトを作成して時間を節約できます。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
この関数は、次のモデルの GPU 配列を完全にサポートします。
fitrtree
を使用するかRegressionTree
オブジェクトをcrossval
に渡して当てはめられたRegressionPartitionedModel
オブジェクト
詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2011a で導入R2023a: RegressionPartitionedSVM
モデルの GPU サポート
R2023a 以降では、kfoldLoss
で RegressionPartitionedSVM
モデルの GPU 配列が完全にサポートされます。
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)