メインコンテンツ

kfoldPredict

交差検証済み回帰モデル内の観測値に対する応答の予測

    説明

    yFit = kfoldPredict(CVMdl) は、交差検証済みの回帰モデル CVMdl によって予測された応答を返します。kfoldPredict は、すべての分割について、学習分割観測値に対して学習をさせたモデルを使用して、検証分割観測値の応答を予測します。CVMdl.X および CVMdl.Y には、両方の観測値のセットが含まれます。

    yFit = kfoldPredict(CVMdl,Name,Value) では、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、'IncludeInteractions',true は、一般化加法モデルの計算に交互作用項を含めるために指定します。

    [yFit,ySD,yInt] = kfoldPredict(___) は、前の構文におけるいずれかの入力引数の組み合わせを使用して、予測子データ CVMdl.X 内の各観測値で評価した応答変数の標準偏差と予測区間も返します。この構文は、CVMdlIsStandardDeviationFit プロパティが 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);

    holdoutPartitionkfoldPartition は、どちらも無作為な層化区分です。それぞれ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
    
    

    holdoutMdlkfoldMdlClassificationPartitionedModel オブジェクトです。

    kfoldLoss を使用して、holdoutMdlkfoldMdl の最小予測誤分類コストを計算します。どちらのモデルも既定のコスト行列を使用しているため、このコストは分類誤差と同じになります。

    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 の学習に使用された観測値に対して、kfoldPredictNaN スコアを返します。これらの観測値について、関数は最も頻度が高いクラス ラベルを予測ラベルとして選択します。このケースでは、すべてのクラスの頻度が同じであるため、関数は最初のクラス (setosa) を予測ラベルとして選択します。関数は、学習させたモデルを使用して検証セットの観測値に対する予測を返します。kfoldPredict は、その観測値を使用せずに学習させた kfoldMdl.Trained のモデルを使用して kfoldMdl のそれぞれの予測を返します。

    未観測データに対する応答を予測するには、holdoutMdlkfoldMdl などの分割されたモデルではなく、データ セット全体で学習させたモデル (Mdl) とその predict 関数を使用します。

    入力引数

    すべて折りたたむ

    交差検証された分割済みの回帰モデル。RegressionPartitionedModel オブジェクト、RegressionPartitionedEnsemble オブジェクト、RegressionPartitionedGAM オブジェクト、RegressionPartitionedGP オブジェクト、RegressionPartitionedNeuralNetwork オブジェクト、または RegressionPartitionedSVM オブジェクトとして指定します。オブジェクトは 2 つの方法で作成できます。

    • 次の表に記載されている学習済み回帰モデルをそのオブジェクト関数 crossval に渡す。

    • 次の表に記載されている関数を使用して回帰モデルに学習をさせ、その関数の交差検証に関する名前と値の引数のいずれかを指定する。

    名前と値の引数

    すべて折りたたむ

    オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

    R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

    例: 'Alpha',0.01,'IncludeInteractions',false は信頼水準を 99% として指定し、一般化加法モデルの計算から交互作用項を除外します。

    予測区間 yInt の信頼水準の有意水準。範囲 [0,1] の数値スカラーとして指定します。yInt の信頼水準は 100(1 – Alpha)% と等しくなります。

    この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、この引数を指定できるのは、CVMdlRegressionPartitionedGAM であり、かつ CVMdlIsStandardDeviationFit プロパティが true である場合だけです。

    例: 'Alpha',0.01

    データ型: single | double

    モデルの交互作用項を含むというフラグ。true または false として指定します。この引数は、一般化加法モデル (GAM) の場合のみ有効です。つまり、この引数を指定できるのは、CVMdlRegressionPartitionedGAM である場合だけです。

    CVMdl のモデル (CVMdl.Trained) に交互作用項が含まれる場合、既定値は true です。モデルに交互作用項が含まれない場合、値は false でなければなりません。

    データ型: logical

    R2023b 以降

    予測子に欠損値がある観測値に使用する予測した応答値。"median""mean"、または数値スカラーとして指定します。この引数は、ガウス過程回帰モデル、ニューラル ネットワーク モデル、サポート ベクター マシン モデルに対してのみ有効です。つまり、この引数を指定できるのは、CVMdlRegressionPartitionedGP オブジェクト、RegressionPartitionedNeuralNetwork オブジェクト、または RegressionPartitionedSVM オブジェクトである場合だけです。

    説明
    "median"

    kfoldPredict は、予測子に欠損値がある観測値について予測した応答値として、学習分割データ内の観測された応答値の中央値を使用します。

    この値は、CVMdlRegressionPartitionedGP オブジェクト、RegressionPartitionedNeuralNetwork オブジェクト、または RegressionPartitionedSVM オブジェクトである場合の既定値です。

    "mean"kfoldPredict は、予測子に欠損値がある観測値について予測した応答値として、学習分割データ内の観測された応答値の平均値を使用します。
    数値スカラーkfoldPredict は、予測子に欠損値がある観測値について予測した応答値として、この値を使用します。

    例: "PredictionForMissingValue","mean"

    例: "PredictionForMissingValue",NaN

    データ型: single | double | char | string

    出力引数

    すべて折りたたむ

    予測応答。n 行 1 列の数値ベクトルとして返されます。n は観測値の個数です (観測値が行に含まれる場合、nsize(CVMdl.X,1) です)。yFit の各エントリは、CVMdl.X に対応する行で予測応答と一致します。

    ホールドアウト検証の手法を使用して CVMdl を作成する (つまり、CVMdl.KFold1 である) 場合、yFit には学習分割観測値について NaN 値が含まれます。

    予測子データ CVMdl.X 内の各観測値で評価した応答変数の標準偏差。長さが n の列ベクトルとして返されます。n は、予測子データ CVMdl.X に含まれている観測値の個数です。i 番目の要素 ySD(i) に、CVMdl の学習済みの標準偏差モデルを使用して評価した i 番目の観測値 CVMdl.X(i,:) に対する i 番目の応答の標準偏差が格納されます。

    この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、kfoldPredict がこの引数を返せるのは、CVMdlRegressionPartitionedGAM であり、かつ CVMdlIsStandardDeviationFit プロパティが true である場合だけです。

    予測子データ CVMdl.X 内の各観測値で評価した応答変数の予測区間。n 行 2 列の行列として返されます。n は、予測子データ CVMdl.X に含まれている観測値の個数です。i 番目の行 yInt(i,:) に、ySD(i) を使用している i 番目の観測値 CVMdl.X(i,:) に対する i 番目の応答の推定された 100(1 – Alpha)% の予測区間が格納されます。Alpha 値は、予測区間に真の応答値 CVMdl.Y(i) が含まれない確率です。yInt の 1 列目には予測区間の下限が、2 列目には上限が格納されます。

    この引数は、標準偏差当てはめを含む一般化加法モデル オブジェクトの場合のみ有効です。つまり、kfoldPredict がこの引数を返せるのは、CVMdlRegressionPartitionedGAM であり、かつ CVMdlIsStandardDeviationFit プロパティが true である場合だけです。

    拡張機能

    すべて展開する

    バージョン履歴

    R2011a で導入

    すべて展開する