margin
クラス: ClassificationLinear
線形分類モデルの分類マージン
構文
説明
入力引数
バイナリ線形分類モデル。ClassificationLinear
モデル オブジェクトとして指定します。ClassificationLinear
モデル オブジェクトは、fitclinear
を使用して作成できます。
予測子データ。n 行 p 列の完全な行列またはスパース行列を指定します。この X
の配置は、各行が個々の観測値に、各列が個々の予測子変数に対応することを示しています。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、計算時間が大幅に短縮される可能性があります。
Y
の長さと X
の観測値数は同じでなければなりません。
データ型: single
| double
クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。
データ型: categorical
| char
| string
| logical
| single
| double
| cell
予測子データにおける観測値の次元。'columns'
または 'rows'
として指定します。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、最適化実行時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns'
を指定することはできません。
モデルを学習させるために使用する標本データ。table として指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl
に含めることができます。Tbl
には、Mdl
を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
または Y
を指定する必要はありません。
テーブルに格納されている標本データを使用して Mdl
の学習を行った場合、margin
の入力データもテーブルに格納されていなければなりません。
応答変数の名前。Tbl
内の変数の名前で指定します。Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
ResponseVarName
を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Y
として格納されている場合、ResponseVarName
として 'Y'
を指定します。それ以外の場合、Tbl
の列は Tbl.Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char
| string
出力引数
例
NLP のデータ セットを読み込みます。
load nlpdata
X
は予測子データのスパース行列、Y
はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。
モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。
Ystats = Y == 'stats';
あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できるバイナリ線形分類モデルに学習をさせます。観測値の 30% をホールドアウトするように指定します。SpaRSA を使用して目的関数を最適化します。
rng(1); % For reproducibility CVMdl = fitclinear(X,Ystats,'Solver','sparsa','Holdout',0.30); CMdl = CVMdl.Trained{1};
CVMdl
は ClassificationPartitionedLinear
モデルです。これには Trained
プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた ClassificationLinear
モデルが格納されています。
学習データとテスト データを分割の定義から抽出します。
trainIdx = training(CVMdl.Partition); testIdx = test(CVMdl.Partition);
学習標本とテスト標本のマージンを推定します。
mTrain = margin(CMdl,X(trainIdx,:),Ystats(trainIdx)); mTest = margin(CMdl,X(testIdx,:),Ystats(testIdx));
CMdl
内の正則化強度は 1 つなので、mTrain
と mTest
はそれぞれ長さが学習観測値数およびテスト観測値数に等しい列ベクトルになります。
箱ひげ図を使用して、両方のマージンのセットをプロットします。
figure; boxplot([mTrain; mTest],[zeros(size(mTrain,1),1); ones(size(mTest,1),1)], ... 'Labels',{'Training set','Test set'}); h = gca; h.YLim = [-5 60]; title 'Training- and Test-Set Margins'
学習セットとテスト セットでは、マージンの分布が同じように見えます。
特徴選択を行う方法の 1 つとして、複数のモデルからテスト標本マージンを比較します。この基準のみに基づくと、マージンが大きい方が分類器として優れています。
NLP のデータ セットを読み込みます。テスト標本のマージンの推定で説明されているようにデータを前処理します。
load nlpdata Ystats = Y == 'stats'; X = X'; rng(1); % For reproducibility
テスト用に観測値の 30% をホールドアウトするデータ分割を作成します。
Partition = cvpartition(Ystats,'Holdout',0.30); testIdx = test(Partition); % Test-set indices XTest = X(:,testIdx); YTest = Ystats(testIdx);
Partition
は、データ セットの分割を定義する cvpartition
オブジェクトです。
予測子変数の 10% を無作為に選択します。
p = size(X,1); % Number of predictors
idxPart = randsample(p,ceil(0.1*p));
2 つのバイナリ線形分類モデルに学習をさせます。1 つではすべての予測子を、もう 1 つではランダムな 10% の予測子を使用します。観測値が列に対応することを指定し、SpaRSA を使用して目的関数を最適化します。
CVMdl = fitclinear(X,Ystats,'CVPartition',Partition,'Solver','sparsa',... 'ObservationsIn','columns'); PCVMdl = fitclinear(X(idxPart,:),Ystats,'CVPartition',Partition,'Solver','sparsa',... 'ObservationsIn','columns');
CVMdl
および PCVMdl
は ClassificationPartitionedLinear
モデルです。
学習済みの ClassificationLinear
モデルを交差検証済みモデルから抽出します。
CMdl = CVMdl.Trained{1}; PCMdl = PCVMdl.Trained{1};
分類器ごとにテスト標本マージンを推定します。箱ひげ図を使用して、マージン セットの分布をプロットします。
fullMargins = margin(CMdl,XTest,YTest,'ObservationsIn','columns'); partMargins = margin(PCMdl,XTest(idxPart,:),YTest,... 'ObservationsIn','columns'); figure; boxplot([fullMargins partMargins],'Labels',... {'All Predictors','10% of the Predictors'}); h = gca; h.YLim = [-20 60]; title('Test-Sample Margins')
CMdl
のマージン分布は PCMdl
のマージン分布より高い位置にあります。
ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、テスト標本のマージンの分布を比較します。
NLP のデータ セットを読み込みます。テスト標本のマージンの推定で説明されているようにデータを前処理します。
load nlpdata Ystats = Y == 'stats'; X = X'; Partition = cvpartition(Ystats,'Holdout',0.30); testIdx = test(Partition); XTest = X(:,testIdx); YTest = Ystats(testIdx);
~ の範囲で対数間隔で配置された 11 個の正則化強度を作成します。
Lambda = logspace(-8,1,11);
各正則化強度を使用するバイナリ線形分類モデルに学習をさせます。SpaRSA を使用して目的関数を最適化します。目的関数の勾配の許容誤差を 1e-8
に下げます。
rng(10); % For reproducibility CVMdl = fitclinear(X,Ystats,'ObservationsIn','columns',... 'CVPartition',Partition,'Learner','logistic','Solver','sparsa',... 'Regularization','lasso','Lambda',Lambda,'GradientTolerance',1e-8)
CVMdl = ClassificationPartitionedLinear CrossValidatedModel: 'Linear' ResponseName: 'Y' NumObservations: 31572 KFold: 1 Partition: [1×1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none' Properties, Methods
学習済みの線形分類モデルを抽出します。
Mdl = CVMdl.Trained{1}
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023×11 double] Bias: [-11.3599 -11.3599 -11.3599 -11.3599 -11.3599 -7.2163 -5.1919 -3.7624 -3.1671 -2.9610 -2.9610] Lambda: [1.0000e-08 7.9433e-08 6.3096e-07 5.0119e-06 3.9811e-05 3.1623e-04 0.0025 0.0200 0.1585 1.2589 10] Learner: 'logistic' Properties, Methods
Mdl
は ClassificationLinear
モデル オブジェクトです。Lambda
は正則化強度のシーケンスなので、Mdl
はそれぞれが Lambda
の各正則化強度に対応する 11 個のモデルであると考えることができます。
テスト標本のマージンを推定します。
m = margin(Mdl,X(:,testIdx),Ystats(testIdx),'ObservationsIn','columns'); size(m)
ans = 1×2
9471 11
11 個の正則化強度があるので、m
は 11 列になります。
各正則化強度に対するテスト標本のマージンをプロットします。ロジスティック回帰スコアは [0,1] の範囲にあるので、マージンは [-1,1] の範囲にあります。グリッド全体でマージンを最大化する正則化強度を識別しやすくするため、マージンのスケールを変更します。
figure; boxplot(10000.^m) ylabel('Exponentiated test-sample margins') xlabel('Lambda indices')
いくつかの Lambda
の値では、 の付近でマージンの分布が密になっています。Lambda の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。
マージンの分布の中心が低下する直前にある正則化強度を選択します。
LambdaFinal = Lambda(5);
データ セット全体を使用して線形分類モデルに学習をさせます。目的の正則化強度を指定します。
MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',... 'Learner','logistic','Solver','sparsa','Regularization','lasso',... 'Lambda',LambdaFinal);
新しい観測値のラベルを推定するには、MdlFinal
と新しいデータを predict
に渡します。
詳細
バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。
このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。
x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。
各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
線形分類モデルの場合、行ベクトルである観測値 x を陽性クラスに分類する生の "分類スコア" は次により定義されます。
正則化強度が j のモデルでは、 は推定された係数の列ベクトル (モデルの Beta(:,j)
プロパティ)、 は推定されたスカラー バイアス (モデルの Bias(j)
プロパティ) です。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器から構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます (ScoreTransform
を参照)。
拡張機能
margin
関数は、tall 配列を次の使用上の注意事項および制限事項付きでサポートします。
margin
は talltable
データをサポートしていません。
詳細は、tall 配列を参照してください。
この関数は、GPU 配列を完全にサポートします。詳細は、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2016a で導入margin
は GPU 配列を完全にサポートします。
参考
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)