このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ClassificationLinear クラス
高次元データのバイナリ分類用の線形モデル
説明
ClassificationLinear
は、バイナリ分類用の学習済み線形モデル オブジェクトです。この線形モデルは、サポート ベクター マシン (SVM) またはロジスティック回帰モデルです。fitclinear
は、高次元データセットの計算時間を短縮する手法 (確率的勾配降下法など) を使用して目的関数を最小化することにより ClassificationLinear
モデルを当てはめます。分類損失と正則化項を加算することにより目的関数が構成されます。
他の分類モデルと異なり、メモリ消費を節約するため、ClassificationLinear
モデル オブジェクトには学習データが格納されません。ただし、推定した線形モデル係数、事前クラス確率、正則化強度などは格納されます。
学習済みの ClassificationLinear
モデルを使用して、新しいデータの分類スコアまたはラベルを予測できます。詳細については、predict
を参照してください。
構築
ClassificationLinear
オブジェクトの作成には fitclinear
を使用します。
プロパティ
Lambda
— 正則化項の強度
非負のスカラー | 非負値のベクトル。
正則化項の強度。非負のスカラーまたは非負値のベクトルを指定します。
データ型: double
| single
Learner
— 線形分類モデルのタイプ
'logistic'
| 'svm'
線形分類モデルのタイプ。'logistic'
または 'svm'
を指定します。
次の表では、 です。
β は p 個の係数のベクトルです。
x は p 個の予測子変数による観測値です。
b はスカラー バイアスです。
値 | アルゴリズム | 損失関数 | FittedLoss の値 |
---|---|---|---|
'svm' | サポート ベクター マシン | ヒンジ: | 'hinge' |
'logistic' | ロジスティック回帰 | 逸脱度 (ロジスティック): | 'logit' |
Beta
— 線形係数の推定値
数値ベクトル
線形係数の推定値。長さが予測子数に等しい数値ベクトルを指定します。
データ型: double
Bias
— 推定バイアス項
数値スカラー
推定バイアス項またはモデルの切片。数値スカラーを指定します。
データ型: double
FittedLoss
— 線形モデルの当てはめに使用する損失関数
'hinge'
| 'logit'
この プロパティ は読み取り専用です。
線形モデルの当てはめに使用する損失関数。'hinge'
または 'logit'
を指定します。
値 | アルゴリズム | 損失関数 | Learner の値 |
---|---|---|---|
'hinge' | サポート ベクター マシン | ヒンジ: | 'svm' |
'logit' | ロジスティック回帰 | 逸脱度 (ロジスティック): | 'logistic' |
Regularization
— 複雑度ペナルティのタイプ
'lasso (L1)'
| 'ridge (L2)'
複雑度ペナルティのタイプ。'lasso (L1)'
または 'ridge (L2)'
を指定します。
最小化のための目的関数は、平均損失関数 (FittedLoss
を参照) と次の表の正則化値を加算することにより作成されます。
値 | 説明 |
---|---|
'lasso (L1)' | LASSO (L1) ペナルティ: |
'ridge (L2)' | リッジ (L2) ペナルティ: |
λ は、正則化項の強度を規定します (Lambda
を参照)。
バイアス項 (β0) は正則化ペナルティから除外されます。
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
ModelParameters
— モデルに学習をさせるために使用されたパラメーター
構造体
ClassificationLinear
モデルに学習をさせるために使用したパラメーター。構造体を指定します。
ModelParameters
のフィールドにはドット表記でアクセスします。たとえば、線形係数およびバイアス項の相対許容誤差にアクセスするには Mdl.ModelParameters.BetaTolerance
を使用します。
データ型: struct
PredictorNames
— 予測子名
文字ベクトルの cell 配列
予測子データに現れる順序で並んでいる予測子名。文字ベクトルの cell 配列として指定します。PredictorNames
の長さは、予測子変数として使用される学習データ X
または Tbl
に含まれている変数の数と等しくなります。
データ型: cell
ExpandedPredictorNames
— 展開された予測子名
文字ベクトルの cell 配列
展開された予測子名。文字ベクトルの cell 配列を指定します。
モデルがカテゴリカル変数用のエンコーディングを使用している場合、ExpandedPredictorNames
には展開された変数を表す名前が格納されます。それ以外の場合、ExpandedPredictorNames
は PredictorNames
と同じです。
データ型: 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
オブジェクト関数
edge | 線形分類モデルの分類エッジ |
incrementalLearner | バイナリ分類用の線形モデルをインクリメンタル学習器に変換 |
lime | Local 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' Properties, Methods
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.0865
Solver: {'dual'}
Mdl
は ClassificationLinear
モデルです。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
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% 未満です。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
fitclinear
を使用して線形分類モデルに学習をさせる場合、以下の制限が適用されます。予測子データの入力引数値は、行列である場合、非スパースの数値行列でなければなりません。コード生成ではスパース データがサポートされません。
正則化強度は 1 つしか指定できず、
'auto'
または名前と値のペアの引数'Lambda'
に非負のスカラーを指定します。名前と値のペアの引数
'ScoreTransform'
の値を無名関数にすることはできません。コーダー コンフィギュアラーを使用するコード生成では、以下の追加制限が適用されます。
カテゴリカル予測子 (
logical
、categorical
、char
、string
、またはcell
) はサポートされません。名前と値の引数CategoricalPredictors
は使用できません。カテゴリカル予測子をモデルに含めるには、モデルを当てはめる前にdummyvar
を使用してカテゴリカル予測子を前処理します。categorical
データ型のクラス ラベルはサポートされません。学習データ内のクラス ラベル値 (Tbl
またはY
) および名前と値の引数ClassNames
の値はどちらもcategorical
データ型の配列にはできません。
詳細は、コード生成の紹介を参照してください。
バージョン履歴
R2016a で導入R2022a: Cost
プロパティにユーザー指定のコスト行列を格納
R2022a 以降では、指定したコストの値を使用して観測誤分類コストを計算できるように、Cost
プロパティにユーザー指定のコスト行列が格納されます。ソフトウェアで格納される正規化された事前確率 (Prior
) には、コスト行列で指定されているペナルティは反映されていません。観測誤分類コストを計算するには、関数 loss
を呼び出すときに名前と値の引数 LossFun
を "classifcost"
として指定します。
モデルの学習は変更されていないため、クラス間の判定境界には変更がないことに注意してください。
学習用に、指定した事前確率が近似関数によって更新され、指定したコスト行列で指定されているペナルティが組み込まれます。さらに、事前確率と観測値の重みが正規化されます。この動作は変更されていません。以前のリリースでは、Cost
プロパティには既定のコスト行列が格納され、Prior
プロパティには学習に使用される事前確率が格納されていました。R2022a 以降では、ユーザー指定のコスト行列が変更なしで格納され、コストのペナルティが反映されていない正規化された事前確率が格納されます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
Cost
プロパティと Prior
プロパティを使用するオブジェクト関数の一部を次に示します。
関数
loss
は、名前と値の引数LossFun
を"classifcost"
または"mincost"
として指定した場合、Cost
プロパティに格納されたコスト行列を使用します。関数
loss
およびedge
は、入力データの観測値の重みを正規化するために、Prior
プロパティに格納された事前確率を使用します。
分類モデルに学習させるときに既定以外のコスト行列を指定すると、オブジェクト関数で以前のリリースとは異なる値が返されます。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 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)