最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。
ランダムな特徴量拡張を使用してガウス カーネル分類モデルをあてはめる
fitckernel
は、非線形分類用のバイナリ ガウス カーネル分類モデルの学習または交差検証を行います。fitckernel
は、大規模な学習セットが含まれているビッグ データ事例に対する方が実用的ですが、メモリに収まる小規模なデータセットにも適用できます。
fitckernel
は、低次元空間のデータを高次元空間にマッピングしてから、正則化された目的関数を最小化することによって高次元空間で線形モデルをあてはめます。高次元空間で線形モデルを取得することは、低次元空間におけるモデルへのガウス カーネルの適用と等価です。使用可能な線形分類モデルには、正則化されたサポート ベクター マシン (SVM) とロジスティック回帰モデルがあります。
インメモリ データのバイナリ分類用の非線形 SVM モデルに学習をさせる方法については、fitcsvm
を参照してください。
は、1 つ以上の名前と値のペアの引数で指定された追加オプションを使用して、カーネル分類モデルを返します。たとえば、ロジスティック回帰の実装、拡張空間の次元数の指定、交差検証の指定を行うことができます。Mdl
= fitckernel(X
,Y
,Name,Value
)
[
は、名前と値のペアの引数 Mdl
,FitInfo
,HyperparameterOptimizationResults
] = fitckernel(___)'OptimizeHyperparameters'
を使用してハイパーパラメーターを最適化する場合に、ハイパーパラメーター最適化の結果 HyperparameterOptimizationResults
も返します。
SVM を使用して、バイナリ カーネル分類モデルに学習をさせます。
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
[n,p] = size(X)
n = 351
p = 34
resp = unique(Y)
resp = 2x1 cell
{'b'}
{'g'}
レーダー反射が不良 ('b'
) と良好 ('g'
) のどちらであるかを識別するバイナリ カーネル分類モデルに学習をさせます。あてはめの要約を抽出して、最適化アルゴリズムによりモデルがどの程度適切にデータにあてはめられたかを判断します。
rng('default') % For reproducibility [Mdl,FitInfo] = fitckernel(X,Y)
Mdl = ClassificationKernel ResponseName: 'Y' ClassNames: {'b' 'g'} Learner: 'svm' NumExpansionDimensions: 2048 KernelScale: 1 Lambda: 0.0028 BoxConstraint: 1 Properties, Methods
FitInfo = struct with fields:
Solver: 'LBFGS-fast'
LossFunction: 'hinge'
Lambda: 0.0028
BetaTolerance: 1.0000e-04
GradientTolerance: 1.0000e-06
ObjectiveValue: 0.2604
GradientMagnitude: 0.0028
RelativeChangeInBeta: 8.2512e-05
FitTime: 0.0826
History: []
Mdl
は ClassificationKernel
モデルです。標本内分類誤差を調べるには、Mdl
と学習データまたは新しいデータを関数 loss
に渡すことができます。または、Mdl
と新しい予測子データを関数 predict
に渡して、新しい観測値のクラス ラベルを予測することができます。また、Mdl
と学習データを関数 resume
に渡して学習を続行することもできます。
FitInfo
は、最適化情報が格納されている構造体配列です。最適化終了時の結果が満足できるものであるかどうかを判断するには、FitInfo
を使用します。
精度を向上させるため、名前と値のペアの引数を使用して、最適化反復の最大回数 ('IterationLimit'
) を増やしたり、許容誤差の値 ('BetaTolerance'
および 'GradientTolerance'
) を小さくすることができます。このようにすると、FitInfo
の ObjectiveValue
や RelativeChangeInBeta
などの尺度が向上します。名前と値のペアの引数 'OptimizeHyperparameters'
を使用してモデル パラメーターを最適化することもできます。
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere rng('default') % For reproducibility
バイナリ カーネル分類モデルを交差検証します。既定では、10 分割交差検証が使用されます。
CVMdl = fitckernel(X,Y,'CrossVal','on')
CVMdl = classreg.learning.partition.ClassificationPartitionedKernel CrossValidatedModel: 'Kernel' ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none' Properties, Methods
numel(CVMdl.Trained)
ans = 10
CVMdl
は ClassificationPartitionedKernel
モデルです。fitckernel
は 10 分割交差検証を実施するので、学習分割 (分割内) 観測値に対して学習をさせる 10 個の ClassificationKernel
モデルが CVMdl
に格納されます。
交差検証分類誤差を推定します。
kfoldLoss(CVMdl)
ans = 0.0940
分類誤差率は約 9% です。
名前と値のペアの引数 'OptimizeHyperparameters'
を使用して、自動的にハイパーパラメーターを最適化します。
ionosphere
データセットを読み込みます。このデータセットには、レーダー反射についての 34 個の予測子と、不良 ('b'
) または良好 ('g'
) という 351 個の二項反応が含まれています。
load ionosphere
自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。名前と値のペアの引数 'KernelScale'
および 'Lambda'
の最適な値を fitckernel
で求めるため、'OptimizeHyperparameters'
として 'auto'
を指定します。再現性を得るために、乱数シードを設定し、'expected-improvement-plus'
の獲得関数を使用します。
rng('default') [Mdl,FitInfo,HyperparameterOptimizationResults] = fitckernel(X,Y,'OptimizeHyperparameters','auto',... 'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName','expected-improvement-plus'))
|=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | KernelScale | Lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 1 | Best | 0.35897 | 0.23251 | 0.35897 | 0.35897 | 64.836 | 4.4811e-06 |
| 2 | Accept | 0.35897 | 0.46344 | 0.35897 | 0.35897 | 0.036335 | 0.015885 |
| 3 | Accept | 0.39601 | 0.44042 | 0.35897 | 0.36053 | 0.0022147 | 6.8254e-06 |
| 4 | Accept | 0.35897 | 0.30382 | 0.35897 | 0.35898 | 5.1259 | 0.28097 |
| 5 | Accept | 0.35897 | 0.32187 | 0.35897 | 0.35897 | 0.24853 | 0.10828 |
| 6 | Accept | 0.35897 | 0.20379 | 0.35897 | 0.35897 | 885.09 | 0.00057316 |
| 7 | Best | 0.10826 | 0.37693 | 0.10826 | 0.10833 | 8.0346 | 0.0048286 |
| 8 | Best | 0.076923 | 0.39431 | 0.076923 | 0.076999 | 7.0902 | 0.0034068 |
| 9 | Accept | 0.091168 | 0.43926 | 0.076923 | 0.077059 | 9.1504 | 0.0020604 |
| 10 | Best | 0.062678 | 0.43402 | 0.062678 | 0.062723 | 3.5487 | 0.0025912 |
| 11 | Accept | 0.062678 | 0.4986 | 0.062678 | 0.062741 | 2.3869 | 0.003321 |
| 12 | Accept | 0.41026 | 0.44801 | 0.062678 | 0.062536 | 0.14075 | 0.0022499 |
| 13 | Accept | 0.062678 | 0.4226 | 0.062678 | 0.062532 | 3.4215 | 0.0036803 |
| 14 | Accept | 0.062678 | 0.4393 | 0.062678 | 0.061956 | 3.2928 | 0.0030533 |
| 15 | Best | 0.05698 | 0.41997 | 0.05698 | 0.057204 | 5.0598 | 0.0025499 |
| 16 | Accept | 0.062678 | 0.49607 | 0.05698 | 0.057186 | 5.3401 | 0.0015096 |
| 17 | Accept | 0.05698 | 0.38304 | 0.05698 | 0.057118 | 1.813 | 0.0069209 |
| 18 | Accept | 0.059829 | 0.4167 | 0.05698 | 0.057092 | 1.5122 | 0.0046637 |
| 19 | Accept | 0.059829 | 0.41421 | 0.05698 | 0.05718 | 1.9277 | 0.0056364 |
| 20 | Accept | 0.065527 | 0.39178 | 0.05698 | 0.057189 | 1.4064 | 0.0094306 |
|=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | KernelScale | Lambda | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.05698 | 0.49652 | 0.05698 | 0.057033 | 5.1719 | 0.0023614 |
| 22 | Best | 0.054131 | 0.92821 | 0.054131 | 0.054176 | 1.9618 | 6.5704e-05 |
| 23 | Best | 0.042735 | 0.53104 | 0.042735 | 0.042763 | 1.9463 | 1.0169e-05 |
| 24 | Accept | 0.082621 | 0.48698 | 0.042735 | 0.042775 | 1.0661 | 1.3245e-05 |
| 25 | Accept | 0.054131 | 0.78627 | 0.042735 | 0.042789 | 3.288 | 2.0035e-05 |
| 26 | Accept | 0.062678 | 0.53773 | 0.042735 | 0.042769 | 2.657 | 3.0334e-06 |
| 27 | Accept | 0.059829 | 0.59272 | 0.042735 | 0.043054 | 2.0381 | 1.9791e-05 |
| 28 | Accept | 0.042735 | 0.77684 | 0.042735 | 0.042764 | 3.5043 | 0.0001237 |
| 29 | Accept | 0.054131 | 0.38161 | 0.042735 | 0.042764 | 1.3897 | 3.2288e-06 |
| 30 | Accept | 0.062678 | 0.62915 | 0.042735 | 0.042792 | 2.2414 | 0.0002259 |
__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 33.6885 seconds. Total objective function evaluation time: 14.0877 Best observed feasible point: KernelScale Lambda ___________ __________ 1.9463 1.0169e-05 Observed objective function value = 0.042735 Estimated objective function value = 0.043106 Function evaluation time = 0.53104 Best estimated feasible point (according to models): KernelScale Lambda ___________ _________ 3.5043 0.0001237 Estimated objective function value = 0.042792 Estimated function evaluation time = 0.77544
Mdl = ClassificationKernel ResponseName: 'Y' ClassNames: {'b' 'g'} Learner: 'svm' NumExpansionDimensions: 2048 KernelScale: 3.5043 Lambda: 1.2370e-04 BoxConstraint: 23.0320 Properties, Methods
FitInfo = struct with fields:
Solver: 'LBFGS-fast'
LossFunction: 'hinge'
Lambda: 1.2370e-04
BetaTolerance: 1.0000e-04
GradientTolerance: 1.0000e-06
ObjectiveValue: 0.0426
GradientMagnitude: 0.0028
RelativeChangeInBeta: 8.9154e-05
FitTime: 0.1379
History: []
HyperparameterOptimizationResults = BayesianOptimization with properties: ObjectiveFcn: @createObjFcn/inMemoryObjFcn VariableDescriptions: [4×1 optimizableVariable] Options: [1×1 struct] MinObjective: 0.0427 XAtMinObjective: [1×2 table] MinEstimatedObjective: 0.0428 XAtMinEstimatedObjective: [1×2 table] NumObjectiveEvaluations: 30 TotalElapsedTime: 33.6885 NextPoint: [1×2 table] XTrace: [30×2 table] ObjectiveTrace: [30×1 double] ConstraintsTrace: [] UserDataTrace: {30×1 cell} ObjectiveEvaluationTimeTrace: [30×1 double] IterationTimeTrace: [30×1 double] ErrorTrace: [30×1 double] FeasibilityTrace: [30×1 logical] FeasibilityProbabilityTrace: [30×1 double] IndexOfMinimumTrace: [30×1 double] ObjectiveMinimumTrace: [30×1 double] EstimatedObjectiveMinimumTrace: [30×1 double]
ビッグ データの場合、最適化手順に時間がかかる可能性があります。最適化手順を実行するにはデータセットが大きすぎる場合、データの一部だけを使用してパラメーターの最適化を試すことができます。関数 datasample
を使用し、'Replace','false'
を指定して、データを非復元抽出します。
X
— 予測子データY
— クラス ラベルクラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。
fitckernel
はバイナリ分類のみをサポートします。Y
に正確に 2 つの異なるクラスを含めるか、名前と値のペアの引数 ClassNames
を使用して学習用の 2 つのクラスを指定しなければなりません。
Y
が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
Y
の長さと X
の観測値数は同じでなければなりません。
名前と値のペアの引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: categorical
| char
| string
| logical
| single
| double
| cell
メモ
fitckernel
は欠損観測値 (次のいずれかの特徴をもつ観測値) を削除します。
応答 (Y
) 内の NaN
、空文字ベクトル (''
)、空の string (""
)、<missing>
および <undefined>
要素
予測子の観測値 (X
の行) 内の少なくとも 1 つの NaN
値
重み ('Weights'
) が NaN
値または 0
オプションの Name,Value
引数のコンマ区切りペアを指定します。Name
は引数名で、Value
は対応する値です。Name
は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN
のように、複数の名前と値のペアの引数を、任意の順番で指定できます。
Mdl = fitckernel(X,Y,'Learner','logistic','NumExpansionDimensions',2^15,'KernelScale','auto')
は、ヒューリスティック手法により選択されたカーネル スケール パラメーターによる特徴量拡張を使用して、予測子データを 2^15
次元空間にマッピングした後、ロジスティック回帰を実施します。メモ
交差検証の名前と値のペアの引数を名前と値のペアの引数 'OptimizeHyperparameters'
と同時に使用することはできません。'OptimizeHyperparameters'
の場合の交差検証は、名前と値のペアの引数 'HyperparameterOptimizationOptions'
を使用することのみによって変更できます。
'Learner'
— 線形分類モデルのタイプ'svm'
(既定値) | 'logistic'
線形分類モデルのタイプ。'Learner'
と 'svm'
または 'logistic'
から構成されるコンマ区切りのペアとして指定します。
次の表では です。
x は p 個の予測子変数による観測値 (行ベクトル) です。
は特徴量を拡張するための観測値 (行ベクトル) の変換です。T(x) は の x を高次元空間 () にマッピングします。
β は m 個の係数のベクトルです。
b はスカラー バイアスです。
値 | アルゴリズム | 応答の範囲 | 損失関数 |
---|---|---|---|
'svm' | サポート ベクター マシン | y ∊ {–1,1}。陽性クラスの場合は 1、それ以外の場合は –1 | ヒンジ: |
'logistic' | ロジスティック回帰 | 'svm' と同じ | 逸脱度 (ロジスティック): |
例: 'Learner','logistic'
'NumExpansionDimensions'
— 拡張空間の次元数'auto'
(既定値) | 正の整数拡張空間の次元数。'NumExpansionDimensions'
と 'auto'
または正の整数から構成されるコンマ区切りのペアとして指定します。'auto'
の場合、関数 fitckernel
は 2.^ceil(min(log2(p)+5,15))
を使用して次元数を選択します。p
は予測子の個数です。
詳細については、ランダムな特徴量拡張を参照してください。
例: 'NumExpansionDimensions',2^15
データ型: char
| string
| single
| double
'KernelScale'
— カーネル スケール パラメーター1
(既定値) | 'auto'
| 正のスカラーカーネル スケール パラメーター。'KernelScale'
と、'auto'
または正のスカラーで構成される、コンマ区切りのペアとして指定します。カーネル スケール パラメーターを使用して、ランダムな特徴量拡張用のランダムな基底が取得されます。詳細については、ランダムな特徴量拡張を参照してください。
'auto'
を指定した場合、ヒューリスティック手法を使用して適切なカーネル スケール パラメーターが選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng
を使用して乱数シードを設定します。
例: 'KernelScale','auto'
データ型: char
| string
| single
| double
'BoxConstraint'
— ボックス制約ボックス制約。'BoxConstraint'
と正のスカラーで構成されるコンマ区切りペアとして指定します。
この引数は、'Learner'
が 'svm'
(既定値) であり、正則化項の強度 'Lambda'
の値を指定しなかった場合のみ有効です。ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint'
または 'Lambda'
のいずれかを指定できます。n は観測値の個数です。
例: 'BoxConstraint',100
データ型: single
| double
'Lambda'
— 正則化項の強度'auto'
(既定値) | 非負のスカラー正則化項の強度。'Lambda'
と 'auto'
または非負のスカラーから構成されるコンマ区切りのペアとして指定します。
'auto'
の場合、'Lambda'
の値は 1/n です。n は観測値の個数です。
ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint'
または 'Lambda'
のいずれかを指定できます。
例: 'Lambda',0.01
データ型: char
| string
| single
| double
'CrossVal'
— 交差検証分類器を学習させるためのフラグ'off'
(既定値) | 'on'
交差検証分類器を学習させるためのフラグ。'Crossval'
と'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。
'on'
を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。
名前と値のペアの引数 CVPartition
、Holdout
、KFold
または Leaveout
を使用すると、この交差検証の設定を変更できます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。
例: 'Crossval','on'
'CVPartition'
— 交差検証分割[]
(既定値) | cvpartition
分割オブジェクト交差検証分割。'CVPartition'
と、cvpartition
で作成した cvpartition
分割オブジェクトから構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。
交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,'KFold',5)
を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp
を使用して交差検証済みモデルを指定できます。
'Holdout'
— ホールドアウト検証の対象データの比率ホールドアウト検証に使用されるデータの比率。'Holdout'
と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p
を指定した場合、以下の手順が実行されます。
p*100
% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。
コンパクトな学習済みモデルを交差検証済みモデルの Trained
プロパティに格納する。
交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: 'Holdout',0.1
データ型: double
| single
'KFold'
— 分割の数10
(既定値) | 1 より大きい正の整数値交差検証済みモデルで使用する分割数。'KFold'
と 1 より大きい正の整数値から構成されるコンマ区切りのペアとして指定します。'KFold',k
を指定した場合、以下の手順が実行されます。
データを無作為に k
個のセットに分割する。
各セットについて、そのセットを検定データとして確保し、他の k
– 1 個のセットを使用してモデルに学習をさせる。
k
個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained
プロパティに含まれている k
行 1 列の cell ベクトルのセルに格納する。
交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: 'KFold',5
データ型: single
| double
'Leaveout'
— Leave-one-out 法の交差検証のフラグ'off'
(既定値) | 'on'
Leave-one-out 法の交差検証のフラグ。'Leaveout'
と 'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。'Leaveout','on'
を指定した場合、n 個の観測値 (n は欠損観測値を除外した観測値の個数) のそれぞれについて以下の手順が実行されます。
その観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。
n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained
プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。
交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: 'Leaveout','on'
'BetaTolerance'
— 線形係数およびバイアス項の相対許容誤差1e–5
(既定値) | 非負のスカラー線形係数およびバイアス項 (切片) の相対許容誤差。'BetaTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
GradientTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: 'BetaTolerance',1e–6
データ型: single
| double
'GradientTolerance'
— 勾配の絶対許容誤差1e–6
(既定値) | 非負のスカラー勾配の絶対許容誤差。'GradientTolerance'
と非負のスカラーから構成されるコンマ区切りのペアとして指定します。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: 'GradientTolerance',1e–5
データ型: single
| double
'IterationLimit'
— 最適化反復の最大回数最適化反復の最大回数。'IterationLimit'
と正の整数から構成されるコンマ区切りのペアとして指定します。
名前と値のペアの引数 BlockSize
で指定されたメモリに変換後のデータが収まる場合、既定値は 1000 です。それ以外の場合、既定値は 100 です。
例: 'IterationLimit',500
データ型: single
| double
'BlockSize'
— 割り当てられたメモリの最大容量4e^3
(4 GB) (既定値) | 正のスカラー割り当てられたメモリの最大容量 (メガバイト)。'BlockSize'
と正のスカラーから構成されるコンマ区切りのペアとして指定します。
変換後の予測子データを保持するために fitckernel
で必要となるメモリが 'BlockSize'
の値より多い場合、ブロック単位方式が使用されます。ブロック単位方式の詳細については、アルゴリズムを参照してください。
例: 'BlockSize',1e4
データ型: single
| double
'RandomStream'
— 乱数ストリームデータ変換の再現性を得るための乱数ストリーム。'RandomStream'
と乱数ストリーム オブジェクトから構成されるコンマ区切りのペアとして指定します。詳細については、ランダムな特徴量拡張を参照してください。
予測子データを高次元空間に変換するために fitckernel
が使用するランダムな基底関数を再現するには、'RandomStream'
を使用します。詳細は、グローバル ストリームの管理 と 乱数ストリームの作成と管理 を参照してください。
例: 'RandomStream',RandStream('mlfg6331_64')
'HessianHistorySize'
— ヘッセ近似の履歴バッファーのサイズ15
(既定値) | 正の整数ヘッセ近似の履歴バッファーのサイズ。'HessianHistorySize'
と正の整数から構成されるコンマ区切りのペアとして指定します。各反復において、fitckernel
は最新の HessianHistorySize
回の反復の統計量を使用してヘッセ近似を構成します。
例: 'HessianHistorySize',10
データ型: single
| double
'Verbose'
— 詳細レベル0
(既定値) | 1
詳細レベル。'Verbose'
と 0
または 1
のいずれかから構成されるコンマ区切りのペアとして指定します。Verbose
は、コマンド ラインにおける診断情報の表示を制御します。
値 | 説明 |
---|---|
0 | fitckernel は診断情報を表示しません。 |
1 | fitckernel は、目的関数の値や勾配の大きさなどの診断情報を表示および格納します。診断情報は FitInfo.History に格納されます。 |
例: 'Verbose',1
データ型: single
| double
'ClassNames'
— 学習に使用するクラスの名前学習に使用するクラスの名前。'ClassNames'
と categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。ClassNames
のデータ型は Y
と同じでなければなりません。
ClassNames
が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
'ClassNames'
の使用目的は次のとおりです。
学習時のクラスの順序を指定する。
クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、Cost
の次元の順序や predict
によって返される分類スコアの列の順序を指定するために 'ClassNames'
を使用します。
学習用にクラスのサブセットを選択する。たとえば、Y
に含まれているすべての異なるクラス名の集合が {'a','b','c'}
であるとします。クラス 'a'
および 'c'
のみの観測値を使用してモデルに学習をさせるには、'ClassNames',{'a','c'}
を指定します。
ClassNames
の既定値は、Y
に含まれているすべての異なるクラス名の集合です。
例: 'ClassNames',{'b','g'}
データ型: categorical
| char
| string
| logical
| single
| double
| cell
'Cost'
— 誤分類のコスト誤分類のコスト。'Cost'
と正方行列または構造体から構成されるコンマ区切りペアとして指定します。
正方行列 cost
を指定する場合 ('Cost',cost
)、cost(i,j)
は真のクラスが i
である点をクラス j
に分類するコストです。つまり、行は真のクラスに、列は予測するクラスに対応します。cost
の対応する行と列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames
を使用します。
構造体 S
を指定する場合 ('Cost',S
)、次の 2 つのフィールドが必要です。
S.ClassNames
: Y
と同じデータ型のクラス名を表す変数を含む。
S.ClassificationCosts
。行と列の順序が S.ClassNames
と同じコスト行列。
Cost
の既定値は ones(
です。K
) – eye(K
)K
は異なるクラスの個数です。
fitckernel
は Cost
を使用して、Prior
で指定されたクラスの事前確率を調整します。その後、fitckernel
は調整した事前確率を学習に使用し、コスト行列を既定設定にリセットします。
例: 'Cost',[0 2; 1 0]
データ型: single
| double
| struct
'Prior'
— 事前確率'empirical'
(既定値) | 'uniform'
| 数値ベクトル | 構造体配列各クラスの事前確率。'Prior'
と 'empirical'
、'uniform'
、数値ベクトルまたは構造体配列から構成されるコンマ区切りのペアとして指定します。
次の表は、事前確率の設定に使用できるオプションの一覧です。
値 | 説明 |
---|---|
'empirical' | クラスの事前確率は、Y のクラスの相対的頻度です。 |
'uniform' | クラスの事前確率はいずれも 1/K (K はクラス数) となります。 |
数値ベクトル | 各要素はクラスの事前確率です。Y 内の順序に従って要素の順序を指定します。名前と値のペアの引数 'ClassNames' を使用して順序を指定した場合は、それに従って要素の順序が設定されます。 |
構造体配列 |
構造体
|
fitckernel
は、合計が 1 になるように Prior
の事前確率を正規化します。
例: 'Prior',struct('ClassNames',{{'setosa','versicolor'}},'ClassProbs',1:2)
データ型: char
| string
| double
| single
| struct
'ScoreTransform'
— スコア変換'none'
(既定値) | 'doublelogit'
| 'invlogit'
| 'ismax'
| 'logit'
| 関数ハンドル | ...スコア変換。'ScoreTransform'
と文字ベクトル、string スカラー、または関数ハンドルから構成されるコンマ区切りのペアとして指定します。
次の表は、使用可能な文字ベクトルおよび string スカラーをまとめています。
値 | 説明 |
---|---|
'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® 関数またはユーザー定義関数の場合は、スコア変換用の関数ハンドルを使用します。関数ハンドルは、行列 (元のスコア) を受け入れて同じサイズの行列 (変換したスコア) を返さなければなりません。
例: 'ScoreTransform','logit'
データ型: char
| string
| function_handle
'Weights'
— 観測値の重み観測値の重み。'Weights'
と長さ n
の正の数値ベクトルから構成されるコンマ区切りのペアとして指定します。n
は X
内の観測値の個数です。関数 fitckernel
は、Weights
内の対応する値を使用して、X
内の観測値に重みを付けます。
既定値は ones(
です。n
,1)
fitckernel
は、合計がそれぞれのクラスの事前確率の値になるように Weights
を正規化します。
例: 'Weights',w
データ型: single
| double
'OptimizeHyperparameters'
— 最適化するパラメーター'none'
(既定値) | 'auto'
| 'all'
| 使用可能パラメーター名の string 配列または cell 配列 | optimizableVariable
オブジェクトのベクトル最適化するパラメーター。'OptimizeHyperparameters'
と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。
'none'
— 最適化を行いません。
'auto'
— {'KernelScale','Lambda'}
を使用します。
'all'
— すべての使用可能パラメーターを最適化します。
使用可能パラメーター名の cell 配列。
optimizableVariable
オブジェクトのベクトル。通常は hyperparameters
の出力です。
最適化では、パラメーターを変化させることにより、fitckernel
の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペアの引数 HyperparameterOptimizationOptions
を使用します。
メモ
'OptimizeHyperparameters'
の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、'OptimizeHyperparameters'
を 'auto'
に設定すると、'auto'
の値が適用されます。
fitckernel
では、以下のパラメーターを使用できます。
KernelScale
— fitckernel
は、既定では範囲 [1e-3,1e3]
の対数スケールで、正の値を探索します。
Lambda
— fitckernel
は、既定では範囲 [1e-3,1e3]/n
の対数スケールで、正の値を探索します。n
は観測値の個数です。
Learner
— fitckernel
は 'svm'
と 'logistic'
で探索します。
NumExpansionDimensions
— fitckernel
は、既定では範囲 [100,10000]
の対数スケールで、正の整数を探索します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable
オブジェクトのベクトルを渡します。以下に例を示します。
load fisheriris params = hyperparameters('fitckernel',meas,species); params(2).Range = [1e-4,1e6];
'OptimizeHyperparameters'
の値として params
を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + cross-validation loss)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の Verbose
フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の ShowPlots
フィールドを設定します。
たとえば、カーネル分類器の最適化を参照してください。
例: 'OptimizeHyperparameters','auto'
'HyperparameterOptimizationOptions'
— 最適化のオプション最適化のオプション。'HyperparameterOptimizationOptions'
と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters
の効果が変化します。この構造体のフィールドは、すべてオプションです。
フィールド名 | 値 | 既定の設定 |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
オブジェクト関数のランタイムによって最適化が異なるので、名前に | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | 目的関数評価の最大数。 | 'bayesopt' または 'randomsearch' の場合は 30 、'gridsearch' の場合はグリッド全体 |
MaxTime | 制限時間。正の実数を指定します。制限時間の単位は、 | Inf |
NumGridDivisions | 'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。 | 10 |
ShowPlots | プロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer が 'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。 | true |
SaveIntermediateResults | Optimizer が 'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。 | false |
Verbose | コマンド ラインへの表示。
詳細については、 | 1 |
UseParallel | ベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。並列でのタイミングに再現性がないため、並列ベイズ最適化で再現性のある結果が生成されるとは限りません。詳細については、並列ベイズ最適化を参照してください。 | false |
Repartition | 反復ごとに交差検証を再分割するかどうかを示す論理値。 分割ノイズが考慮されるので、通常は | false |
以下の 3 つのフィールド名は 1 つだけ使用できます。 | ||
CVPartition | cvpartition によって作成される cvpartition オブジェクト。 | 交差検証フィールドが指定されていない場合 'Kfold',5 |
Holdout | ホールドアウトの比率を表す範囲 (0,1) のスカラー。 | |
Kfold | 1 より大きい整数。 |
例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)
データ型: struct
Mdl
— 学習済みのカーネル分類モデルClassificationKernel
モデル オブジェクト | ClassificationPartitionedKernel
交差検証済みモデル オブジェクト学習済みのカーネル分類モデル。ClassificationKernel
モデル オブジェクトまたは ClassificationPartitionedKernel
交差検証済みモデル オブジェクトとして返されます。
以下の各名前と値のペアの引数のいずれかを設定する場合、Mdl
はClassificationPartitionedKernel
交差検証分類器となります。CrossVal
、CVPartition
、Holdout
、KFold
または Leaveout
。それ以外の場合、Mdl
は ClassificationKernel
分類器です。
Mdl
のプロパティを参照するには、ドット表記を使用します。たとえば、拡張空間の次元数を表示するには、コマンド ウィンドウで Mdl.NumExpansionDimensions
と入力します。
メモ
他の分類モデルとは異なり、メモリ消費を節約するため、学習データや学習過程の詳細 (収束履歴など) は ClassificationKernel
モデル オブジェクトに格納されません。
FitInfo
— 最適化の詳細最適化の詳細。次の表に記載されているフィールドを含む構造体配列として返されます。これらのフィールドには、最終的な値または名前と値のペアの引数の指定が格納されます。
フィールド | 説明 |
---|---|
Solver | 目的関数の最小化手法: |
LossFunction | 損失関数。線形分類モデルのタイプに応じて 'hinge' または 'logit' 。Learner を参照してください。 |
Lambda | 正則化項の強度。Lambda を参照してください。 |
BetaTolerance | 線形係数およびバイアス項の相対許容誤差。BetaTolerance を参照してください。 |
GradientTolerance | 勾配の絶対許容誤差。GradientTolerance を参照してください。 |
ObjectiveValue | 最適化終了時の目的関数の値。分類損失と正則化項を加算することにより目的関数が構成されます。 |
GradientMagnitude | 最適化終了時における目的関数の勾配ベクトルの無限大ノルム。GradientTolerance を参照してください。 |
RelativeChangeInBeta | 最適化終了時の線形係数およびバイアス項の相対的な変化。BetaTolerance を参照してください。 |
FitTime | モデルをデータにあてはめるためにかかった経過実時間 (秒単位)。 |
History | 最適化情報の履歴。'Verbose',0 を指定した場合、このフィールドは空 ([] ) になります。詳細については、Verbose とアルゴリズムを参照してください。 |
フィールドにアクセスするには、ドット表記を使用します。たとえば、各反復における目的関数値のベクトルにアクセスするには、コマンド ウィンドウで FitInfo.ObjectiveValue
と入力します。
FitInfo
を確認して、収束が満足できるものであるかどうかを評価することをお勧めします。
HyperparameterOptimizationResults
— ハイパーパラメーターの交差検証最適化BayesianOptimization
オブジェクト | ハイパーパラメーターおよび関連する値のテーブルハイパーパラメーターの交差検証最適化。ハイパーパラメーターおよび関連する値が含まれている table または BayesianOptimization
オブジェクトとして返されます。'OptimizeHyperparameters'
の値が 'none'
ではない場合、出力は空以外です。出力値は、名前と値のペアの引数 'HyperparameterOptimizationOptions'
の Optimizer
フィールドの値に依存します。
Optimizer フィールドの値 | HyperparameterOptimizationResults の値 |
---|---|
'bayesopt' (既定の設定) | BayesianOptimization クラスのオブジェクト |
'gridsearch' または 'randomsearch' | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル |
fitckernel
は、決定関数 の確定に使用される係数のベクトル ベータ (β) とバイアス項 (b) の初期条件を受け入れません。
fitckernel
は、標準化と交差検証のオプションをサポートしません。
fitckernel
は、テーブル入力を受け入れません。
Random Kitchen Sink[1]や Fastfood[2]などのランダムな特徴量拡張は、ビッグ データに使用するカーネル分類アルゴリズムの近似ガウス カーネルを計算効率が高い方法で求めるための手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータセットにも適用できます。
カーネル分類アルゴリズムでは、特徴量を高次元空間にマッピングした後で、データを 2 つのクラスに分離する最適な超平面を求めます。低次元空間で線形不可分な非線形の特徴量は、拡張された高次元空間で可分にできます。超平面分類についてのすべての計算では、ドット積のみを使用します。非線形分類モデルは、ドット積 x1x2' を非線形カーネル関数 に置き換えることにより取得できます。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータセットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。
ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。
ここで、T(x) は における x を高次元空間 () にマッピングします。Random Kitchen Sink方式では、次のランダムな変換を使用します。
ここで、 は から抽出した標本、σ2 はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。Fastfood 方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlog
p) に、ストレージが O(m) に削減されます。
関数 fitckernel
は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形分類を使用してガウス カーネル分類モデルに学習をさせます。関数 fitcsvm
のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、fitckernel
のソルバーに必要なのは、n 行 m 列の行列の形成だけです。ビッグ データの場合は一般に m が n よりはるかに小さくなります。
ボックス制約は、マージンに違反している観測値に課せられる最大ペナルティを制御するパラメーターであり、過適合の防止 (正則化) に役立ちます。ボックス制約の値を大きくすると、学習時間が長くなる場合があります。
ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があります。n は観測値の個数です。
fitckernel
は、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーとリッジ (L2) 正則化を使用して、正則化された目的関数を最小化します。学習に使用した LBFGS ソルバーのタイプを調べるには、コマンド ウィンドウで FitInfo.Solver
と入力します。
'LBFGS-fast'
— LBFGS ソルバー。
'LBFGS-blockwise'
— ブロック単位方式を使用する LBFGS ソルバー。変換後の予測子データを保持するために fitckernel
で必要となるメモリが BlockSize
の値より多い場合、ブロック単位方式が使用されます。
'LBFGS-tall'
— ブロック単位方式の tall 配列用 LBFGS ソルバー。
fitckernel
がブロック単位方式を使用する場合、fitckernel
は各反復で損失と勾配の計算をデータのさまざまな部分に分散させることにより LBFGS を実装します。また、fitckernel
は、データの一部に対して局所的にモデルをあてはめ、平均化で係数を結合することにより、線形係数およびバイアス項の初期推定値を改善します。'Verbose',1
が指定された場合、fitckernel
は各データ通過についての診断情報を表示し、情報を FitInfo
の History
フィールドに格納します。
fitckernel
がブロック単位方式を使用しない場合、初期推定値はゼロになります。'Verbose',1
が指定された場合、fitckernel
は各反復についての診断情報を表示し、情報を FitInfo
の History
フィールドに格納します。
[1] Rahimi, A., and B. Recht. “Random Features for Large-Scale Kernel Machines.” Advances in Neural Information Processing Systems. Vol. 20, 2008, pp. 1177–1184.
[2] Le, Q., T. Sarlós, and A. Smola. “Fastfood — Approximating Kernel Expansions in Loglinear Time.” Proceedings of the 30th International Conference on Machine Learning. Vol. 28, No. 3, 2013, pp. 244–252.
[3] Huang, P. S., H. Avron, T. N. Sainath, V. Sindhwani, and B. Ramabhadran. “Kernel methods match Deep Neural Networks on TIMIT.” 2014 IEEE International Conference on Acoustics, Speech and Signal Processing. 2014, pp. 205–209.
使用上の注意事項および制限事項:
一部の名前と値のペアの引数は、インメモリの関数 fitckernel
と既定値が異なります。サポートされる名前と値のペアの引数および違いは次のとおりです。
'Learner'
'NumExpansionDimensions'
'KernelScale'
'BoxConstraint'
'Lambda'
'BetaTolerance'
— 既定値は 1e–3
に緩和されます。
'GradientTolerance'
— 既定値は 1e–5
に緩和されます。
'IterationLimit'
— 既定値は 20
に緩和されます。
'BlockSize'
'RandomStream'
'HessianHistorySize'
'Verbose'
— 既定値は 1
です。
'ClassNames'
'Cost'
'Prior'
'ScoreTransform'
'Weights'
— 値は tall 配列でなければなりません。
'OptimizeHyperparameters'
'HyperparameterOptimizationOptions'
— 交差検証として、tall 最適化では 'Holdout'
検証のみがサポートされます。たとえば、fitckernel(X,Y,'OptimizeHyperparameters','auto','HyperparameterOptimizationOptions',struct('Holdout',0.2))
を指定できます。
'KernelScale'
が 'auto'
である場合、fitckernel
は tallrng
によって制御される乱数ストリームをサブサンプリングに使用します。再現性を得るには、tallrng
によって制御される乱数ストリームとグローバル ストリームの両方について乱数のシードを設定しなければなりません。
'Lambda'
が 'auto'
である場合、fitckernel
は X
内の観測値の個数を計算するため、さらにデータを通過する可能性があります。
fitckernel
はブロック単位方式を使用します。詳細については、アルゴリズムを参照してください。
詳細は、tall 配列を参照してください。
並列実行するには、'UseParallel'
オプションを true
に設定します。
ハイパーパラメーターの最適化を並列実行するため、この関数を呼び出すときに名前と値のペアの引数 'HyperparameterOptions', struct('UseParallel',true)
を指定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
bayesopt
| bestPoint
| ClassificationKernel
| ClassificationPartitionedKernel
| fitclinear
| fitcsvm
| predict
| resume
| templateKernel
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
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: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.