Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ClassificationLinear クラス

高次元データのバイナリ分類用の線形モデル

説明

ClassificationLinear は、バイナリ分類用の学習済み線形モデル オブジェクトです。この線形モデルは、サポート ベクター マシン (SVM) またはロジスティック回帰モデルです。fitclinear は、高次元データセットの計算時間を短縮する手法 (確率的勾配降下法など) を使用して目的関数を最小化することにより ClassificationLinear モデルを当てはめます。分類損失と正則化項を加算することにより目的関数が構成されます。

他の分類モデルと異なり、メモリ消費を節約するため、ClassificationLinear モデル オブジェクトには学習データが格納されません。ただし、推定した線形モデル係数、事前クラス確率、正則化強度などは格納されます。

学習済みの ClassificationLinear モデルを使用して、新しいデータの分類スコアまたはラベルを予測できます。詳細については、predictを参照してください。

構築

ClassificationLinear オブジェクトの作成には fitclinear を使用します。

プロパティ

すべて展開する

線形分類のプロパティ

正則化項の強度。非負のスカラーまたは非負値のベクトルを指定します。

データ型: double | single

線形分類モデルのタイプ。'logistic' または 'svm' を指定します。

次の表では、f(x)=xβ+b. です。

  • β は p 個の係数のベクトルです。

  • x は p 個の予測子変数による観測値です。

  • b はスカラー バイアスです。

アルゴリズム損失関数FittedLoss の値
'svm'サポート ベクター マシンヒンジ: [y,f(x)]=max[0,1yf(x)]'hinge'
'logistic'ロジスティック回帰逸脱度 (ロジスティック): [y,f(x)]=log{1+exp[yf(x)]}'logit'

線形係数の推定値。展開された予測子の数と等しい長さの数値ベクトルとして指定します (ExpandedPredictorNames を参照)。

データ型: double

推定バイアス項またはモデルの切片。数値スカラーを指定します。

データ型: double

この プロパティ は読み取り専用です。

線形モデルの当てはめに使用する損失関数。'hinge' または 'logit' を指定します。

アルゴリズム損失関数Learner の値
'hinge'サポート ベクター マシンヒンジ: [y,f(x)]=max[0,1yf(x)]'svm'
'logit'ロジスティック回帰逸脱度 (ロジスティック): [y,f(x)]=log{1+exp[yf(x)]}'logistic'

複雑度ペナルティのタイプ。'lasso (L1)' または 'ridge (L2)' を指定します。

最小化のための目的関数は、平均損失関数 (FittedLoss を参照) と次の表の正則化値を加算することにより作成されます。

説明
'lasso (L1)'LASSO (L1) ペナルティ: λj=1p|βj|
'ridge (L2)'リッジ (L2) ペナルティ: λ2j=1pβj2

λ は、正則化項の強度を規定します (Lambda を参照)。

バイアス項 (β0) は正則化ペナルティから除外されます。

他の分類のプロパティ

カテゴリカル予測子のインデックス。正の整数のベクトルとして指定します。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

ClassificationLinear モデルに学習をさせるために使用したパラメーター。構造体を指定します。

ModelParameters のフィールドにはドット表記でアクセスします。たとえば、線形係数およびバイアス項の相対許容誤差にアクセスするには Mdl.ModelParameters.BetaTolerance を使用します。

データ型: struct

予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames の長さは、予測子変数として使用される学習データ X または Tbl に含まれている変数の数と等しくなります。

データ型: cell

展開された予測子名。文字ベクトルの cell 配列を指定します。

モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNamesPredictorNames と同じです。

データ型: cell

この プロパティ は読み取り専用です。

事前クラス確率。数値ベクトルとして指定します。Prior には、ClassNames のクラスと同数の要素があり、その順序は ClassNames の要素と一致します。

データ型: double

応答変数名。文字ベクトルを指定します。

データ型: char

予測されたスコアに適用するスコア変換関数。関数名または関数ハンドルを指定します。

線形分類モデルで変換前の場合、観測値 x (行ベクトル) について予測される分類スコアは f(x) = xβ + b になります。β と b はそれぞれ Mdl.BetaMdl.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

オブジェクト関数

edge線形分類モデルの分類エッジ
incrementalLearnerバイナリ分類用の線形モデルをインクリメンタル学習器に変換
limeLocal Interpretable Model-agnostic Explanations (LIME)
loss線形分類モデルの分類損失
margin線形分類モデルの分類マージン
partialDependence部分依存の計算
plotPartialDependence部分依存プロット (PDP) および個別条件付き期待値 (ICE) プロットの作成
predict線形分類モデルのラベルの予測
shapleyシャープレイ値
selectModels正則化されたバイナリ線形分類モデルのサブセットの選択
updateコード生成用にモデル パラメーターを更新

コピーのセマンティクス

値。値のクラスがコピー操作に与える影響については、オブジェクトのコピーを参照してください。

すべて折りたたむ

サポート ベクター マシン、双対 SGD およびリッジ正則化を使用して、バイナリ線形分類モデルに学習をさせます。

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 
[Mdl,FitInfo] = fitclinear(X,Ystats)
Mdl = 
  ClassificationLinear
      ResponseName: 'Y'
        ClassNames: [0 1]
    ScoreTransform: 'none'
              Beta: [34023x1 double]
              Bias: -1.0059
            Lambda: 3.1674e-05
           Learner: 'svm'


FitInfo = struct with fields:
                    Lambda: 3.1674e-05
                 Objective: 5.3783e-04
                 PassLimit: 10
                 NumPasses: 10
                BatchLimit: []
             NumIterations: 238561
              GradientNorm: NaN
         GradientTolerance: 0
      RelativeChangeInBeta: 0.0562
             BetaTolerance: 1.0000e-04
             DeltaGradient: 1.4582
    DeltaGradientTolerance: 1
           TerminationCode: 0
         TerminationStatus: {'Iteration limit exceeded.'}
                     Alpha: [31572x1 double]
                   History: []
                   FitTime: 0.1913
                    Solver: {'dual'}

MdlClassificationLinear モデルです。Mdl と学習データまたは新しいデータを loss に渡して、標本内分類誤差を調べることができます。または、Mdl と新しい予測子データを predict に渡して、新しい観測値のクラス ラベルを予測することができます。

FitInfo は、重要な情報として終了ステータス (TerminationStatus) とソルバーによるモデルのデータへの当てはめにかかった時間 (FitTime) が含まれている構造体配列です。FitInfo を使用して、最適化終了時の結果が満足できるものであるかどうかを判断することをお勧めします。モデルの再学習を試すこともできますが、学習時間は短いので、データを通す回数を増やしてください。このようにすると、DeltaGradient などの尺度が向上します。

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

load nlpdata
n = size(X,1); % Number of observations

Statistics and Machine Learning Toolbox™ のドキュメンテーション Web ページに対応するラベルを特定します。

Ystats = Y == 'stats';

5% のデータをホールドアウトします。

rng(1); % For reproducibility
cvp = cvpartition(n,'Holdout',0.05)
cvp = 
Hold-out cross validation partition
   NumObservations: 31572
       NumTestSets: 1
         TrainSize: 29994
          TestSize: 1578
          IsCustom: 0

cvp は、n 個のデータを学習セットとテスト セットに無作為に分割する方法を定義する CVPartition オブジェクトです。

あるドキュメンテーション Web ページの単語数が Statistics and Machine Learning Toolbox™ ドキュメンテーションによるものであるかどうかを識別できる学習セットを使用して、バイナリ線形分類モデルに学習をさせます。学習時間を短縮するため、観測値が列単位になるように予測子データの行列を配置します。

idxTrain = training(cvp); % Extract training set indices
X = X';
Mdl = fitclinear(X(:,idxTrain),Ystats(idxTrain),'ObservationsIn','columns');

ホールドアウト標本の観測値と分類誤差を予測します。

idxTest = test(cvp); % Extract test set indices
labels = predict(Mdl,X(:,idxTest),'ObservationsIn','columns');
L = loss(Mdl,X(:,idxTest),Ystats(idxTest),'ObservationsIn','columns')
L = 7.1753e-04

Mdl が誤分類する標本外観測値は 1% 未満です。

拡張機能

バージョン履歴

R2016a で導入

すべて展開する