edge
クラス: ClassificationLinear
線形分類モデルの分類エッジ
説明
は、e
= edge(Mdl
,Tbl
,ResponseVarName
)Tbl
に含まれている予測子データと Tbl.ResponseVarName
に含まれているクラス ラベルを使用して、学習済み線形分類器 Mdl
の分類エッジを返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、予測子データの列が観測値に対応するように指定したり、観測値の重みを与えることができます。e
= edge(___,Name,Value
)
メモ
予測子データ X
または Tbl
内の予測子変数に欠損値がある場合、関数 edge
で NaN が返されることがあります。詳細については、欠損値がある予測子データに対して edge で NaN が返されることがあるを参照してください。
入力引数
Mdl
— バイナリ線形分類モデル
ClassificationLinear
モデル オブジェクト
バイナリ線形分類モデル。ClassificationLinear
モデル オブジェクトとして指定します。ClassificationLinear
モデル オブジェクトは、fitclinear
を使用して作成できます。
X
— 予測子データ
非スパース行列 | スパース行列
予測子データ。n 行 p 列の非スパース行列またはスパース行列を指定します。この X
の配置は、各行が個々の観測値に、各列が個々の予測子変数に対応することを示しています。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、計算時間が大幅に短縮される可能性があります。
Y
の長さと X
の観測値数は同じでなければなりません。
データ型: single
| double
Y
— クラス ラベル
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。
データ型: categorical
| char
| string
| logical
| single
| double
| cell
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。必要に応じて、応答変数用および観測値の重み用の追加列を Tbl
に含めることができます。Tbl
には、Mdl
を学習させるために使用したすべての予測子が含まれていなければなりません。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
または Y
を指定する必要はありません。
テーブルに格納されている標本データを使用して Mdl
の学習を行った場合、edge
の入力データもテーブルに格納されていなければなりません。
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。Mdl
を学習させるために使用した応答変数が Tbl
に含まれている場合、ResponseVarName
を指定する必要はありません。
ResponseVarName
を指定する場合は、文字ベクトルまたは string スカラーとして指定しなければなりません。たとえば、応答変数が Tbl.Y
として格納されている場合、ResponseVarName
として 'Y'
を指定します。それ以外の場合、Tbl
の列は Tbl.Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。応答変数が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
データ型: char
| string
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
ObservationsIn
— 予測子データにおける観測値の次元
'rows'
(既定値) | 'columns'
予測子データにおける観測値の次元。'rows'
または 'columns'
として指定します。
メモ
観測値が列に対応するように予測子行列を配置して 'ObservationsIn','columns'
を指定すると、計算時間が大幅に短縮される可能性があります。table の予測子データに対して 'ObservationsIn','columns'
を指定することはできません。
データ型: char
| string
Weights
— 観測値の重み
ones(size(X,1),1)
(既定値) | 数値ベクトル | Tbl
内の変数の名前
観測値の重み。'Weights'
と数値ベクトル、または Tbl
に含まれる変数の名前から構成されるコンマ区切りのペアとして指定します。
Weights
として数値ベクトルを指定する場合、Weights
のサイズはX
またはTbl
内の観測値の個数と等しくなければなりません。Weights
としてTbl
内の変数名を指定する場合、名前は文字ベクトルまたは string スカラーでなければなりません。たとえば、重みがTbl.W
として格納されている場合、Weights
として'W'
を指定します。それ以外の場合、Tbl
の列はTbl.W
を含めてすべて予測子として扱われます。
重みを指定した場合、各正則化強度について、edge
は、加重分類エッジを計算し、合計がそれぞれのクラスの事前確率の値になるように重みを正規化します。
データ型: double
| single
出力引数
例
テスト標本のエッジの推定
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);
学習標本とテスト標本のエッジを推定します。
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
および PCVMdl
は ClassificationPartitionedLinear
モデルです。
学習済みの 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 ペナルティの特定
ロジスティック回帰学習器を使用する線形分類モデルに適した 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: [1x1 cvpartition] ClassNames: [0 1] ScoreTransform: 'none'
学習済みの線形分類モデルを抽出します。
Mdl = CVMdl.Trained{1}
Mdl = ClassificationLinear ResponseName: 'Y' ClassNames: [0 1] ScoreTransform: 'logit' Beta: [34023x11 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'
Mdl
は ClassificationLinear
モデル オブジェクトです。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.9933 0.9765 0.9202 0.8340 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
に渡します。
詳細
分類エッジ
"分類エッジ" は、分類マージンの加重平均です。
特徴選択を実行する場合などに複数の分類器から選択する方法の 1 つは、エッジが最大になる分類器を選択することです。
分類マージン
バイナリ分類の "分類マージン" は、各観測値における真のクラスの分類スコアと偽のクラスの分類スコアの差です。
このソフトウェアでは、バイナリ分類の分類マージンは次のように定義されます。
x は観測値です。x の真のラベルが陽性クラスである場合、y は 1、それ以外の場合は –1 です。f(x) は観測値 x についての陽性クラスの分類スコアです。一般的には、分類マージンは m = yf(x) と定義されています。
各マージンのスケールが同じである場合、マージンを分類の信頼尺度として使用できます。複数の分類器の中で、マージンが大きい分類器の方が優れています。
分類スコア
線形分類モデルの場合、行ベクトルである観測値 x を陽性クラスに分類する生の "分類スコア" は次により定義されます。
正則化強度が j のモデルでは、 は推定された係数の列ベクトル (モデルの Beta(:,j)
プロパティ)、 は推定されたスカラー バイアス (モデルの Bias(j)
プロパティ) です。
x を陰性クラスに分類する生の分類スコアは -f(x) です。このソフトウェアでは、スコアが正になるクラスに観測値が分類されます。
線形分類モデルがロジスティック回帰学習器から構成されている場合、このソフトウェアでは 'logit'
スコア変換が生の分類スコアに適用されます (ScoreTransform
を参照)。
アルゴリズム
既定の設定では、観測値の重みはクラスの事前確率です。Weights
を使用して重みを指定した場合、合計がそれぞれのクラスの事前確率になるように正規化されます。重み付きエッジの推定には、正規化された重みが使用されます。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
バージョン履歴
R2016a で導入R2022a: 既定以外のコスト行列をもつモデルに対して edge
で異なる値が返される
入力モデル オブジェクトに学習させるときに既定以外のコスト行列を指定すると、関数 edge
で以前のリリースとは異なる値が返されます。
関数 edge
は、Prior
プロパティに格納された事前確率を使用して入力データの観測値の重みを正規化します。Prior
プロパティの値を関数で使用する方法については変更されていません。ただし、既定以外のコスト行列をもつモデルについて入力モデル オブジェクトに格納されるプロパティの値が変更されたため、関数から異なる値が返されることがあります。
プロパティの値の変更に関する詳細については、Cost プロパティにユーザー指定のコスト行列を格納を参照してください。
ソフトウェアでコスト行列、事前確率、および観測値の重みを以前のリリースと同じように扱う場合は、誤分類コスト行列に応じた事前確率と観測値の重みの調整の説明に従って、既定以外のコスト行列の事前確率と観測値の重みを調整します。その後、分類モデルに学習させるときに、調整後の事前確率と観測値の重みを名前と値の引数 Prior
と Weights
を使用して指定し、既定のコスト行列を使用します。
R2022a: 欠損値がある予測子データに対して edge
で NaN が返されることがある
関数 edge
で分類マージンの加重平均を計算する際に、スコアが NaN の観測値が省略されなくなりました。そのため、予測子データ X
または Tbl
内の予測子変数に欠損値がある場合に edge
で NaN が返されることがあります。ほとんどの場合、テスト セットの観測値に予測子の欠損がなければ、関数 edge
で NaN が返されることはありません。
この変更により、fitcauto
を使用する場合の分類モデルの自動選択が改善されます。この変更の前は、NaN 以外の予測子が少ないモデルが選択される (新しいデータの分類に最適であると予測される) ことがありました。
コードの edge
で NaN が返される場合、このような結果にならないようにコードを更新できます。rmmissing
または fillmissing
を使用して、欠損値を削除するか置き換えます。
次の表に、オブジェクト関数 edge
で NaN が返される可能性がある分類モデルを示します。詳細については、それぞれの関数 edge
の「互換性の考慮事項」を参照してください。
モデル タイプ | 完全またはコンパクトなモデル オブジェクト | オブジェクト関数 edge |
---|---|---|
判別分析分類モデル | ClassificationDiscriminant , CompactClassificationDiscriminant | edge |
分類用のアンサンブル学習器 | ClassificationEnsemble , CompactClassificationEnsemble | edge |
ガウス カーネル分類モデル | ClassificationKernel | edge |
k 最近傍分類モデル | ClassificationKNN | edge |
線形分類モデル | ClassificationLinear | edge |
ニューラル ネットワーク分類モデル | ClassificationNeuralNetwork , CompactClassificationNeuralNetwork | edge |
サポート ベクター マシン (SVM) 分類モデル | edge |
参考
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)