このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fitckernel
ランダムな特徴量拡張を使用したバイナリ ガウス カーネル分類器の当てはめ
構文
説明
fitckernel
は、非線形分類用のバイナリ ガウス カーネル分類モデルの学習または交差検証を行います。fitckernel
は、大規模な学習セットが含まれているビッグ データ事例に対する方が実用的ですが、メモリに収まる小規模なデータセットにも適用できます。
fitckernel
は、低次元空間のデータを高次元空間にマッピングしてから、正則化された目的関数を最小化することによって高次元空間で線形モデルを当てはめます。高次元空間で線形モデルを取得することは、低次元空間におけるモデルへのガウス カーネルの適用と等価です。使用可能な線形分類モデルには、正則化されたサポート ベクター マシン (SVM) とロジスティック回帰モデルがあります。
インメモリ データのバイナリ分類用の非線形 SVM モデルに学習をさせる方法については、fitcsvm
を参照してください。
は、テーブル Mdl
= fitckernel(Tbl
,ResponseVarName
)Tbl
に含まれる予測子変数と Tbl.ResponseVarName
内のクラス ラベルを使用して学習させたカーネル分類モデル Mdl
を返します。
では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、ロジスティック回帰の実装、拡張空間の次元数の指定、交差検証の指定を行うことができます。Mdl
= fitckernel(___,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
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.2585
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 = ClassificationPartitionedKernel CrossValidatedModel: 'Kernel' ResponseName: 'Y' NumObservations: 351 KFold: 10 Partition: [1x1 cvpartition] ClassNames: {'b' 'g'} ScoreTransform: 'none'
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
および Standardize
の最適な値を 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 | Standardize | | | result | | runtime | (observed) | (estim.) | | | | |====================================================================================================================| | 1 | Best | 0.35897 | 1.2179 | 0.35897 | 0.35897 | 3.8653 | 2.7394 | true | | 2 | Accept | 0.35897 | 0.65314 | 0.35897 | 0.35897 | 429.99 | 0.0006775 | false | | 3 | Accept | 0.35897 | 1.7977 | 0.35897 | 0.35897 | 0.11801 | 0.025493 | false | | 4 | Accept | 0.41311 | 1.6759 | 0.35897 | 0.35898 | 0.0010694 | 9.1346e-06 | true | | 5 | Accept | 0.4245 | 2.3254 | 0.35897 | 0.35898 | 0.0093918 | 2.8526e-06 | false | | 6 | Best | 0.17094 | 1.2406 | 0.17094 | 0.17102 | 15.285 | 0.0038931 | false | | 7 | Accept | 0.18234 | 2.611 | 0.17094 | 0.17099 | 9.9078 | 0.0090818 | false | | 8 | Accept | 0.35897 | 1.9334 | 0.17094 | 0.17097 | 26.961 | 0.46727 | false | | 9 | Best | 0.082621 | 1.275 | 0.082621 | 0.082677 | 7.7184 | 0.0025676 | false | | 10 | Best | 0.059829 | 1.3084 | 0.059829 | 0.059839 | 5.6125 | 0.0013416 | false | | 11 | Accept | 0.062678 | 1.9155 | 0.059829 | 0.059793 | 7.3294 | 0.00062394 | false | | 12 | Best | 0.048433 | 1.5794 | 0.048433 | 0.050198 | 3.7772 | 0.00032964 | false | | 13 | Accept | 0.051282 | 1.067 | 0.048433 | 0.049662 | 3.4417 | 0.00077524 | false | | 14 | Accept | 0.054131 | 1.5461 | 0.048433 | 0.051494 | 4.3694 | 0.00055199 | false | | 15 | Accept | 0.051282 | 1.6725 | 0.048433 | 0.04872 | 1.7463 | 0.00012886 | false | | 16 | Accept | 0.048433 | 1.5304 | 0.048433 | 0.048475 | 3.9086 | 3.1147e-05 | false | | 17 | Accept | 0.054131 | 0.95747 | 0.048433 | 0.050325 | 3.1489 | 9.1315e-05 | false | | 18 | Accept | 0.051282 | 1.0547 | 0.048433 | 0.049131 | 2.3414 | 4.8238e-06 | false | | 19 | Accept | 0.065527 | 1.675 | 0.048433 | 0.049103 | 7.2203 | 3.2694e-06 | false | | 20 | Accept | 0.054131 | 1.2915 | 0.048433 | 0.051219 | 3.5381 | 1.0341e-05 | false | |====================================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | KernelScale | Lambda | Standardize | | | result | | runtime | (observed) | (estim.) | | | | |====================================================================================================================| | 21 | Accept | 0.068376 | 1.2292 | 0.048433 | 0.051113 | 1.4267 | 1.7614e-05 | false | | 22 | Accept | 0.054131 | 1.4658 | 0.048433 | 0.051306 | 3.2173 | 2.9573e-06 | false | | 23 | Accept | 0.05698 | 1.2045 | 0.048433 | 0.051195 | 2.4241 | 0.0003272 | false | | 24 | Accept | 0.059829 | 2.3212 | 0.048433 | 0.051098 | 2.5948 | 4.5059e-05 | false | | 25 | Accept | 0.059829 | 1.7581 | 0.048433 | 0.05106 | 7.186 | 4.1878e-05 | false | | 26 | Accept | 0.062678 | 1.6112 | 0.048433 | 0.050633 | 3.9212 | 7.4981e-06 | false | | 27 | Accept | 0.062678 | 1.1994 | 0.048433 | 0.052232 | 3.9385 | 0.0002172 | false | | 28 | Accept | 0.062678 | 0.82969 | 0.048433 | 0.052242 | 1.4533 | 2.8533e-06 | false | | 29 | Best | 0.045584 | 0.93055 | 0.045584 | 0.049361 | 3.1744 | 0.00082799 | false | | 30 | Accept | 0.048433 | 1.266 | 0.045584 | 0.048732 | 2.6844 | 0.0010257 | false | __________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 60.3599 seconds Total objective function evaluation time: 44.144 Best observed feasible point: KernelScale Lambda Standardize ___________ __________ ___________ 3.1744 0.00082799 false Observed objective function value = 0.045584 Estimated objective function value = 0.048562 Function evaluation time = 0.93055 Best estimated feasible point (according to models): KernelScale Lambda Standardize ___________ __________ ___________ 3.4417 0.00077524 false Estimated objective function value = 0.048732 Estimated function evaluation time = 1.4054
Mdl = ClassificationKernel ResponseName: 'Y' ClassNames: {'b' 'g'} Learner: 'svm' NumExpansionDimensions: 2048 KernelScale: 3.4417 Lambda: 7.7524e-04 BoxConstraint: 3.6750
FitInfo = struct with fields:
Solver: 'LBFGS-fast'
LossFunction: 'hinge'
Lambda: 7.7524e-04
BetaTolerance: 1.0000e-04
GradientTolerance: 1.0000e-06
ObjectiveValue: 0.1050
GradientMagnitude: 0.0142
RelativeChangeInBeta: 2.8659e-05
FitTime: 0.2169
History: []
HyperparameterOptimizationResults = BayesianOptimization with properties: ObjectiveFcn: @createObjFcn/inMemoryObjFcn VariableDescriptions: [5x1 optimizableVariable] Options: [1x1 struct] MinObjective: 0.0456 XAtMinObjective: [1x3 table] MinEstimatedObjective: 0.0487 XAtMinEstimatedObjective: [1x3 table] NumObjectiveEvaluations: 30 TotalElapsedTime: 60.3599 NextPoint: [1x3 table] XTrace: [30x3 table] ObjectiveTrace: [30x1 double] ConstraintsTrace: [] UserDataTrace: {30x1 cell} ObjectiveEvaluationTimeTrace: [30x1 double] IterationTimeTrace: [30x1 double] ErrorTrace: [30x1 double] FeasibilityTrace: [30x1 logical] FeasibilityProbabilityTrace: [30x1 double] IndexOfMinimumTrace: [30x1 double] ObjectiveMinimumTrace: [30x1 double] EstimatedObjectiveMinimumTrace: [30x1 double]
ビッグ データの場合、最適化手順に時間がかかる可能性があります。最適化手順を実行するにはデータセットが大きすぎる場合、データの一部だけを使用してパラメーターの最適化を試すことができます。関数 datasample
を使用し、'Replace','false'
を指定して、データを非復元抽出します。
入力引数
X
— 予測子データ
数値行列
Y
— クラス ラベル
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
クラス ラベル。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。
fitckernel
はバイナリ分類のみをサポートします。Y
に正確に 2 つの異なるクラスを含めるか、名前と値のペアの引数ClassNames
を使用して学習用の 2 つのクラスを指定しなければなりません。マルチクラス学習については、fitcecoc
を参照してください。Y
の長さはX
またはTbl
の観測値の数と等しくなければなりません。Y
が文字配列の場合、各ラベルは配列の 1 つの行に対応しなければなりません。名前と値のペアの引数
ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: categorical
| char
| string
| logical
| single
| double
| cell
Tbl
— 標本データ
テーブル
モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl
の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。
必要に応じて、Tbl
に応答変数用の列と観測値の重み用の列を含めることができます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。
fitckernel
はバイナリ分類のみをサポートします。応答変数に正確に 2 つの異なるクラスを含めるか、名前と値の引数ClassNames
を使用して学習用の 2 つのクラスを指定しなければなりません。マルチクラス学習については、fitcecoc
を参照してください。名前と値の引数
ClassNames
を使用して応答変数におけるクラスの順序を指定することをお勧めします。
重みの列は数値ベクトルでなければなりません。
Tbl
内の応答変数はResponseVarName
またはformula
を使用して指定し、Tbl
内の観測値の重みはWeights
を使用して指定しなければなりません。ResponseVarName
を使用して応答変数を指定 —fitckernel
は、残りの変数を予測子として使用します。Tbl
内の残りの変数のサブセットを予測子として使用するには、PredictorNames
を使用して予測子変数を指定します。formula
を使用してモデル仕様を定義 —fitckernel
は、formula
の指定に従って、Tbl
内の変数のサブセットを予測子変数および応答変数として使用します。
Tbl
に応答変数が含まれていない場合は、Y
を使用して応答変数を指定します。応答変数 Y
の長さと Tbl
の行数は等しくなければなりません。Tbl
内の変数のサブセットを予測子として使用するには、PredictorNames
を使用して予測子変数を指定します。
データ型: table
ResponseVarName
— 応答変数名
Tbl
内の変数の名前
応答変数の名前。Tbl
内の変数の名前で指定します。
ResponseVarName
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、応答変数 Y
が Tbl.Y
として格納されている場合、"Y"
として指定します。それ以外の場合、モデルを学習させるときに、Tbl
の列は Y
を含めてすべて予測子として扱われます。
応答変数は、categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y
が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。
名前と値の引数 ClassNames
を使用してクラスの順序を指定することをお勧めします。
データ型: char
| string
formula
— 応答変数および予測子変数サブセットの説明モデル
文字ベクトル | string スカラー
応答変数および予測子変数サブセットの説明モデル。"Y~x1+x2+x3"
という形式の文字ベクトルまたは string スカラーを指定します。この形式では、Y
は応答変数を、x1
、x2
および x3
は予測子変数を表します。
モデルに学習をさせるための予測子として Tbl
内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula
に現れない Tbl
内の変数は使用されません。
式の変数名は Tbl
の変数名 (Tbl.Properties.VariableNames
) であり、有効な MATLAB® 識別子でなければなりません。関数 isvarname
を使用して Tbl
の変数名を検証できます。変数名が有効でない場合、関数 matlab.lang.makeValidName
を使用してそれらを変換できます。
データ型: char
| string
メモ
ソフトウェアは、NaN
、空の文字ベクトル (''
)、空の string (""
)、<missing>
、および <undefined>
の要素を欠損値として扱い、以下のいずれかの特性をもつ観測値を削除します。
応答変数の欠損値
予測子の観測値 (
X
またはTbl
の行) 内の少なくとも 1 つの欠損値重み (
'Weights'
) がNaN
値または0
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。
R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 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 を高次元空間 () にマッピングします。
β は係数のベクトルです。
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"
| 正のスカラー
カーネル スケール パラメーター。"auto"
または正のスカラーとして指定します。カーネル スケール パラメーターを使用して、ランダムな特徴量拡張用のランダムな基底が取得されます。詳細については、ランダムな特徴量拡張を参照してください。
"auto"
を指定した場合、ヒューリスティック手法を使用して適切なカーネル スケール パラメーターが選択されます。このヒューリスティック手法では副標本抽出を使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng
を使用して乱数シードを設定します。
例: KernelScale="auto"
データ型: char
| string
| single
| double
BoxConstraint
— ボックス制約
1 (既定値) | 正のスカラー
ボックス制約。'BoxConstraint'
と正のスカラーで構成されるコンマ区切りペアとして指定します。
この引数は、'Learner'
が 'svm'
(既定値) であり、正則化項の強度 'Lambda'
の値を指定しなかった場合のみ有効です。ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、'BoxConstraint'
または 'Lambda'
のいずれかを指定できます。n は観測値の個数です。
例: 'BoxConstraint',100
データ型: single
| double
Lambda
— 正則化項の強度
'auto'
(既定値) | 非負のスカラー
正則化項の強度。'Lambda'
と 'auto'
または非負のスカラーから構成されるコンマ区切りのペアとして指定します。
'auto'
の場合、Lambda
の値は 1/n です。n は観測値の個数です。
Learner
が 'svm'
の場合、ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があるので、BoxConstraint
または Lambda
のいずれかを指定できます。
例: 'Lambda',0.01
データ型: char
| string
| single
| double
Standardize
— 予測子データを標準化するためのフラグ
false
または 0
(既定値) | true
または 1
R2023b 以降
予測子データを標準化するためのフラグ。数値または logical の 0
(false
) または 1
(true
) として指定します。Standardize
を true
に設定すると、各数値予測子変数が対応する列の平均値と標準偏差によってセンタリングおよびスケーリングされます。ソフトウェアは、カテゴリカル予測子を標準化しません。
例: "Standardize",true
データ型: single
| double
| logical
CrossVal
— 交差検証分類器を学習させるためのフラグ
'off'
(既定値) | 'on'
交差検証分類器を学習させるためのフラグ。'Crossval'
と'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。
'on'
を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。
名前と値のペアの引数 CVPartition
、Holdout
、KFold
または Leaveout
を使用すると、この交差検証の設定を変更できます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。
例: 'Crossval','on'
CVPartition
— 交差検証分割
[]
(既定値) | cvpartition
オブジェクト
交差検証分割。交差検証のタイプと学習セットおよび検証セットのインデックス付けを指定する cvpartition
オブジェクトとして指定します。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: cvp = cvpartition(500,KFold=5)
を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、CVPartition=cvp
を設定して交差検証分割を指定できます。
Holdout
— ホールドアウト検証の対象データの比率
(0,1) の範囲のスカラー値
ホールドアウト検証に使用するデータの比率。範囲 [0,1] のスカラー値として指定します。Holdout=p
を指定した場合、以下の手順が実行されます。
p*100
% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。コンパクトな学習済みモデルを交差検証済みモデルの
Trained
プロパティに格納する。
交差検証済みモデルの作成で指定できる名前と値の引数は、CVPartition
、Holdout
、KFold
、Leaveout
の 4 つのうちのいずれかのみです。
例: Holdout=0.1
データ型: double
| single
KFold
— 分割の数
10
(既定値) | 1 より大きい正の整数値
交差検証済みモデルで使用する分割の数。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–4
(既定値) | 非負のスカラー
線形係数およびバイアス項 (切片) の相対許容誤差。非負のスカラーとして指定します。
であるとします。これは、最適化反復 t における係数およびバイアス項のベクトルです。 で最適化が終了します。
GradientTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: BetaTolerance=1e–6
データ型: single
| double
GradientTolerance
— 勾配の絶対許容誤差
1e–6
(既定値) | 非負のスカラー
勾配の絶対許容誤差。非負のスカラーとして指定します。
最適化反復 t における係数およびバイアス項に関する目的関数の勾配ベクトルを とします。 で最適化が終了します。
BetaTolerance
も指定した場合、いずれかの終了条件が満たされると最適化が終了します。
例: GradientTolerance=1e–5
データ型: single
| double
IterationLimit
— 最適化反復の最大回数
正の整数
最適化反復の最大回数。正の整数を指定します。
名前と値の引数 BlockSize
で指定されたメモリに変換後のデータが収まる場合、既定値は 1000 です。それ以外の場合、既定値は 100 です。
例: IterationLimit=500
データ型: single
| double
BlockSize
— 割り当てられたメモリの最大容量
4e^3
(4 GB) (既定値) | 正のスカラー
割り当てられたメモリの最大容量 (メガバイト)。'BlockSize'
と正のスカラーから構成されるコンマ区切りのペアとして指定します。
変換後の予測子データを保持するために fitckernel
で必要となるメモリが 'BlockSize'
の値より多い場合、ブロック単位方式が使用されます。ブロック単位方式の詳細については、アルゴリズムを参照してください。
例: 'BlockSize',1e4
データ型: single
| double
RandomStream
— 乱数ストリーム
グローバル ストリーム (既定値) | 乱数ストリーム オブジェクト
データ変換の再現性を得るための乱数ストリーム。乱数ストリーム オブジェクトとして指定します。詳細については、ランダムな特徴量拡張を参照してください。
予測子データを高次元空間に変換するために fitckernel
で使用されるランダムな基底関数を再現するには、RandomStream
を使用します。詳細は、RandStream を使用したグローバル ストリームの管理 と 乱数ストリームの作成と管理 を参照してください。
例: 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
CategoricalPredictors
— カテゴリカル予測子のリスト
正の整数のベクトル | logical ベクトル | 文字行列 | string 配列 | 文字ベクトルの cell 配列 | 'all'
カテゴリカル予測子のリスト。次の表のいずれかの値として指定します。
値 | 説明 |
---|---|
正の整数のベクトル | ベクトルの各エントリは、対応する予測子がカテゴリカルであることを示すインデックス値です。インデックス値の範囲は 1 ~
|
logical ベクトル |
|
文字行列 | 行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。 |
文字ベクトルの cell 配列または string 配列 | 配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。 |
"all" | すべての予測子がカテゴリカルです。 |
既定では、予測子データがテーブル (Tbl
) 内にある場合、fitckernel
は、その変数が logical ベクトル、categorical ベクトル、文字配列、string 配列または文字ベクトルの cell 配列のいずれかである場合に、変数を categorical であると見なします。予測子データが行列 (X
) である場合、fitckernel
はすべての予測子が連続的であると見なします。他の予測子をカテゴリカル予測子として指定するには、名前と値の引数 CategoricalPredictors
を使用してそれらを指定します。
特定されたカテゴリカル予測子に対して、fitckernel
はカテゴリカル変数に順序が設定されていないか順序が設定されているかに応じて、2 つの異なる方式を使用してダミー変数を作成します。順序付けのないカテゴリカル変数の場合、fitckernel
は、そのカテゴリカル変数の各レベルについて 1 つずつダミー変数を作成します。順序付けされたカテゴリカル変数の場合、fitckernel
は、カテゴリの数よりも 1 つ少ないダミー変数を作成します。詳細については、ダミー変数の自動作成を参照してください。
例: 'CategoricalPredictors','all'
データ型: single
| double
| logical
| char
| string
| cell
ClassNames
— 学習に使用するクラスの名前
categorical 配列 | 文字配列 | string 配列 | logical ベクトル | 数値ベクトル | 文字ベクトルの cell 配列
学習に使用するクラスの名前。categorical 配列、文字配列、string 配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列として指定します。ClassNames
のデータ型は Tbl
内の応答変数または Y
と同じでなければなりません。
ClassNames
が文字配列の場合、各要素は配列の 1 つの行に対応しなければなりません。
ClassNames
の使用目的は次のとおりです。
学習時のクラスの順序を指定する。
クラスの順序に対応する入力または出力引数の次元の順序を指定する。たとえば、
Cost
の次元の順序やpredict
によって返される分類スコアの列の順序を指定するためにClassNames
を使用します。学習用にクラスのサブセットを選択する。たとえば、
Y
に含まれているすべての異なるクラス名の集合が["a","b","c"]
であるとします。クラス"a"
および"c"
のみの観測値を使用してモデルに学習をさせるには、"ClassNames",["a","c"]
を指定します。
ClassNames
の既定値は、Tbl
内の応答変数または 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
PredictorNames
— 予測子変数名
一意な名前の string 配列 | 一意な文字ベクトルの cell 配列
予測子変数名。一意な名前の string 配列または一意な文字ベクトルの cell 配列として指定します。PredictorNames
の機能は、学習データの提供方法によって決まります。
X
とY
を指定した場合、PredictorNames
を使用してX
内の予測子変数に名前を割り当てることができます。PredictorNames
内の名前の順序は、X
の列の順序に一致しなければなりません。つまり、PredictorNames{1}
はX(:,1)
の名前、PredictorNames{2}
はX(:,2)
の名前であり、他も同様です。また、size(X,2)
とnumel(PredictorNames)
は等しくなければなりません。既定では
PredictorNames
は{'x1','x2',...}
です。
Tbl
を指定する場合、PredictorNames
を使用して学習に使用する予測子変数を選択できます。つまり、fitckernel
は、学習中にPredictorNames
の予測子変数と応答変数のみを使用します。PredictorNames
はTbl.Properties.VariableNames
のサブセットでなければならず、応答変数の名前を含めることはできません。既定では、すべての予測子変数の名前が
PredictorNames
に格納されます。PredictorNames
とformula
の両方ではなく、いずれか一方を使用して学習用の予測子を指定することをお勧めします。
例: "PredictorNames",["SepalLength","SepalWidth","PetalLength","PetalWidth"]
データ型: string
| cell
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
ResponseName
— 応答変数名
"Y"
(既定値) | 文字ベクトル | string スカラー
応答変数名。文字ベクトルまたは string スカラーとして指定します。
Y
を指定した場合、ResponseName
を使用して応答変数の名前を指定できます。ResponseVarName
またはformula
を指定した場合、ResponseName
を使用できません。
例: "ResponseName","response"
データ型: char
| string
ScoreTransform
— スコア変換
"none"
(既定値) | "doublelogit"
| "invlogit"
| "ismax"
| "logit"
| 関数ハンドル | ...
スコア変換。文字ベクトル、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
— 観測値の重み
非負の数値ベクトル | Tbl
内の変数の名前
観測値の重み。非負の数値ベクトルまたは Tbl
内の変数の名前を指定します。ソフトウェアは、X
または Tbl
の各観測値に、Weights
の対応する値で重みを付けます。Weights
の長さは、X
または Tbl
の観測値の数と等しくなければなりません。
入力データをテーブル Tbl
として指定した場合、Weights
は数値ベクトルが含まれている Tbl
内の変数の名前にすることができます。この場合、Weights
には文字ベクトルまたは string スカラーを指定しなければなりません。たとえば、重みベクトル W
が Tbl.W
として格納されている場合、'W'
として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl
の列は W
を含めてすべて予測子または応答変数として扱われます。
既定の設定では、Weights
は ones(n,1)
です。n
は X
または Tbl
の観測値数です。
合計が各クラスの事前確率の値と等しくなるように Weights
が正規化されます。
データ型: single
| double
| char
| string
OptimizeHyperparameters
— 最適化するパラメーター
'none'
(既定値) | 'auto'
| 'all'
| 使用可能パラメーター名の string 配列または cell 配列 | optimizableVariable
オブジェクトのベクトル
最適化するパラメーター。'OptimizeHyperparameters'
と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。
'none'
— 最適化を行いません。'auto'
—{'KernelScale','Lambda','Standardize'}
を使用します。'all'
— すべての使用可能パラメーターを最適化します。使用可能パラメーター名の cell 配列。
optimizableVariable
オブジェクトのベクトル。通常はhyperparameters
の出力です。
最適化では、パラメーターを変化させることにより、fitckernel
の交差検証損失 (誤差) を最小化しようとします。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペアの引数 HyperparameterOptimizationOptions
を使用します。
メモ
'OptimizeHyperparameters'
の値は、他の名前と値の引数を使用して指定した値より優先されます。たとえば、'OptimizeHyperparameters'
を 'auto'
に設定すると、fitckernel
は 'auto'
オプションに対応するハイパーパラメーターを最適化して、ハイパーパラメーターに指定された値を無視します。
fitckernel
では、以下のパラメーターを使用できます。
KernelScale
—fitckernel
は、既定では範囲[1e-3,1e3]
の対数スケールで、正の値を探索します。Lambda
—fitckernel
は、既定では範囲[1e-3,1e3]/n
の対数スケールで、正の値を探索します。n
は観測値の個数です。Learner
—fitckernel
は'svm'
と'logistic'
で探索します。NumExpansionDimensions
—fitckernel
は、既定では範囲[100,10000]
の対数スケールで、正の整数を探索します。Standardize
—fitckernel
は、true
とfalse
で探索します。
既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable
オブジェクトのベクトルを渡します。以下に例を示します。
load fisheriris params = hyperparameters('fitckernel',meas,species); params(2).Range = [1e-4,1e6];
'OptimizeHyperparameters'
の値として params
を渡します。
既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は誤分類率です。反復表示を制御するには、名前と値の引数 'HyperparameterOptimizationOptions'
の Verbose
フィールドを設定します。プロットを制御するには、名前と値の引数 'HyperparameterOptimizationOptions'
の ShowPlots
フィールドを設定します。
たとえば、カーネル分類器の最適化を参照してください。
例: 'OptimizeHyperparameters','auto'
HyperparameterOptimizationOptions
— 最適化のオプション
構造体
最適化のオプション。構造体として指定します。この引数を指定すると、名前と値の引数 OptimizeHyperparameters
の効果が変化します。この構造体のフィールドは、すべてオプションです。
フィールド名 | 値 | 既定の設定 |
---|---|---|
Optimizer |
| 'bayesopt' |
AcquisitionFunctionName |
オブジェクト関数のランタイムによって最適化が異なるので、名前に | 'expected-improvement-per-second-plus' |
MaxObjectiveEvaluations | 目的関数評価の最大数。 | 'bayesopt' および 'randomsearch' の場合は 30 、'gridsearch' の場合はグリッド全体 |
MaxTime | 制限時間。正の実数スカラーを指定します。制限時間の単位は、 | Inf |
NumGridDivisions | 'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。 | 10 |
ShowPlots | プロットを表示するかどうかを示す論理値。true の場合、最良の観測された目的関数の値が反復回数に対してプロットされます。ベイズ最適化を使用する場合 (Optimizer が 'bayesopt' )、最良の推定された目的関数値もプロットされます。最良の観測された目的関数値および最良の推定された目的関数値は、反復表示の BestSoFar (observed) 列および BestSoFar (estim.) 列の値にそれぞれ対応しています。これらの値は、Mdl.HyperparameterOptimizationResults のプロパティ ObjectiveMinimumTrace および EstimatedObjectiveMinimumTrace で確認できます。問題にベイズ最適化の最適化パラメーターが 1 つまたは 2 つある場合、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' | 使用したハイパーパラメーター、観測された目的関数の値 (交差検証損失)、および最低 (最良) から最高 (最悪) までの観測値の順位が格納されているテーブル |
詳細
ランダムな特徴量拡張
Random Kitchen Sink[1]や Fastfood[2]などの "ランダムな特徴量拡張" は、ビッグ データに使用するカーネル分類アルゴリズムのガウス カーネルを計算効率が高い方法で近似する手法です。ランダムな特徴量拡張は、大規模な学習セットが含まれているビッグ データ事例に対する方が現実的ですが、メモリに収まる小規模なデータ セットにも適用できます。
カーネル分類アルゴリズムでは、特徴量を高次元空間にマッピングした後で、データを 2 つのクラスに分離する最適な超平面を求めます。低次元空間で線形不可分な非線形の特徴量は、拡張された高次元空間で可分にできます。超平面分類についてのすべての計算では、ドット積のみを使用します。非線形分類モデルは、ドット積 x1x2' を非線形カーネル関数 に置き換えることにより取得できます。ここで、xi は i 番目の観測値 (行ベクトル)、φ(xi) は xi を高次元空間にマッピングする変換 ("カーネル トリック" と呼ばれます) です。しかし、(n が大きい) 大規模なデータ セットでは、観測値の各ペアについて G(x1,x2) (グラム行列) を評価すると計算コストが高くなります。
ランダムな特徴量拡張の方式では、ドット積がガウス カーネルを近似するようなランダム変換を求めます。つまり、次のようになります。
ここで、T(x) は における x を高次元空間 () にマッピングします。Random Kitchen Sink 方式では、次のランダムな変換を使用します。
ここで、 は から抽出した標本、σ はカーネル スケールです。この方式では O(mp) の計算および格納が必要です。
Fastfood 方式では、ガウス スケーリング行列と組み合わせたアダマール行列を使用して、Z の代わりに別のランダムな基底 V を導入します。このランダムな基底により、計算コストが O(mlog
p) に、ストレージが O(m) に削減されます。
m および σ の値は、それぞれ fitckernel
の NumExpansionDimensions
および KernelScale
を設定して指定できます。
関数 fitckernel
は、ランダムな特徴量拡張に Fastfood 方式を使用し、線形分類を使用してガウス カーネル分類モデルに学習をさせます。関数 fitcsvm
のソルバーでは n 行 n 列のグラム行列の計算が必要ですが、fitckernel
のソルバーに必要なのは、n 行 m 列の行列の形成だけです。ビッグ データの場合は一般に m が n よりはるかに小さくなります。
ボックス制約
ボックス制約は、マージンに違反している観測値に課せられる最大ペナルティを制御するパラメーターであり、過適合の防止 (正則化) に役立ちます。ボックス制約の値を大きくすると、学習時間が長くなる場合があります。
ボックス制約 (C) と正則化項の強度 (λ) には C = 1/(λn) という関係があります。n は観測値の個数です。
ヒント
モデルに学習させる前に予測子を標準化すると役立つことがあります。
関数
normalize
を使用して、学習データを標準化し、テスト データを学習データと同じスケールになるようにスケーリングできます。あるいは、名前と値の引数
Standardize
を使用して学習前に数値予測子を標準化します。返されるモデルのMu
プロパティとSigma
プロパティに、予測子の平均と標準偏差がそれぞれ含まれます。 (R2023b 以降)
モデルに学習をさせた後で、新しいデータについてラベルを予測する C/C++ コードを生成できます。C/C++ コードの生成には MATLAB Coder™ が必要です。詳細については、コード生成の紹介を参照してください。
アルゴリズム
fitckernel
は、メモリ制限 Broyden-Fletcher-Goldfarb-Shanno (LBFGS) ソルバーとリッジ (L2) 正則化を使用して、正則化された目的関数を最小化します。学習に使用した LBFGS ソルバーのタイプを調べるには、コマンド ウィンドウでFitInfo.Solver
と入力します。'LBFGS-fast'
— LBFGS ソルバー。'LBFGS-blockwise'
— ブロック単位方式を使用する LBFGS ソルバー。変換後の予測子データを保持するためにfitckernel
で必要となるメモリがBlockSize
の値より多い場合、この関数はブロック単位方式を使用します。'LBFGS-tall'
— ブロック単位方式の tall 配列用 LBFGS ソルバー。
fitckernel
がブロック単位方式を使用する場合、各反復で損失と勾配の計算をデータのさまざまな部分に分散させることにより LBFGS が実装されます。また、fitckernel
は、データの一部に対して局所的にモデルを当てはめ、平均化で係数を結合することにより、線形係数およびバイアス項の初期推定値を改善します。'Verbose',1
が指定された場合、fitckernel
は各データ通過についての診断情報を表示し、情報をFitInfo
のHistory
フィールドに格納します。fitckernel
がブロック単位方式を使用しない場合、初期推定値はゼロになります。'Verbose',1
が指定された場合、fitckernel
は各反復についての診断情報を表示し、情報をFitInfo
のHistory
フィールドに格納します。名前と値の引数
Cost
、Prior
、およびWeights
を指定すると、出力モデル オブジェクトにCost
、Prior
、およびW
の各プロパティの指定値がそれぞれ格納されます。Cost
プロパティには、ユーザー指定のコスト行列 (C) が変更なしで格納されます。Prior
プロパティとW
プロパティには、正規化後の事前確率と観測値の重みがそれぞれ格納されます。モデルの学習用に、事前確率と観測値の重みが更新されて、コスト行列で指定されているペナルティが組み込まれます。詳細については、誤分類コスト行列、事前確率、および観測値の重みを参照してください。
参照
[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.
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
fitckernel
は talltable
データをサポートしていません。一部の名前と値のペアの引数は、インメモリの関数
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'
検証のみがサポートされます。既定では、データの 20% がホールドアウト検証データとして選択されて確保され、残りのデータがモデルの学習に使用されます。この引数を使用してホールドアウトの比率に別の値を指定できます。たとえば、データの 30% を検証データとして確保するには'HyperparameterOptimizationOptions',struct('Holdout',0.3)
と指定します。
'KernelScale'
が'auto'
である場合、fitckernel
はtallrng
によって制御される乱数ストリームをサブサンプリングに使用します。再現性を得るには、tallrng
によって制御される乱数ストリームとグローバル ストリームの両方について乱数のシードを設定しなければなりません。'Lambda'
が'auto'
である場合、fitckernel
はX
内の観測値の個数を計算するため、さらにデータを通過する可能性があります。fitckernel
はブロック単位方式を使用します。詳細については、アルゴリズムを参照してください。
詳細は、tall 配列を参照してください。
自動並列サポート
Parallel Computing Toolbox™ を使用して自動的に並列計算を実行することで、コードを高速化します。
ハイパーパラメーターの最適化を並列実行するには、関数 fitckernel
を呼び出すときに名前と値の引数 'HyperparameterOptimizationOptions', struct('UseParallel',true)
を指定します。
並列的なハイパーパラメーターの最適化の詳細については、並列ベイズ最適化を参照してください。
並列計算の全般的な情報については、自動並列サポートを使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2017b で導入R2023b: カーネル モデルで予測子の標準化をサポート
R2023b 以降では、fitckernel
で数値予測子の標準化がサポートされます。つまり、Standardize
の値を true
として指定することで、各数値予測子変数を対応する列の平均と標準偏差でセンタリングおよびスケーリングできます。ソフトウェアは、カテゴリカル予測子を標準化しません。
名前と値の引数 OptimizeHyperparameters
を使用して Standardize
ハイパーパラメーターを最適化することもできます。以前のリリースとは異なり、OptimizeHyperparameters
の値として "auto"
を指定すると、fitckernel
には最適化可能なハイパーパラメーターとして Standardize
が含まれます。
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)