ClassificationPartitionedLinear
高次元データのバイナリ分類用の交差検証済み線形モデル
説明
ClassificationPartitionedLinear
は、交差検証分割で学習を行った一連の線形分類モデルです。分類の品質や、線形分類モデルがどの程度一般化を行うかは、kfold 関数 kfoldPredict
、kfoldLoss
、kfoldMargin
、kfoldEdge
を 1 つ以上使用して推定できます。
すべての kfold オブジェクト関数では、学習分割 (分割内) 観測値で学習させたモデルを使用して検証分割 (分割外) 観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。ほぼ等しいサイズの 5 つのグループに各観測値が無作為に割り当てられます。"学習分割" にはグループのうち 4 つ (データの約 4/5) が含まれ、"検証分割" には他のグループ (データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
(
CVMdl.Trained{1}
に格納されている) 1 番目のモデルの学習には最後の 4 つのグループの観測値が使用され、1 番目のグループの観測値は検証用に確保されます。(
CVMdl.Trained{2}
に格納されている) 2 番目のモデルの学習には、1 番目のグループと最後の 3 つのグループの観測値が使用されます。2 番目のグループの観測値は、検証用に確保されます。3 番目、4 番目および 5 番目のモデルに対しても同様に続けられます。
kfoldPredict
を使用して検証する場合、モデル i を使用してグループ i の観測値についての予測が計算されます。つまり、それぞれの観測値に対する応答は、その観測値を使用せずに学習させたモデルによって推定されます。
メモ
ClassificationPartitionedLinear
モデル オブジェクトに予測子データ セットは格納されません。
作成
fitclinear
関数を使用し、名前と値の引数 CrossVal
、CVPartition
、Holdout
、KFold
、Leaveout
のいずれかを指定して、ClassificationPartitionedLinear
オブジェクトを作成できます。
プロパティ
交差検証のプロパティ
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'Linear'
はバイナリ分類または回帰について交差検証済みの線形モデルを指定します。
データ型: char
交差検証された分割の数。正の整数で指定します。
データ型: double
交差検証のパラメーター値 (線形モデルの交差検証に使用する名前と値のペアの引数など)。オブジェクトを指定します。推定したパラメーターは ModelParameters
に格納されません。
ModelParameters
のプロパティにはドット表記でアクセスします。
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
交差検証分割で学習を行った線形分類モデル。ClassificationLinear
モデルの cell 配列として指定します。Trained
には k 個のセルがあります。k は分割数です。
データ型: cell
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W
には NumObservations
個の要素があります。
W
は、特定のクラスに含まれている観測値の重みの合計がそのクラスの事前確率になるように正規化されます。
データ型: single
| double
モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
には NumObservations
個の要素があり、データ型はモデルの交差検証を実行するために fitclinear
に渡した入力引数 Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、予測子データの対応する観測値の観測された分類を表します。
データ型: categorical
| char
| logical
| single
| double
| cell
他の分類のプロパティ
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: single
| double
この プロパティ は読み取り専用です。
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型はクラス ラベル Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames
はクラスの順序も決定します。
データ型: categorical
| char
| logical
| single
| double
| cell
この プロパティ は読み取り専用です。
誤分類のコスト。正方数値行列として指定します。Cost
には K 個の行および列が含まれ、K はクラスの数です。
Cost(
は、真のクラスが i
,j
)i
である点をクラス j
に分類するコストです。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
データ型: double
予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames
の長さは、予測子変数として使用される学習データ X
または Tbl
に含まれている変数の数と等しくなります。
データ型: cell
この プロパティ は読み取り専用です。
事前クラス確率。数値ベクトルとして指定します。Prior
には、ClassNames
のクラスと同数の要素があり、その順序は ClassNames
の要素と一致します。
データ型: double
応答変数名。文字ベクトルを指定します。
データ型: char
予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。
線形分類モデルで変換前の場合、観測値 x (行ベクトル) について予測される分類スコアは f(x) = xβ + b になります。β と b はそれぞれ Mdl.Beta
と Mdl.Bias
に対応します。
スコア変換関数を function
などに変更するには、ドット表記を使用します。
組み込み関数の場合、
function
を表の値に置き換えて次のコードを入力します。Mdl.ScoreTransform = 'function';
値 説明 "doublelogit"
1/(1 + e–2x) "invlogit"
log(x / (1 – x)) "ismax"
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを 0 に設定する "logit"
1/(1 + e–x) "none"
または"identity"
x (変換なし) "sign"
x < 0 のとき –1
x = 0 のとき 0
x > 0 のとき 1"symmetric"
2x – 1 "symmetricismax"
最大のスコアをもつクラスのスコアを 1 に設定し、他のすべてのクラスのスコアを –1 に設定する "symmetriclogit"
2/(1 + e–x) – 1 MATLAB® 関数やユーザー定義関数の場合は、関数ハンドルを入力します。
Mdl.ScoreTransform = @function;
function
は、各クラスの元のスコアの行列を受け入れて、各クラスの変換後のスコアを表す同じサイズの行列を返さなければなりません。
データ型: char
| function_handle
オブジェクト関数
kfoldEdge | 交差検証済み線形分類モデルの分類エッジ |
kfoldLoss | 交差検証済み線形分類モデルの分類損失 |
kfoldMargin | 交差検証済み線形分類モデルの分類マージン |
kfoldPredict | 交差検証済み線形分類モデルの観測値の分類 |
例
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。
Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを特定します。
Ystats = Y == 'stats';
あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できるバイナリ線形分類モデルの交差検証を行います。
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'CrossVal','on')
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 10 Partition: [1×1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none' Properties, Methods
CVMdl
は、ClassificationPartitionedLinear
交差検証済みモデルです。既定の設定では fitclinear
は 10 分割の交差検証を実装するので、CVMdl.Trained
には 10 個の ClassificationLinear
モデルが格納されており、これらのモデルには各分割について線形分類モデルの学習を行った結果が格納されています。
CVMdl
を kfoldPredict
に渡して分割外観測値のラベルを推定し、kfoldLoss
に渡して汎化誤差を推定します。
oofLabels = kfoldPredict(CVMdl); ge = kfoldLoss(CVMdl)
ge = 7.6017e-04
推定された汎化誤差は、誤分類観測値の 0.1% 未満です。
ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。
モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。
Ystats = Y == 'stats';
~ の範囲で対数間隔で配置された 11 個の正則化強度を作成します。
Lambda = logspace(-6,-0.5,11);
モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。SpaRSA を使用して係数を推定します。目的関数の勾配の許容誤差を 1e-8
に下げます。
X = X'; rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns','KFold',5,... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 5 Partition: [1×1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none' Properties, Methods
numCLModels = numel(CVMdl.Trained)
numCLModels = 5
CVMdl
は ClassificationPartitionedLinear
モデルです。fitclinear
は 5 分割の交差検証を実装するので、各分割について学習させる 5 つの ClassificationLinear
モデルが CVMdl
に格納されます。
1 番目の学習済み線形分類モデルを表示します。
Mdl1 = CVMdl.Trained{1}
Mdl1 = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023×11 double] Bias: [-13.2936 -13.2936 -13.2936 -13.2936 -13.2936 -6.8954 -5.4359 -4.7170 -3.4108 -3.1566 -2.9792] Lambda: [1.0000e-06 3.5481e-06 1.2589e-05 4.4668e-05 1.5849e-04 5.6234e-04 0.0020 0.0071 0.0251 0.0891 0.3162] Learner: 'logistic' Properties, Methods
Mdl1
は ClassificationLinear
モデル オブジェクトです。fitclinear
は最初の 4 つの分割に対して学習を行うことにより Mdl1
を構築しました。Lambda
は正則化強度のシーケンスなので、Mdl1
はそれぞれが Lambda
の各正則化強度に対応する 11 個のモデルであると考えることができます。
交差検証分類誤差を推定します。
ce = kfoldLoss(CVMdl);
11 個の正則化強度があるので、ce
は 1 行 11 列の分類誤差率のベクトルです。
Lambda
の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。データ セット全体を使用し、モデルの交差検証を行ったときと同じオプションを指定して、各正則化強度について線形分類モデルに学習をさせます。モデルごとに非ゼロの係数を特定します。
Mdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',Lambda,'GradientTolerance',1e-8); numNZCoeff = sum(Mdl.Beta~=0);
同じ図に、各正則化強度についての交差検証分類誤差率と非ゼロ係数の頻度をプロットします。すべての変数を対数スケールでプロットします。
figure; [h,hL1,hL2] = plotyy(log10(Lambda),log10(ce),... log10(Lambda),log10(numNZCoeff)); hL1.Marker = 'o'; hL2.Marker = 'o'; ylabel(h(1),'log_{10} classification error') ylabel(h(2),'log_{10} nonzero-coefficient frequency') xlabel('log_{10} Lambda') title('Test-Sample Statistics') hold off
予測子変数のスパース性と分類誤差の低さのバランスがとれている正則化強度のインデックスを選択します。この場合、 ~ の値で十分なはずです。
idxFinal = 7;
選択した正則化強度のモデルを Mdl
から選択します。
MdlFinal = selectModels(Mdl,idxFinal);
MdlFinal
は、1 つの正則化強度が含まれている ClassificationLinear
モデルです。新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
拡張機能
ClassificationPartitionedLinear
モデルのオブジェクト関数は GPU 配列を完全にサポートしています。
バージョン履歴
R2016a で導入fitclinear
を使用して GPU 配列により ClassificationPartitionedLinear
オブジェクトを当てはめることができます。GPU で実行できるように、ClassificationPartitionedLinear
のオブジェクト関数で GPU 配列の入力引数がサポートされるようになりました。
R2022a 以降では、指定したコストの値を使用して観測誤分類コストを計算できるように、Cost
プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior
) と観測値の重み (W
) には、コスト行列で指定されているペナルティは反映されていません。観測誤分類コストを計算するには、関数 kfoldLoss
を呼び出すときに名前と値の引数 LossFun
を "classifcost"
として指定します。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost
プロパティには既定のコスト行列が格納され、Prior
プロパティと W
プロパティには学習に使用される事前確率と観測値の重みがそれぞれ格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率と観測値の重みが格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
Cost
プロパティと W
プロパティを使用するオブジェクト関数の一部を次に示します。
関数
kfoldLoss
は、名前と値の引数LossFun
を"classifcost"
または"mincost"
として指定した場合、Cost
プロパティに格納されたコスト行列を使用します。関数
kfoldLoss
およびkfoldEdge
は、W
プロパティに格納された観測値の重みを使用します。
分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
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)