ClassificationPartitionedLinearECOC
名前空間: classreg.learning.partition
スーパークラス: ClassificationPartitionedModel
高次元データのマルチクラス分類用の交差検証済み線形誤り訂正出力符号モデル
説明
ClassificationPartitionedLinearECOC
は、交差検証分割で学習を行った、線形分類モデルから構成される一連の誤り訂正出力符号 (ECOC) モデルです。kfold 関数 kfoldPredict
、kfoldLoss
、kfoldMargin
、kfoldEdge
を 1 つ以上使用する交差検証により、分類の品質を評価します。
すべての "kfold" メソッドでは、学習用データの観測値で学習したモデルを使用して、学習用データにはない観測値に対する応答を予測します。たとえば、データを 5 つに分割して交差検証を行うとします。この場合、各観測は 5 つのほぼ等しいサイズのグループに無作為に割り当てられます。"学習用分割" にはグループのうち 4 つ (すなわち、データの約 4/5) が含まれ、"テスト用分割" には残りのグループ (すなわち、データの約 1/5) が含まれます。この場合、交差検証は次のように処理されます。
CVMdl.Trained{1}
に保存されている最初のモデルは、後の 4 グループの観測値によって学習され、最初のグループの観測値を検証用に保存します。1 番目のグループと最後の 3 つのグループの観測値を使用して 2 番目のモデル (
CVMdl.Trained{2}
に格納) に学習させます。2 番目のグループの観測値は、検証用に予約されます。3 番目、4 番目および 5 番目のモデルに対しても同様に続けられます。
kfoldPredict
を呼び出して検証する場合、最初のモデルを使用してグループ 1 の観測に対する予測が計算され、2 番目のモデルにはグループ 2 が計算され、以降同様です。つまり、それぞれの観測値に対する応答は、その観測値ではなく学習したモデルによって推定されます。
メモ
ClassificationPartitionedLinearECOC
モデル オブジェクトに予測子データ セットは格納されません。
構築
CVMdl = fitcecoc(X,Y,'Learners',t,Name,Value)
は、次の場合に交差検証済みの線形 ECOC モデルを返します。
t
が'Linear'
であるか、templateLinear
によって返されるテンプレート オブジェクトである。Name
が'CrossVal'
、'CVPartition'
、'Holdout'
または'KFold'
のいずれかである。
詳細は、fitcecoc
を参照してください。
プロパティ
CrossValidatedModel
— 交差検証されたモデル名
文字ベクトル
交差検証済みモデルの名前。文字ベクトルを指定します。
たとえば、'ECOC'
は交差検証された ECOC モデルを指定します。
データ型: char
KFold
— 交差検証された分割の数
正の整数
交差検証された分割の数。正の整数で指定します。
データ型: double
ModelParameters
— 交差検証パラメーター値
オブジェクト
交差検証パラメーター値。ECOC 分類器の交差検証に使用する名前と値のペアの引数の値など。オブジェクトとして指定します。ModelParameters
には推定されたパラメーターは格納されません。
ModelParameters
のプロパティにはドット表記でアクセスします。
NumObservations
— 観測値の数
正の数値スカラー
学習データに含まれている観測値の数。正の数値スカラーを指定します。
データ型: double
Partition
— データ分割
cvpartition
モデル
データを交差検証分割に分割する方法を含むデータ分割。cvpartition
モデルとして指定します。
Trained
— 交差検証分割で学習させたコンパクトな分類器
CompactClassificationECOC
モデルの cell 配列
交差検証分割で学習させたコンパクトな分類器。CompactClassificationECOC
モデルの cell 配列を指定します。Trained
には k 個のセルがあります。k は分割数です。
データ型: cell
W
— 観測値の重み
数値ベクトル
モデルの交差検証に使用した観測値の重み。数値ベクトルを指定します。W
には NumObservations
個の要素があります。
学習に使用する重みは正規化され sum(W,'omitnan')
は 1
になります。
データ型: single
| double
Y
— 観測されたクラス ラベル
categorical 配列 | 文字配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
モデルの交差検証に使用される、観測されたクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。Y
には NumObservations
個の要素があり、データ型はモデルの交差検証を実行するために fitcecoc
に渡した入力引数 Y
と同じです。(string 配列は文字ベクトルの cell 配列として扱われます)。
Y
の各行は、予測子データの観測値の観測された分類を表します。
データ型: char
| cell
| categorical
| logical
| single
| double
BinaryLoss
— バイナリ学習器損失関数
'hinge'
| 'quadratic'
この プロパティ は読み取り専用です。
バイナリ学習器の損失関数。損失関数名を表す文字ベクトルを指定します。
既定では、すべてのバイナリ学習器が SVM を使用する線形分類モデルである場合、BinaryLoss
は 'hinge'
です。すべてのバイナリ学習器がロジスティック回帰を使用する線形分類モデルである場合、BinaryLoss
は 'quadratic'
です。精度が向上する可能性を高めるには、kfoldPredict
または kfoldLoss
の名前と値の引数 BinaryLoss
を使用して、予測または損失を計算するときに既定以外のバイナリ損失関数を指定します。
サポートされるバイナリ損失関数のリストについては、バイナリ損失を参照してください。
データ型: char
BinaryY
— バイナリ学習器クラス ラベル
数値行列 | []
バイナリ学習器クラス ラベル。数値行列または []
として指定します。
符号化行列が分割全体で同一である場合、
BinaryY
はNumObservations
行 L 列の行列であり、L はバイナリ学習器の数 (size(CodingMatrix,2)
) です。BinaryY
の要素は-1
、0
または1
で、値は二分法によるクラス割り当てに対応します。次の表に、学習器j
が観測値k
をBinaryY(k,j)
の値に対応する二分クラスに割り当てる方法を示します。値 二分法によるクラス割り当て –1
学習器 j
は、観測値k
を陰性クラスに割り当てます。0
学習の前に、学習器 j
は観測値k
をデータ セットから削除します。1
学習器 j
は、観測値k
を陽性クラスに割り当てます。符号化行列が分割全体で異なる場合、
BinaryY
は空 ([]
) です。
データ型: double
CodingMatrix
— クラス割り当てを指定するコード
数値行列 | []
バイナリ学習器のクラス割り当てを指定するコード。数値行列または []
として指定します。
符号化行列が分割全体で同じである場合、
CodingMatrix
は K 行 L 列の行列です。K はクラスの数、L はバイナリ学習器の数です。CodingMatrix
の要素は-1
、0
または1
で、値は二分法によるクラス割り当てに対応します。次の表に、学習器j
がクラスi
の観測値をCodingMatrix(i,j)
の値に対応する二分クラスに割り当てる方法を示します。値 二分法によるクラス割り当て –1
学習器 j
は、クラスi
の観測値を陰性クラスに割り当てます。0
学習の前に、学習器 j
はクラスi
の観測値をデータ セットから削除します。1
学習器 j
は、クラスi
の観測値を陽性クラスに割り当てます。符号化行列が分割全体で異なる場合、
CodingMatrix
は空 ([]
) です。各分割の符号化行列を、Trained
プロパティを用いて取得します。たとえば、CVMdl.Trained{1}.CodingMatrix
は、交差検証された ECOC モデルCVMdl
の最初の分割の符号化行列です。
データ型: double
| single
| int8
| int16
| int32
| int64
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
内のクラスの順序に対応します。
fitcecoc
は、異なるタイプのバイナリ学習器に異なる誤分類のコストを組み込みます。
データ型: double
ResponseName
— 応答変数名
文字ベクトル
応答変数名。文字ベクトルを指定します。
データ型: char
ScoreTransform
— 予測されたスコアに適用するスコア変換関数
'none'
この プロパティ は読み取り専用です。
予測されたスコアに適用するスコア変換関数。'none'
を指定します。ECOC モデルではスコア変換はサポートされません。
メソッド
kfoldEdge | 学習で使用しない観測値の分類エッジ |
kfoldLoss | 学習で使用しない観測値の分類損失 |
kfoldMargin | 学習で使用しない観測値の分類マージン |
kfoldPredict | 学習で使用しない観測値のラベルの予測 |
コピーのセマンティクス
値。値のクラスがコピー操作に与える影響については、オブジェクトのコピーを参照してください。
例
交差検証済みマルチクラス線形分類モデルの作成
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。
あるドキュメンテーション Web ページがどの MATLAB® ツールボックスによるものであるかをページの単語数に基づいて識別できるマルチクラスの線形分類モデルを交差検証します。
rng(1); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners','linear','CrossVal','on')
CVMdl = ClassificationPartitionedLinearECOC CrossValidatedModel: 'LinearECOC' ResponseName: 'Y' NumObservations: 31572 KFold: 10 Partition: [1x1 cvpartition] ClassNames: [comm dsp ecoder fixedpoint hdlcoder phased physmod simulink stats supportpkg symbolic vision xpc] ScoreTransform: 'none'
CVMdl
は、ClassificationPartitionedLinearECOC
交差検証済みモデルです。既定の設定では fitcecoc
は 10 分割の交差検証を実装するので、CVMdl.Trained
には 10 個の CompactClassificationECOC
モデルが含まれている 10 行 1 列の cell ベクトルが格納されており、これらのモデルにはバイナリ線形分類モデルから構成される ECOC モデルの学習を各分割について行った結果が格納されています。
CVMdl
を kfoldPredict
に渡して分割外観測値のラベルを推定し、kfoldLoss
に渡して汎化誤差を推定します。
oofLabels = kfoldPredict(CVMdl); ge = kfoldLoss(CVMdl)
ge = 0.0958
推定された汎化誤差は、誤分類観測値の約 10% です。
汎化誤差を改善するには、他のソルバー (LBFGS など) を試します。線形分類モデルから構成される ECOC モデルに学習をさせるときの既定オプションを変更するには、templateLinear
を使用して線形分類モデル テンプレートを作成し、このテンプレートを fitcecoc
に渡します。
交差検証の使用による適切な LASSO ペナルティの特定
ロジスティック回帰学習器を使用する線形分類モデルから構成される ECOC モデルに適した LASSO ペナルティの強度を決定するため、5 分割の交差検証を実装します。
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。
簡単にするため、'simulink'
、'dsp'
、'comm'
のいずれでもない Y
の観測値すべてに対して 'others' というラベルを使用します。
Y(~(ismember(Y,{'simulink','dsp','comm'}))) = 'others';
~ の範囲で対数間隔で配置された 11 個の正則化強度を作成します。
Lambda = logspace(-7,-2,11);
ロジスティック回帰学習器を使用するように指定する線形分類モデル テンプレートを作成し、Lambda
の強度をもつ LASSO ペナルティを使用し、SpaRSA を使用して学習させ、目的関数の勾配の許容誤差を 1e-8
に下げます。
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8);
モデルを交差検証します。実行速度を向上させるため、予測子データを転置し、観測値が列単位であることを指定します。
X = X'; rng(10); % For reproducibility CVMdl = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns','KFold',5);
CVMdl
は ClassificationPartitionedLinearECOC
モデルです。
CVMdl
および格納されている各モデルを分析します。
numECOCModels = numel(CVMdl.Trained)
numECOCModels = 5
ECOCMdl1 = CVMdl.Trained{1}
ECOCMdl1 = CompactClassificationECOC ResponseName: 'Y' ClassNames: [comm dsp simulink others] ScoreTransform: 'none' BinaryLearners: {6×1 cell} CodingMatrix: [4×6 double] Properties, Methods
numCLModels = numel(ECOCMdl1.BinaryLearners)
numCLModels = 6
CLMdl1 = ECOCMdl1.BinaryLearners{1}
CLMdl1 = ClassificationLinear ResponseName: 'Y' ClassNames: [-1 1] ScoreTransform: 'logit' Beta: [34023×11 double] Bias: [-0.3169 -0.3169 -0.3168 -0.3168 -0.3168 -0.3167 -0.1725 -0.0805 -0.1762 -0.3450 -0.5174] Lambda: [1.0000e-07 3.1623e-07 1.0000e-06 3.1623e-06 1.0000e-05 3.1623e-05 1.0000e-04 3.1623e-04 1.0000e-03 0.0032 0.0100] Learner: 'logistic' Properties, Methods
fitcecoc
は 5 分割の交差検証を実装するので、各分割について学習させる CompactClassificationECOC
モデルから構成される 5 行 1 列の cell 配列が CVMdl
に格納されます。各 CompactClassificationECOC
モデルの BinaryLearners
プロパティには ClassificationLinear
モデルが格納されます。各コンパクト ECOC モデル内の ClassificationLinear
モデルの数は、それぞれのラベルの数と符号化設計によって決まります。Lambda
は正則化強度のシーケンスなので、CLMdl1
はそれぞれが Lambda
の各正則化強度に対応する 11 個のモデルであると考えることができます。
各正則化強度について 5 分割分類誤差の平均をプロットすることにより、モデルがどの程度一般化を行うかを判断します。グリッド全体で汎化誤差を最小化する正則化強度を特定します。
ce = kfoldLoss(CVMdl); figure; plot(log10(Lambda),log10(ce)) [~,minCEIdx] = min(ce); minLambda = Lambda(minCEIdx); hold on plot(log10(minLambda),log10(ce(minCEIdx)),'ro'); ylabel('log_{10} 5-fold classification error') xlabel('log_{10} Lambda') legend('MSE','Min classification error') hold off
データ セット全体を使用して線形分類モデルから構成される ECOC モデルに学習をさせ、最小の正則化強度を指定します。
t = templateLinear('Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',minLambda,'GradientTolerance',1e-8); MdlFinal = fitcecoc(X,Y,'Learners',t,'ObservationsIn','columns');
新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
バージョン履歴
R2016a で導入
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)