Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

edge

クラス: ClassificationLinear

線形分類モデルの分類エッジ

説明

e = edge(Mdl,X,Y) は、X の予測子データと Y の対応するクラス ラベルを使用して、バイナリ線形分類モデル Mdl分類エッジを返します。e には、Mdl の各正則化強度の分類エッジが格納されます。

e = edge(___,Name,Value) では、前の構文のいずれかと、1 つ以上の Name,Value ペア引数によって指定される追加オプションを使用します。たとえば、予測子データの列が観測値に対応するように指定したり、観測値の重みを与えることができます。

入力引数

すべて展開する

バイナリ線形分類モデル。ClassificationLinear モデル オブジェクトとして指定します。ClassificationLinear モデル オブジェクトは、fitclinear を使用して作成できます。

予測子データ。n 行 p 列の非スパース行列またはスパース行列を指定します。この X の配置は、各行が個々の観測値に、各列が個々の予測子変数に対応することを示しています。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、計算時間が大幅に短縮される可能性があります。

Y の長さと X の観測値数は同じでなければなりません。

データ型: single | double

クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • Y のデータ型は Mdl.ClassNames のデータ型と同じでなければなりません。(string 配列は文字ベクトルの cell 配列として扱われます)。

  • Y の各クラスは Mdl.ClassNames のサブセットでなければなりません。

  • Y が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。

  • Y の長さと X の観測値数は同じでなければなりません。

データ型: categorical | char | string | logical | single | double | cell

名前と値のペアの引数

オプションの Name,Value 引数のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

予測子データにおける観測値の次元。'ObservationsIn''columns' または 'rows' から構成されるコンマ区切りのペアとして指定します。

メモ

観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns' を指定すると、最適化実行時間が大幅に短縮される可能性があります。

観測値の重み。'Weights' と正の値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。重みを指定すると、edge は重み付きの分類エッジを計算します。

nX の観測値数とします。

  • numel(Weights)n でなければなりません。

  • 既定では Weightsones(n,1) です。

edge は、合計がそれぞれのクラスの事前確率の値になるように Weights を正規化します。

データ型: double | single

出力引数

すべて展開する

分類エッジ。数値スカラーまたは行ベクトルとして返されます。

e のサイズは Mdl.Lambda と同じです。e(j) は、正則化強度 Mdl.Lambda(j) を使用して学習を行った線形分類モデルの分類エッジです。

すべて展開する

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};

CVMdlClassificationPartitionedLinear モデルです。これには Trained プロパティが含まれています。これは 1 行 1 列の cell 配列で、学習セットにより学習させた ClassificationLinear モデルが格納されています。

学習データと検定データを分割の定義から抽出します。

trainIdx = training(CVMdl.Partition);
testIdx = test(CVMdl.Partition);

学習標本と検定標本のエッジを推定します。

eTrain = edge(CMdl,X(trainIdx,:),Ystats(trainIdx))
eTrain = 15.6660
eTest = edge(CMdl,X(testIdx,:),Ystats(testIdx))
eTest = 15.4767

特徴選択を行う方法の 1 つとして、複数のモデルから検定標本エッジを比較します。この条件のみに基づくと、エッジが最高となる分類器が最善の分類器となります。

NLP のデータセットを読み込みます。

load nlpdata

X は予測子データのスパース行列、Y はクラス ラベルの categorical ベクトルです。データには 2 つを超えるクラスがあります。

モデルでは、ある Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できなければなりません。したがって、Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを識別します。実行時間を短縮するため、各観測値が列に対応するように予測子データを配置します。

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 オブジェクトです。

予測子変数の半分を無作為に選択します。

p = size(X,1); % Number of predictors
idxPart = randsample(p,ceil(0.5*p));

2 つのバイナリ線形分類モデルに学習をさせます。1 つではすべての予測子を、もう 1 つでは半分の予測子を使用します。観測値が列に対応することを指定し、SpaRSA を使用して目的関数を最適化します。

CVMdl = fitclinear(X,Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');
PCVMdl = fitclinear(X(idxPart,:),Ystats,'CVPartition',Partition,'Solver','sparsa',...
    'ObservationsIn','columns');

CVMdl および PCVMdlClassificationPartitionedLinear モデルです。

学習済みの ClassificationLinear モデルを交差検証済みモデルから抽出します。

CMdl = CVMdl.Trained{1};
PCMdl = PCVMdl.Trained{1};

分類器ごとに検定標本エッジを推定します。

fullEdge = edge(CMdl,XTest,YTest,'ObservationsIn','columns')
fullEdge = 15.4767
partEdge = edge(PCMdl,XTest(idxPart,:),YTest,'ObservationsIn','columns')
partEdge = 13.4458

検定標本のエッジに基づくと、すべての予測子を使用する分類器の方がモデルとして優れています。

ロジスティック回帰学習器を使用する線形分類モデルに適した LASSO ペナルティの強度を決定するため、検定標本のエッジを比較します。

NLP のデータセットを読み込みます。検定標本のエッジを使用した特徴選択で説明されているようにデータを前処理します。

load nlpdata
Ystats = Y == 'stats';
X = X'; 

Partition = cvpartition(Ystats,'Holdout',0.30);
testIdx = test(Partition);
XTest = X(:,testIdx);
YTest = Ystats(testIdx);

10-8101 の範囲で対数間隔で配置された 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 = 
  classreg.learning.partition.ClassificationPartitionedLinear
    CrossValidatedModel: 'Linear'
           ResponseName: 'Y'
        NumObservations: 31572
                  KFold: 1
              Partition: [1x1 cvpartition]
             ClassNames: [0 1]
         ScoreTransform: 'none'


  Properties, Methods

学習済みの線形分類モデルを抽出します。

Mdl = CVMdl.Trained{1}
Mdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'logit'
              Beta: [34023x11 double]
              Bias: [1x11 double]
            Lambda: [1x11 double]
           Learner: 'logistic'


  Properties, Methods

MdlClassificationLinear モデル オブジェクトです。Lambda は正則化強度のシーケンスなので、Mdl はそれぞれが Lambda の各正則化強度に対応する 11 個のモデルであると考えることができます。

検定標本のエッジを推定します。

e = edge(Mdl,X(:,testIdx),Ystats(testIdx),'ObservationsIn','columns')
e = 1×11

    0.9986    0.9986    0.9986    0.9986    0.9986    0.9932    0.9764    0.9181    0.8332    0.8128    0.8128

11 個の正則化強度があるので、e は 1 行 11 列のエッジのベクトルです。

各正則化強度について検定標本のエッジをプロットします。グリッド全体でエッジを最大化する正則化強度を特定します。

figure;
plot(log10(Lambda),log10(e),'-o')
[~, maxEIdx] = max(e);
maxLambda = Lambda(maxEIdx);
hold on
plot(log10(maxLambda),log10(e(maxEIdx)),'ro');
ylabel('log_{10} test-sample edge')
xlabel('log_{10} Lambda')
legend('Edge','Max edge')
hold off

いくつかの Lambda の値で同じようにエッジが高くなっています。Lambda の値が大きくなると、予測子変数がスパースになります。これは分類器の品質として優れています。

エッジが低下する直前にある正則化強度を選択します。

LambdaFinal = Lambda(5);

データセット全体を使用して線形分類モデルに学習をさせ、エッジが最大になる正則化強度を指定します。

MdlFinal = fitclinear(X,Ystats,'ObservationsIn','columns',...
    'Learner','logistic','Solver','sparsa','Regularization','lasso',...
    'Lambda',LambdaFinal);

新しい観測値のラベルを推定するには、MdlFinal と新しいデータを predict に渡します。

詳細

すべて展開する

アルゴリズム

既定の設定では、観測値の重みはクラスの事前確率です。Weights を使用して重みを指定した場合、合計がそれぞれのクラスの事前確率になるように正規化されます。重み付きエッジの推定には、正規化された重みが使用されます。

拡張機能

R2016a で導入