このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
ClassificationPartitionedLinear
名前空間: classreg.learning.partition
スーパークラス: ClassificationPartitionedModel
高次元データのバイナリ分類用の交差検証済み線形モデル
説明
ClassificationPartitionedLinear
は、交差検証分割で学習を行った一連の線形分類モデルです。交差検証済みの線形分類モデルを取得するには、fitclinear
を使用して交差検証オプションのいずれかを指定します。分類の品質や、線形分類モデルがどの程度一般化を行うかは、kfold メソッド kfoldPredict
、kfoldLoss
、kfoldMargin
、kfoldEdge
を 1 つ以上使用して評価できます。
すべての "kfold" メソッドでは、学習用データの観測値で学習したモデルを使用して、学習用データにはない観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。この場合、各観測値は 5 つのほぼ等しいサイズのグループに無作為に割り当てられます。"学習用分割" にはグループのうち 4 つ (すなわち、データの約 4/5) が含まれ、"テスト用分割" には残りのグループ (すなわち、データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
CVMdl.Trained{1}
に保存されている最初のモデルは、後の 4 グループの観測値によって学習され、最初のグループの観測値を検証用に保存します。1 番目のグループと最後の 3 つのグループの観測値を使用して、
CVMdl.Trained{2}
に格納される 2 番目のモデルに学習させます。2 番目のグループの観測値は、検証用に予約されます。3 ~ 5 番目のモデルについて同様の処理が行われます。
kfoldPredict
を呼び出して検証する場合、最初のモデルを使用してグループ 1 の観測に対する予測が計算され、2 番目のモデルにはグループ 2 が計算され、以降同様です。つまり、それぞれの観測値に対する応答は、その観測値ではなく学習したモデルによって推定されます。
メモ
ClassificationPartitionedLinear
モデル オブジェクトに予測子データ セットは格納されません。
構築
CVMdl = fitclinear(X,Y,Name,Value)
は、Name
が 'CrossVal'
、'CVPartition'
、'Holdout'
または 'KFold'
のいずれかである場合に、交差検証済みの線形分類モデルを作成します。詳細は、fitclinear
を参照してください。
プロパティ
CrossValidatedModel
— 交差検証されたモデル名
文字ベクトル
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'Linear'
はバイナリ分類または回帰について交差検証済みの線形モデルを指定します。
データ型: char
KFold
— 交差検証された分割の数
正の整数
交差検証された分割の数。正の整数で指定します。
データ型: double
ModelParameters
— 交差検証パラメーター値
オブジェクト
交差検証のパラメーター値 (線形モデルの交差検証に使用する名前と値のペアの引数など)。オブジェクトを指定します。推定したパラメーターは ModelParameters
に格納されません。
ModelParameters
のプロパティにはドット表記でアクセスします。
NumObservations
— 観測値の数
正の数値スカラー
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
Partition
— データ分割
cvpartition
モデル
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
Trained
— 交差検証分割で学習を行った線形分類モデル
ClassificationLinear
モデル オブジェクトの cell 配列
交差検証分割で学習を行った線形分類モデル。ClassificationLinear
モデルの cell 配列として指定します。Trained
には k 個のセルがあります。k は分割数です。
データ型: cell
W
— 観測値の重み
数値ベクトル
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W
には NumObservations
個の要素があります。
W
は、特定のクラスに含まれている観測値の重みの合計がそのクラスの事前確率になるように正規化されます。
データ型: single
| double
Y
— 観測されたクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
には NumObservations
個の要素があり、データ型はモデルの交差検証を実行するために fitclinear
に渡した入力引数 Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、予測子データの対応する観測値の観測された分類を表します。
データ型: categorical
| char
| logical
| single
| double
| cell
CategoricalPredictors
— カテゴリカル予測子のインデックス
正の整数のベクトル | []
カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。CategoricalPredictors
には、対応する予測子がカテゴリカルであることを示すインデックス値が格納されます。インデックス値の範囲は 1 ~ p
です。p
はモデルの学習に使用した予測子の数です。どの予測子もカテゴリカルではない場合、このプロパティは空 ([]
) になります。
データ型: single
| double
ClassNames
— 一意のクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
学習で使用する一意なクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。ClassNames
のデータ型はクラス ラベル Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。ClassNames
はクラスの順序も決定します。
データ型: categorical
| char
| logical
| single
| double
| cell
Cost
— 誤分類のコスト
正方数値行列
この プロパティ は読み取り専用です。
誤分類のコスト。正方数値行列として指定します。Cost
には K 個の行および列が含まれ、K はクラスの数です。
Cost(
は、真のクラスが i
,j
)i
である点をクラス j
に分類するコストです。Cost
の行と列の順序は、ClassNames
のクラスの順序に対応します。
データ型: double
PredictorNames
— 予測子名
文字ベクトルの cell 配列
予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames
の長さは、予測子変数として使用される学習データ X
または Tbl
に含まれている変数の数と等しくなります。
データ型: cell
Prior
— 事前クラス確率
数値ベクトル
この プロパティ は読み取り専用です。
事前クラス確率。数値ベクトルとして指定します。Prior
には、ClassNames
のクラスと同数の要素があり、その順序は ClassNames
の要素と一致します。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
応答変数名。文字ベクトルを指定します。
データ型: char
ScoreTransform
— スコア変換関数
'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 'none'
| 関数ハンドル | ...
予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。
線形分類モデルで変換前の場合、観測値 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: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none'
CVMdl
は、ClassificationPartitionedLinear
交差検証済みモデルです。既定の設定では fitclinear
は 10 分割の交差検証を実装するので、CVMdl.Trained
には 10 個の ClassificationLinear
モデルが格納されており、これらのモデルには各分割について線形分類モデルの学習を行った結果が格納されています。
CVMdl
を kfoldPredict
に渡して分割外観測値のラベルを推定し、kfoldLoss
に渡して汎化誤差を推定します。
oofLabels = kfoldPredict(CVMdl); ge = kfoldLoss(CVMdl)
ge = 7.6017e-04
推定された汎化誤差は、誤分類観測値の 0.1% 未満です。
交差検証の使用による適切な LASSO ペナルティの特定
ロジスティック回帰学習器を使用する線形分類モデルに適した 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: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none'
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: [34023x11 double] Bias: [-13.5813 -13.5813 -13.5813 -13.5813 -13.5813 -7.0880 -5.4309 -4.7753 -3.5022 -3.2701 -2.9796] 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'
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
に渡します。
拡張機能
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
ClassificationPartitionedLinear
モデルのオブジェクト関数は GPU 配列を完全にサポートしています。
バージョン履歴
R2016a で導入R2024a: ClassificationPartitionedLinear
のオブジェクト関数に対する GPU 配列の指定 (Parallel Computing Toolbox が必要)
fitclinear
を使用して GPU 配列により ClassificationPartitionedLinear
オブジェクトを当てはめることができます。GPU で実行できるように、ClassificationPartitionedLinear
のオブジェクト関数で GPU 配列の入力引数がサポートされるようになりました。
R2022a: Cost
プロパティにユーザー指定のコスト行列を格納
R2022a 以降では、指定したコストの値を使用して観測誤分類コストを計算できるように、Cost
プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior
) と観測値の重み (W
) には、コスト行列で指定されているペナルティは反映されていません。観測誤分類コストを計算するには、関数 kfoldLoss
を呼び出すときに名前と値の引数 LossFun
を "classifcost"
として指定します。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost
プロパティには既定のコスト行列が格納され、Prior
プロパティと W
プロパティには学習に使用される事前確率と観測値の重みがそれぞれ格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率と観測値の重みが格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
Cost
プロパティと W
プロパティを使用するオブジェクト関数の一部を次に示します。
関数
kfoldLoss
は、名前と値の引数LossFun
を"classifcost"
または"mincost"
として指定した場合、Cost
プロパティに格納されたコスト行列を使用します。関数
kfoldLoss
およびkfoldEdge
は、W
プロパティに格納された観測値の重みを使用します。
分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
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)