主要内容

kfoldLoss

学習で使用しない観測値の回帰損失

説明

l= kfoldLoss (CVMdlは,交差検証済みの線形回帰モデルCVMdlによって取得した交差検証平均二乗誤差(mse)を返します。まり,他のすべての観測値を使用して学習を行うときにホ,ルドアウトする観測値の回帰損失を,kfoldLossはすべての分割にいて推定します。

lには,CVMdlを構成する線形回帰モデルの各正則化強度に対する回帰損失が格納されます。

l= kfoldLoss (CVMdl名称,值は,1以上の名称,值引数のペアによって指定された追加オプションを使用します。たとえば,損失の計算に使用する分割や回帰損失関数を指定します。

入力引数

すべて展開する

交差検証済み線形回帰モデル。RegressionPartitionedLinearモデルオブジェクトとして指定します。RegressionPartitionedLinearモデルを作成するには,fitrlinearを使用し,交差検証用の名前と値のペアの引数のいずれかCrossValなど)を指定します。

推定値を取得するため,kfoldLossは線形回帰モデルの交差検証に使用したものと同じデ,タ(XおよびY)を適用します。

名前と値の引数

オプションの引数のペアをName1 = Value1,…,以=家として指定します。ここで的名字は引数名,价值は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

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

応答の予測に使用する分割の@ @ンデックス。“折叠”と正の整数の数値ベクトルから構成されるコンマ区切りのペアとして指定します。折叠の要素は1からCVMdl。KFoldの範囲でなければなりません。

例:“折叠”,[1 4 10]

デ,タ型:|

損失関数。“LossFun”と組み込み損失関数名または関数ハンドルから構成されるコンマ区切りのペアとして指定します。

  • 次の表は,使用可能な損失関数の一覧です。対応する文字ベクトルまたは字符串スカラ,を使用して,いずれかを指定します。また,この表では f x x β + b です。

    • βはp個の係数のベクトルです。

    • Xはp個の予測子変数による観測値です。

    • Bはスカラバアスです。

    説明
    “epsiloninsensitive” プシロン不感応損失: y f x 马克斯 0 | y f x | ε
    mse的 均方误差: y f x y f x 2

    “epsiloninsensitive”は支持向量机学習器のみに適しています。

  • 関数ハンドル表記を使用して独自の関数を指定します。

    nXの観測値数とします。使用する関数のシグネチャは次のようになっていなければなりません。

    lossvalue =lossfun(Y, Yhat W)
    ここで,

    • 出力引数lossvalueはスカラ,です。

    • 関数名 (lossfun)を選択します。

    • Yは観測された応答のn次元ベクトルです。kfoldLossには入力引数YYを渡します。

    • Yhatは予測された応答のn次元ベクトルです。これは预测の出力と同様です。

    • Wは,観測値の重みのn行1列の数値ベクトルです。

    “LossFun”@lossfunを使用して独自の関数を指定します。

デ,タ型:字符|字符串|function_handle

損失の集約レベル。“模式”“平均”または“个人”から構成されるコンマ区切りのペアとして指定します。

説明
“平均” 分割全体で平均した損失を返す
“个人” 各分割にいて損失を返す

例:“模式”,“个人”

出力引数

すべて展開する

交差検証回帰損失。数値スカラ,ベクトルまたは行列として返されます。lの解釈はLossFunによって異なります。

交差検証済みモデルの正則化強度の数(元素个数(CVMdl.Trained {1} .Lambda)に格納)をR、分割数 (CVMdl。KFoldに格納)をFとします。

  • 模式“平均”の場合,lは1行R列のベクトルになります。L (jは,正則化強度jを使用する交差検証済みモデルのすべての分割に対する平均回帰損失です。

  • それ以外の場合,lFR列の行列になります。L (jは,正則化強度jを使用する交差検証済みモデルの分割に対する回帰損失です。

kfoldLosslを推定するため,CVMdlを作成したデタを使用します(XYを参照)。

すべて展開する

次のモデルにより,10000個の観測値をシミュレ,トします。

y x 1 0 0 + 2 x 2 0 0 + e

  • X x 1 x 1 0 0 0 は,10%の要素が非ゼロ標準正規である10000行1000列のスパ,ス行列です。

  • eは,平均が0,標準偏差が0.3のランダムな正規誤差です。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

支持向量机学習器を使用する線形回帰モデルを交差検証します。

rng (1);%用于再现性CVMdl = fitrlinear(X,Y,“CrossVal”“上”);

CVMdlRegressionPartitionedLinearモデルです。既定では,10分割交差検証が実行されます。“KFold”名前と値のペアの引数を使用して分割数を変更できます。

検定標本のmseの平均を推定します。

mse = kfoldLoss(cvdl)
Mse = 0.1735

または,名前と値のペアの引数“模式”,“个人”kfoldLossで指定することにより,分割ごとのmseを取得できます。

K分割平均二乗誤差の推定で説明されているようにデ,タをシミュレ,トします。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);X = X';将观察结果列在栏中,以便更快地训练。

10分割の交差検証を使用して線形回帰モデルを交差検証します。SpaRSAを使用して目的関数を最適化します。

CVMdl = fitrlinear(X,Y,“CrossVal”“上”“ObservationsIn”“列”...“规划求解”“sparsa”);

CVMdlRegressionPartitionedLinearモデルです。このモデルに含まれている训练有素的プロパティは,学習セットを使用して学習を行ったRegressionLinearモデルが格納されている10行1列のcell配列です。

次の胡贝尔損失( δ = 1)を評価する無名関数を作成します。

l 1 w j j 1 n w j j

ここで

j 0 5 e j ˆ 2 | e j ˆ | - 0 5 | e j ˆ | 1 | e j ˆ | > 1

e j ˆ は観測値jの残差です。カスタム損失関数は特定の形式で記述しなければなりません。カスタム損失関数の記述に関するルルにいては,名前と値のペアの引数“LossFun”を参照してください。

huberloss = @ (Y, Yhat, W)和(W . * ((0.5 * (abs (Y-Yhat) < = 1)。* (Y-Yhat) ^ 2) +...((abs (Y-Yhat) > 1)。* abs (Y-Yhat) -0.5))) / (W)之和;

分割全体に対する平均の胡贝尔損失を推定します。また,各分割の胡贝尔損失も取得します。

mseAve = kfoldLoss(cvdl,“LossFun”huberloss)
mseAve = -0.4447
mseFold = kfoldLoss(CVMdl,“LossFun”huberloss,“模式”“个人”
mseFold =10×1-0.4454 -0.4473 -0.4452 -0.4469 -0.4434 -0.4427 -0.4471 -0.4430 -0.4438 -0.4426

最小二乗を使用する線形回帰モデルに適した套索ペナルティの強度を決定するため,5分割の交差検証を実装します。

次のモデルにより,10000個の観測値をシミュレ,トします。

y x 1 0 0 + 2 x 2 0 0 + e

  • X x 1 x 1 0 0 0 は,10%の要素が非ゼロ標準正規である10000行1000列のスパ,ス行列です。

  • eは,平均が0,標準偏差が0.3のランダムな正規誤差です。

rng (1)%用于再现性N = 1e4;D = 1e3;Nz = 0.1;X = sprandn(n,d,nz);Y = X(:,100) + 2*X(:,200) + 0.3*randn(n,1);

1 0 - 5 1 0 - 1 の範囲で対数間隔で配置された15個の正則化強度を作成します。

Lambda = logspace(-5,-1,15);

モデルを交差検証します。実行速度を向上させるため,予測子デ,タを転置し,観測値が列単位であることを指定します。SpaRSAを使用して目的関数を最適化します。

X = X';CVMdl = fitrlinear(X,Y,“ObservationsIn”“列”“KFold”5,“λ”λ,...“学习者”“leastsquares”“规划求解”“sparsa”“正规化”“套索”);numCLModels = nummel (CVMdl.Trained)
numCLModels = 5

CVMdlRegressionPartitionedLinearモデルです。fitrlinearは5分割の交差検証を実装するので,各分割にいて学習させる5のRegressionLinearモデルがCVMdlに格納されます。

1番目の学習済み線形回帰モデルを表示します。

Mdl1 = CVMdl。训练有素的{1}
Mdl1 = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [1000x15 double]偏差:[-0.0049 -0.0049 -0.0049 -0.0049 -0.0048…[1.0000e-05 1.9307e-05 3.7276e-05 7.1969e-05…]学习者:'最小二乘'属性,方法

Mdl1RegressionLinearモデルオブジェクトです。fitrlinearは最初の4の分割に対して学習を行うことによりMdl1を構築しました。λは正則化強度のシ,ケンスなので,Mdl1はそれぞれがλの各正則化強度に対応する15個のモデルであると考えることができます。

交差検証されたmseを推定します。

mse = kfoldLoss(CVMdl);

λの値が大きくなると,予測子変数がスパ,スになります。これは回帰モデルの品質として優れています。データセット全体を使用し,モデルの交差検証を行ったときと同じオプションを指定して,各正則化強度について線形回帰モデルに学習をさせます。モデルごとに非ゼロの係数を特定します。

Mdl = fitrlinear(X,Y,“ObservationsIn”“列”“λ”λ,...“学习者”“leastsquares”“规划求解”“sparsa”“正规化”“套索”);numNZCoeff = sum(Mdl.Beta~=0);

同じ図に,各正則化強度にいての交差検証されたmseと非ゼロ係数の頻度をプロットします。すべての変数を対数スケ,ルでプロットします。

figure [h,hL1,hL2] = plotyy(log10(Lambda),log10(mse),...log10(λ)log10 (numNZCoeff));hL1。标志=“o”;hL2。标志=“o”;ylabel (h (1),“log_ {10} MSE的) ylabel (h (2),'log_{10}非零系数频率')包含(“log_{10}λ的)举行

图中包含2个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。

予測子変数のスパ,ス性とmseの低さのバランスがとれている正則化強度(λ(10)など)の选区ンデックスを選択します。

idxFinal = 10;

最小のmseに対応するモデルを抽出します。

MdlFinal = selectModels(Mdl,idxFinal)
MdlFinal = RegressionLinear ResponseName: 'Y' ResponseTransform: 'none' Beta: [1000x1 double]偏差:-0.0050 Lambda: 0.0037学习者:'最小二乘'属性,方法
idxNZCoeff = find(MdlFinal.Beta~=0)
idxNZCoeff =2×1100 200
EstCoeff = Mdl.Beta(idxNZCoeff)
EstCoeff =2×11.0051 - 1.9965

MdlFinalは,1の正則化強度があるRegressionLinearモデルです。非ゼロ係数EstCoeffは,デ,タをシミュレ,トした係数に近くなっています。

バ,ジョン履歴

R2016aで導入