ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

fitcsvm

バイナリ サポート ベクター マシン (SVM) 分類器の学習

fitcsvm は、低~中次元の予測子データセットにおける 2 クラス (バイナリ) 分類について、サポート ベクター マシン (SVM) モデルに学習をさせるか、その交差検証を行います。fitcsvm は、カーネル関数を使用する予測子データのマッピングをサポートし、逐次最小最適化 (SMO)、反復単一データ アルゴリズム (ISDA)、または二次計画法による L1 ソフト マージン最小化を目的関数最小化についてサポートします。

高次元データセット、つまり多数の予測子変数が含まれているデータセットに対するバイナリ分類の場合に線形 SVM モデルに学習をさせるには、代わりに fitclinear を使用します。

バイナリ SVM モデルが結合されたマルチクラス学習の場合は、誤り訂正出力符号 (ECOC) を使用します。詳細は、fitcecocを参照してください。

SVM 回帰モデルに学習をさせる方法については、低~中次元の予測子データセットの場合は fitrsvm、高次元データセットの場合は fitrlinear を参照してください。

構文

Mdl = fitcsvm(Tbl,ResponseVarName)
Mdl = fitcsvm(Tbl,formula)
Mdl = fitcsvm(Tbl,Y)
Mdl = fitcsvm(X,Y)
Mdl = fitcsvm(___,Name,Value)

説明

Mdl = fitcsvm(Tbl,ResponseVarName) は、テーブル Tbl に格納されている標本データを使用して学習させたサポート ベクター マシン (SVM) 分類器 Mdl を返します。ResponseVarName は、1 クラスまたは 2 クラス分類用のクラス ラベルが含まれている Tbl 内の変数の名前です。

Mdl = fitcsvm(Tbl,formula) は、テーブル Tbl に格納されている標本データを使用して学習させた SVM 分類器を返します。formula は、Mdl のあてはめに使用する応答および Tbl 内の予測子変数サブセットの説明モデルです。

Mdl = fitcsvm(Tbl,Y) は、テーブル Tbl 内の予測子変数とベクトル Y 内のクラス ラベルを使用して学習させた SVM 分類器を返します。

Mdl = fitcsvm(X,Y) は、1 クラス分類または 2 クラス分類の場合に、行列 X 内の予測子とベクトル Y 内のクラス ラベルを使用して学習させた SVM 分類器を返します。

Mdl = fitcsvm(___,Name,Value) では、前の構文の入力引数に加えて、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、交差検証の種類、誤分類のコスト、スコア変換関数の種類を指定できます。

すべて折りたたむ

フィッシャーのアヤメのデータセットを読み込みます。がく片の長さと幅および観測済みのすべての setosa 種のアヤメを削除します。

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);

処理済みのデータセットを使用して SVM 分類器に学習させます。

SVMModel = fitcsvm(X,y)
SVMModel = 
  ClassificationSVM
             ResponseName: 'Y'
    CategoricalPredictors: []
               ClassNames: {'versicolor'  'virginica'}
           ScoreTransform: 'none'
          NumObservations: 100
                    Alpha: [24x1 double]
                     Bias: -14.4149
         KernelParameters: [1x1 struct]
           BoxConstraints: [100x1 double]
          ConvergenceInfo: [1x1 struct]
          IsSupportVector: [100x1 logical]
                   Solver: 'SMO'


  Properties, Methods

SVMModel は学習させた ClassificationSVM 分類器です。SVMModel のプロパティを表示します。たとえば、クラスの順序を確認するには、ドット表記を使用します。

classOrder = SVMModel.ClassNames
classOrder = 2x1 cell array
    {'versicolor'}
    {'virginica' }

最初のクラス ('versicolor') は陰性のクラスで、2 番目のクラス ('virginica') は陽性のクラスです。'ClassNames' 名前と値のペアの引数を使用すると、学習中にクラスの順序を変更できます。

データの散布図をプロットし、サポート ベクターを円で囲みます。

sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off

サポート ベクターは、推定されたクラス境界の上または外側で発生する観測値です。

名前と値のペアの引数 'BoxConstraint' を使用して学習時のボックス制約を設定すると、境界 (および結果的にサポート ベクターの個数) を調整できます。

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

load ionosphere
rng(1); % For reproducibility

放射基底関数を使用して SVM 分類器に学習させます。本ソフトウェアを使用してカーネル関数のスケール値を検出します。予測子を標準化します。

SVMModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF',...
    'KernelScale','auto');

SVMModel は学習させた ClassificationSVM 分類器です。

SVM 分類器を交差検証します。既定では、10 分割交差検証が使用されます。

CVSVMModel = crossval(SVMModel);

CVSVMModelClassificationPartitionedModel 交差検証分類器です。

標本外誤分類率を推定します。

classLoss = kfoldLoss(CVSVMModel)
classLoss = 0.0484

一般化率は約 5% です。

すべてのアヤメを同じクラスに割り当てることにより、フィッシャーのアヤメのデータセットを修正します。修正したデータセットの外れ値を検出し、外れ値である観測値の比率が予想どおりであることを確認します。

フィッシャーのアヤメのデータセットを読み込みます。花弁の長さと幅を削除します。すべてのアヤメを同じクラスとして扱います。

load fisheriris
X = meas(:,1:2);
y = ones(size(X,1),1);

修正したデータセットを使用して SVM 分類器に学習させます。観測値のうち 5% が外れ値であるとします。予測子を標準化します。

rng(1);
SVMModel = fitcsvm(X,y,'KernelScale','auto','Standardize',true,...
    'OutlierFraction',0.05);

SVMModel は学習させた ClassificationSVM 分類器です。既定では、1 クラス学習にはガウス カーネルが使用されます。

観測値と判定境界をプロットします。サポート ベクターと外れ値の可能性がある値にフラグを設定します。

svInd = SVMModel.IsSupportVector;
h = 0.02; % Mesh grid step size
[X1,X2] = meshgrid(min(X(:,1)):h:max(X(:,1)),...
    min(X(:,2)):h:max(X(:,2)));
[~,score] = predict(SVMModel,[X1(:),X2(:)]);
scoreGrid = reshape(score,size(X1,1),size(X2,2));

figure
plot(X(:,1),X(:,2),'k.')
hold on
plot(X(svInd,1),X(svInd,2),'ro','MarkerSize',10)
contour(X1,X2,scoreGrid)
colorbar;
title('{\bf Iris Outlier Detection via One-Class SVM}')
xlabel('Sepal Length (cm)')
ylabel('Sepal Width (cm)')
legend('Observation','Support Vector')
hold off

外れ値と他のデータとの境界は、等高線値が 0 である場所で発生します。

交差検証データで負のスコアをもつ観測値のごく一部が、約 5% であることを確認します。

CVSVMModel = crossval(SVMModel);
[~,scorePred] = kfoldPredict(CVSVMModel);
outlierRate = mean(scorePred<0)
outlierRate = 0.0467

fisheriris データセットの散布図を作成します。プロット内のグリッドの座標をデータセットの分布から派生する新しい観測値として扱い、データセット内の 3 つのクラスのいずれかに座標を割り当てることによりクラスの境界を求めます。

フィッシャーのアヤメのデータセットを読み込みます。花弁の長さと幅を予測子として使用します。

load fisheriris
X = meas(:,3:4);
Y = species;

データの散布図を調べます。

figure
gscatter(X(:,1),X(:,2),Y);
h = gca;
lims = [h.XLim h.YLim]; % Extract the x and y axis limits
title('{\bf Scatter Diagram of Iris Measurements}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend('Location','Northwest');

データには 3 つのクラスが含まれており、そのうち 1 つは他のクラスから線形分離可能です。

各クラスに対して、以下を実行します。

  1. 観測値がクラスのメンバーであるかどうかを示す logical ベクトル (indx) を作成します。

  2. 予測子データと indx を使用して SVM 分類器に学習させます。

  3. 分類器を cell 配列のセルに保存します。

クラスの順序を定義します。

SVMModels = cell(3,1);
classes = unique(Y);
rng(1); % For reproducibility

for j = 1:numel(classes)
    indx = strcmp(Y,classes(j)); % Create binary classes for each classifier
    SVMModels{j} = fitcsvm(X,indx,'ClassNames',[false true],'Standardize',true,...
        'KernelFunction','rbf','BoxConstraint',1);
end

SVMModels は 3 行 1 列の cell 配列です。ここで、各セルには ClassificationSVM 分類器が格納されています。各セルで、陽性のクラスはそれぞれ setosa、versicolor、virginica です。

プロット内で細かいグリッドを定義し、座標を学習データの分布からの新しい観測値として扱います。各分類器を使用して、この新しい測定値のスコアを推定します。

d = 0.02;
[x1Grid,x2Grid] = meshgrid(min(X(:,1)):d:max(X(:,1)),...
    min(X(:,2)):d:max(X(:,2)));
xGrid = [x1Grid(:),x2Grid(:)];
N = size(xGrid,1);
Scores = zeros(N,numel(classes));

for j = 1:numel(classes)
    [~,score] = predict(SVMModels{j},xGrid);
    Scores(:,j) = score(:,2); % Second column contains positive-class scores
end

Scores の各行には 3 つのスコアが格納されています。スコアが最大の要素のインデックスは、新しいクラスの観測値の所属先となる可能性が最も高いと思われるクラスのインデックスです。

新しいそれぞれの観測値を、当該の観測値に最大スコアを設定する分類器に関連付けます。

[~,maxScore] = max(Scores,[],2);

プロットの各領域の色は、対応する新しい観測値が属するクラスに基づいています。

figure
h(1:3) = gscatter(xGrid(:,1),xGrid(:,2),maxScore,...
    [0.1 0.5 0.5; 0.5 0.1 0.5; 0.5 0.5 0.1]);
hold on
h(4:6) = gscatter(X(:,1),X(:,2),Y);
title('{\bf Iris Classification Regions}');
xlabel('Petal Length (cm)');
ylabel('Petal Width (cm)');
legend(h,{'setosa region','versicolor region','virginica region',...
    'observed setosa','observed versicolor','observed virginica'},...
    'Location','Northwest');
axis tight
hold off

fitcsvm を使用してハイパーパラメーターを自動的に最適化します。

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

load ionosphere

自動的なハイパーパラメーター最適化を使用して、5 分割交差検証損失を最小化するハイパーパラメーターを求めます。再現性を得るために、乱数シードを設定し、'expected-improvement-plus' の獲得関数を使用します。

rng default
Mdl = fitcsvm(X,Y,'OptimizeHyperparameters','auto',...
    'HyperparameterOptimizationOptions',struct('AcquisitionFunctionName',...
    'expected-improvement-plus'))

|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstrain-|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    | t            |              |
|=====================================================================================================|
|    1 | Best   |     0.21652 |      18.493 |     0.21652 |     0.21652 |       64.836 |    0.0015729 |
|    2 | Accept |     0.35897 |     0.16509 |     0.21652 |     0.22539 |     0.036335 |       5.5755 |
|    3 | Best   |     0.13105 |       7.131 |     0.13105 |     0.14152 |    0.0022147 |    0.0023957 |
|    4 | Accept |     0.35897 |     0.10991 |     0.13105 |     0.13108 |       5.1259 |        98.62 |
|    5 | Accept |      0.1339 |      14.513 |     0.13105 |     0.13111 |    0.0011599 |    0.0010098 |
|    6 | Accept |     0.13105 |      3.3991 |     0.13105 |     0.13106 |    0.0010151 |    0.0045756 |
|    7 | Best   |     0.12821 |      9.0972 |     0.12821 |     0.12819 |    0.0010563 |    0.0022307 |
|    8 | Accept |      0.1339 |      11.601 |     0.12821 |     0.13013 |    0.0010113 |    0.0026572 |
|    9 | Accept |     0.12821 |      6.4781 |     0.12821 |     0.12976 |    0.0010934 |    0.0022461 |
|   10 | Accept |     0.12821 |      3.8203 |     0.12821 |     0.12933 |    0.0010315 |    0.0023551 |
|   11 | Accept |      0.1396 |       17.31 |     0.12821 |     0.12954 |       994.04 |      0.20756 |
|   12 | Accept |     0.13105 |      16.182 |     0.12821 |     0.12945 |       20.145 |     0.044584 |
|   13 | Accept |     0.21368 |      18.317 |     0.12821 |     0.12787 |       903.79 |     0.056122 |
|   14 | Accept |      0.1339 |     0.26202 |     0.12821 |     0.12939 |     0.018688 |     0.038639 |
|   15 | Accept |     0.12821 |      2.8504 |     0.12821 |      0.1295 |       5.6464 |      0.15938 |
|   16 | Accept |     0.13675 |      9.4282 |     0.12821 |     0.12798 |       0.5485 |     0.020716 |
|   17 | Accept |     0.12821 |      6.5178 |     0.12821 |     0.12955 |       1.2899 |     0.063233 |
|   18 | Accept |      0.1339 |      9.3664 |     0.12821 |     0.12957 |       869.51 |      0.94889 |
|   19 | Accept |     0.13675 |       9.368 |     0.12821 |     0.12957 |       112.89 |      0.31231 |
|   20 | Accept |     0.13105 |     0.12209 |     0.12821 |     0.12958 |    0.0010803 |      0.03695 |
|=====================================================================================================|
| Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | BoxConstrain-|  KernelScale |
|      | result |             | runtime     | (observed)  | (estim.)    | t            |              |
|=====================================================================================================|
|   21 | Accept |     0.13675 |      9.5117 |     0.12821 |      0.1299 |       7.7299 |     0.076169 |
|   22 | Best   |     0.12536 |     0.17058 |     0.12536 |     0.13007 |    0.0010485 |     0.013248 |
|   23 | Accept |     0.20228 |      18.202 |     0.12536 |     0.12548 |     0.060212 |    0.0010323 |
|   24 | Accept |      0.1339 |     0.24592 |     0.12536 |     0.12556 |      0.30698 |      0.16097 |
|   25 | Accept |      0.1339 |      15.142 |     0.12536 |     0.12923 |       963.05 |       0.5183 |
|   26 | Accept |     0.13675 |     0.27628 |     0.12536 |     0.12888 |    0.0039748 |     0.015475 |
|   27 | Accept |      0.1339 |      1.5718 |     0.12536 |     0.12889 |      0.33582 |     0.066787 |
|   28 | Accept |      0.1339 |      15.411 |     0.12536 |     0.12884 |       4.2069 |     0.032774 |
|   29 | Best   |     0.12536 |     0.13208 |     0.12536 |     0.12658 |    0.0010233 |     0.017839 |
|   30 | Accept |     0.12536 |     0.13041 |     0.12536 |     0.12579 |    0.0010316 |     0.019592 |

__________________________________________________________
Optimization completed.
MaxObjectiveEvaluations of 30 reached.
Total function evaluations: 30
Total elapsed time: 249.4758 seconds.
Total objective function evaluation time: 225.3244

Best observed feasible point:
    BoxConstraint    KernelScale
    _____________    ___________

      0.0010233       0.017839  

Observed objective function value = 0.12536
Estimated objective function value = 0.12579
Function evaluation time = 0.13208

Best estimated feasible point (according to models):
    BoxConstraint    KernelScale
    _____________    ___________

      0.0010233       0.017839  

Estimated objective function value = 0.12579
Estimated function evaluation time = 0.1535
Mdl = 
  ClassificationSVM
                         ResponseName: 'Y'
                CategoricalPredictors: []
                           ClassNames: {'b'  'g'}
                       ScoreTransform: 'none'
                      NumObservations: 351
    HyperparameterOptimizationResults: [1×1 BayesianOptimization]
                                Alpha: [91×1 double]
                                 Bias: -5.6976
                     KernelParameters: [1×1 struct]
                       BoxConstraints: [351×1 double]
                      ConvergenceInfo: [1×1 struct]
                      IsSupportVector: [351×1 logical]
                               Solver: 'SMO'


  Properties, Methods

入力引数

すべて折りたたむ

モデルを学習させるために使用する標本データ。テーブルとして指定します。Tbl の各行は 1 つの観測値に、各列は 1 つの予測子変数に対応します。オプションとして、Tbl に応答変数用の列を 1 つ追加できます。文字ベクトルの cell 配列ではない cell 配列と複数列の変数は使用できません。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数をすべて予測子として使用するには、ResponseVarName を使用して応答変数を指定します。

Tbl に応答変数が含まれている場合に Tbl 内の他の変数の一部のみを予測子として使用するには、formula を使用して式を指定します。

Tbl に応答変数が含まれていない場合は、Y を使用して応答変数を指定します。応答変数の長さと Tbl の行数は等しくなければなりません。

データ型: テーブル

応答変数の名前。Tbl 内の変数の名前で指定します。

ResponseVarName は文字ベクトルとして指定しなければなりません。たとえば、応答変数 YTbl.Y として格納されている場合、'Y' として指定します。それ以外の場合、モデルを学習させるときに、Tbl の列は Y を含めてすべて予測子として扱われます。

応答変数は、categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列でなければなりません。Y が文字配列である場合、応答変数の各要素は配列の 1 つの行に対応しなければなりません。

名前と値のペアの引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

データ型: char

予測子変数のサブセットおよび応答の説明モデル。'Y~X1+X2+X3' という形式の文字ベクトルを指定します。この式では、Y は応答変数を、X1X2 および X3 は予測子変数を表します。変数は、Tbl (Tbl.Properties.VariableNames) に含まれている変数の名前でなければなりません。

モデルに学習をさせるための予測子として Tbl 内の変数のサブセットを指定するには、式を使用します。式を指定した場合、formula に現れない Tbl 内の変数は使用されません。

データ型: char

SVM モデルに学習させるクラス ラベル。categorical 配列、文字配列、logical ベクトル、数値ベクトル、または文字ベクトルの cell 配列を指定します。

  • Y に含まれるクラスは、2 種類を超えてはなりません。マルチクラス学習については、fitcecoc を参照してください。

  • Y が文字配列である場合、クラス ラベルの各要素は配列の 1 つの行に対応しなければなりません。

  • Y の長さと Tbl または X の行数は同じでなければなりません。

  • 名前と値のペアの引数 ClassNames を使用してクラスの順序を指定することをお勧めします。

データ型: char | cell | categorical | logical | single | double

SVM 分類器に学習させる予測子データ。数値の行列として指定します。

X の各行は 1 つの観測値 (インスタンスまたは例とも呼ばれます) に、各列は 1 つの予測子 (特徴量とも呼ばれます) に対応します。

Y の長さと X の行数は等しくなければなりません。

予測子の名前を X に表示される順序で指定するには、'PredictorNames' 名前と値のペアの引数を使用します。

データ型: double | single

名前と値のペアの引数

オプションの Name,Value の引数ペアをコンマ区切りで指定します。ここで、Name は引数名で、Value は対応する値です。Name は単一引用符 (' ') で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前/値のペア引数を、任意の順番で指定できます。

例: fitcsvm(X,Y,'KFold',10,'Cost',[0 2;1 0],'ScoreTransform','sign') は、10 分割交差検証を実行し、偽陰性の 2 倍のペナルティを偽陽性に適用し、符号関数を使用してスコアを変換します。

SVM のオプション

すべて折りたたむ

ボックス制約'BoxConstraint' と正のスカラーで構成されるコンマ区切りペアとして指定します。

1 クラス学習の場合、ボックス制約は必ず 1 に設定されます。

BoxConstraintCostPriorStandardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。

例: 'BoxConstraint',100

データ型: double | single

グラム行列の要素の計算に使用するカーネル関数。'KernelFunction' とカーネル関数名から構成されるコンマ区切りのペアとして指定します。G(xj,xk) がグラム行列の要素 (j,k) であるとします。ここで、xj および xkX 内の観測値 j および k を表す p 次元ベクトルです。サポートされるカーネル関数の名前および関数形式を次の表で説明します。

カーネル関数名説明
'gaussian' または 'rbf'ガウスまたは放射基底関数 (RBF) カーネル (1 クラス学習の場合の既定値)

G(xj,xk)=exp(xjxk2)

'linear'線形カーネル (2 クラス学習の場合の既定値)

G(xj,xk)=xjxk

'polynomial'多項式カーネル。'PolynomialOrder',q を使用して多項式カーネルの順序 (q) を指定します。

G(xj,xk)=(1+xjxk)q

独自のカーネル関数を設定することもできます。たとえば、'KernelFunction','kernel' を使用すると kernel が設定されます。値 kernel は次の形式でなければなりません。

function G = kernel(U,V)
ここで、

  • U は、m 行 p 列の行列です。列は予測子変数に、行は観測値に対応します。

  • V は、n 行 p 列の行列です。列は予測子変数に、行は観測値に対応します。

  • G は、UV の行による m 行 n 列のグラム行列です。

kernel.m は、MATLAB® パス上になければなりません。

カーネル関数には一般的な名前を使用しないようにしてください。たとえば、シグモイド カーネル関数には 'sigmoid' ではなく 'mysigmoid' などの名前を使用します。

例: 'KernelFunction','gaussian'

データ型: char

カーネル スケール パラメーター。'KernelScale' と、'auto' または正のスカラーで構成される、コンマ区切りのペアとして指定します。予測子行列 X のすべての要素が KernelScale の値で除算されます。その後、適切なカーネル ノルムが適用され、グラム行列が計算されます。

  • 'auto' を指定した場合、ヒューリスティック手法を使用して適切なスケール係数が選択されます。このヒューリスティック手法ではサブサンプリングを使用するので、呼び出すたびに推定値が変化する可能性があります。このため、結果を再現するには、学習の前に rng を使用して乱数シードを設定します。

  • 'KernelFunction','kernel' のように KernelScale と独自のカーネル関数を指定すると、エラーが発生します。kernel の内部でスケーリングを適用しなければなりません。

例: 'KernelScale','auto'

データ型: double | single | char

多項式カーネル関数の次数。'PolynomialOrder' と正の整数から成るコンマ区切りのペアとして指定されます。

KernelFunction'polynomial' ではない場合に 'PolynomialOrder' を設定すると、エラーがスローされます。

例: 'PolynomialOrder',2

データ型: double | single

カーネル オフセット パラメーター。'KernelOffset' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

KernelOffset がグラム行列の各要素に追加されます。

既定値は以下のとおりです。

  • ソルバーが SMO の場合 (つまり、'Solver','SMO' を設定した場合) は 0

  • ソルバーが ISDA の場合 (つまり、'Solver','ISDA' を設定した場合) は 0.1

例: 'KernelOffset',0

データ型: double | single

予測子データを標準化するためのフラグ。'Standardize'true (1) または false (0) から構成されるコンマ区切りのペアとして指定します。

'Standardize',true を設定した場合、次のようになります。

  • 各予測子変数 (X または Tbl) は、対応する列の加重平均および標準偏差によってセンタリングおよびスケーリングされます。重み付きの標準化の詳細については、アルゴリズムを参照してください。MATLAB では、カテゴリカル予測子について生成されたダミー変数の列に格納されているデータは標準化されません。

  • 分類器の学習には標準化された予測子が使用されますが、分類器の X プロパティには標準化されていないデータが行列またはテーブルとして格納されます。

例: 'Standardize',true

データ型: logical

最適化ルーチン。'Solver' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'ISDA'反復単一データ アルゴリズム ([30] 参照)
'L1QP'quadprog を使用して二次計画法による L1 ソフト マージン最小化を実装します。このオプションには Optimization Toolbox™ ライセンスが必要です。詳細は、二次計画法の定義 (Optimization Toolbox)を参照してください。
'SMO'逐次最小最適化 ([17] 参照)

2 クラス学習の場合、または 'OutlierFraction' を正の値に設定した場合、既定値は 'ISDA' です。それ以外の場合は 'SMO' です。

例: 'Solver','ISDA'

データ型: char

アルファ係数の初期推定値。'Alpha' と非負値の数値ベクトルから構成されるコンマ区切りのペアとして指定します。Alpha の長さは X の行数と等しくなければなりません。

  • 'Alpha' の各要素は X の観測値に対応します。

  • 'Alpha'NaN を格納できません。

  • 'Alpha' を交差検証の名前と値のペアの引数 ('CrossVal''CVPartition''Holdout''KFold' または 'Leaveout') のいずれかと同時に指定すると、エラーが返されます。

Y に欠損値が含まれている場合は、欠損値に対応するすべての行を YX および 'Alpha' から削除してください。つまり、次のように入力します。

idx = ~isundefined(categorical(Y));
Y = Y(idx,:);
X = X(idx,:);
alpha = alpha(idx);
そして、YX および alpha をそれぞれ応答、予測子およびアルファの初期推定値として渡します。

既定値は、以下のとおりです。

  • 1 クラス学習の場合: 0.5*ones(size(X,1),1)

  • 2 クラス学習の場合: zeros(size(X,1),1)

例: 'Alpha',0.1*ones(size(X,1),1)

データ型: double | single

キャッシュ サイズ。'CacheSize''maximal' または正のスカラーで構成されるコンマ区切りのペアとして指定します。

CacheSize'maximal' の場合、n 行 n 列 のグラム行列を保持できる十分なメモリが確保されます。

CacheSize が正のスカラーの場合、モデルの学習用に CacheSize メガバイトのメモリが確保されます。

例: 'CacheSize','maximal'

データ型: double | char | single

アルファ係数をクリップするためのフラグ。'ClipAlphas'true または false のいずれかから構成されるコンマ区切りのペアとして指定します。

観測値 j のアルファ係数が αj、観測値 j のボックス制約が Cj であるとします (j = 1,...,n)。n は学習標本のサイズです。

説明
true各反復で αj が 0 または Cj に近い場合、MATLAB で αj がそれぞれ 0 または Cj に設定されます。
false最適化時に MATLAB でアルファ係数は変更されません。

MATLAB では、学習済みの SVM モデル オブジェクトの Alpha プロパティに最終的な α の値が格納されます。

ClipAlphas は、SMO と ISDA の収束に影響を与える可能性があります。

例: 'ClipAlphas',false

データ型: logical

1 クラス学習の ν パラメーター。'Nu' と正のスカラーから構成されるコンマ区切りのペアとして指定します。Nu は、0 より大きく 1 以下でなければなりません。

Nu の設定により、学習例の大部分を陽性のクラスにするか、スコア関数の重みを最小限にするかのバランスを制御します。

例: 'Nu',0.25

データ型: double | single

最適化診断メッセージ出力の反復回数。'NumPrint' と非負の整数で構成されるコンマ区切りのペアとして指定します。

'Verbose',1'NumPrint',numprint を指定すると、numprint 回反復するたびに SMO と ISDA からのすべての最適化診断メッセージがコマンド ウィンドウに表示されます。

例: 'NumPrint',500

データ型: double | single

学習データで想定される外れ値の比率。'OutlierFraction' と区間 [0,1) の数値スカラーから構成されるコンマ区切りのペアとして指定します。

'OutlierFraction',outlierfraction を設定するとします。outlierfraction は 0 より大きい値です。

  • 2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100*outlierfraction% が削除されます。削除された観測値は、勾配の大きいものに対応します。

  • 1 クラス学習では、学習セットに負のスコアをもつ観測 outlierfraction など、適切なバイアス項が検出されます。

例: 'OutlierFraction',0.01

データ型: double | single

学習データ内の重複する観測値を単一の観測値に置き換えるためのフラグ。'RemoveDuplicates'true または false から構成されるコンマ区切りのペアとして指定します。

RemoveDuplicatestrue の場合、fitcsvm は学習データ内の重複する観測値を同じ値の単一の観測値に置き換えます。単一の観測値の重みは、削除された対応する重複の重みの合計に等しくなります (Weights を参照)。

ヒント

多数の重複する観測値がデータセットに含まれている場合は、'RemoveDuplicates',true を指定すると収束時間が大幅に短くなる可能性があります。

データ型: logical

詳細レベル。'Verbose'01 または 2 から構成されるコンマ区切りのペアとして指定します。Verbose の値は、コマンド ウィンドウに表示され構造体として Mdl.ConvergenceInfo.History に保存される最適化情報の量を制御します。

次の表は、使用できる詳細レベル オプションの一覧です。

説明
0収束情報の表示や保存は行われません。
1診断メッセージが表示され、numprint 回の反復ごとに収束基準が保存されます。ここで、numprint は名前と値のペアの引数 'NumPrint' の値です。
2診断メッセージが表示され、1 回の反復ごとに収束基準が保存されます。

例: 'Verbose',1

データ型: double | single

その他の分類オプション

すべて折りたたむ

カテゴリカル予測子のリスト。'CategoricalPredictors' と次の表のいずれかの値から構成されるコンマ区切りのペアとして指定します。

説明
正の整数のベクトルベクトルのエントリは、カテゴリカル変数が含まれている予測子データ (X または Tbl) の列に対応するインデックス値です。
logical ベクトルtrue というエントリは、予測子データ (X または Tbl) の対応する列がカテゴリカル変数であることを意味します。
文字行列行列の各行は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。文字行列の各行が同じ長さになるように、名前を余分な空白で埋めてください。
文字ベクトルの cell 配列配列の各要素は予測子変数の名前です。名前は PredictorNames のエントリに一致しなくてはなりません。
'all'すべての予測子がカテゴリカルです。

既定の設定では、予測子データがテーブル (Tbl) 内にあり、このテーブルに論理値、カテゴリカル値、または文字ベクトルの cell 配列が格納されている場合、fitcsvm は変数がカテゴリカルであると見なします。予測子データが行列 (X) である場合、fitcsvm はすべての予測子が連続的であると見なします。データが行列の場合にカテゴリカル予測子を確認するには、名前と値のペアの引数 'CategoricalPredictors' を使用します。

例: 'CategoricalPredictors','all'

データ型: single | double | logical | char | cell

学習に使用するクラスの名前。'ClassNames' と categorical 配列、文字配列、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 | logical | single | double | cell

誤分類のコスト。'Cost' と正方行列または構造体配列から構成されるコンマ区切りのペアとして指定します。

  • 正方行列 Cost を指定した場合、Cost(i,j) は真のクラスが i である点をクラス j に分類するコストです。つまり、行は真のクラスに、列は予測クラスに対応します。Cost の対応する行と列についてクラスの順序を指定するには、名前と値のペアの引数 ClassNames も指定します。

  • 構造体 S を指定する場合、次の 2 つのフィールドが必要です。

    • S.ClassNames: Y と同じデータ型のクラス名を表す変数を含む。

    • S.ClassificationCosts。行と列の順序が S.ClassNames と同じコスト行列。

2 クラス学習の場合、コスト行列を指定すると、そのコスト行列で指定されているペナルティが組み込まれ、事前確率が更新されます。この結果、コスト行列は既定の状態にリセットされます。BoxConstraintCostPriorStandardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。

既定値は、以下のとおりです。

  • 1 クラス学習の場合: Cost = 0

  • 2 クラス学習では、i ~= j の場合は Cost(i,j) = 1i = j の場合は Cost(i,j) = 0 です。

例: 'Cost',[0,1;2,0]

データ型: double | single | 構造体

予測子変数名。'PredictorNames' と一意な文字ベクトルの cell 配列から構成されるコンマ区切りのペアとして指定します。'PredictorNames' の機能は、学習データの提供方法によって決まります。

  • XY を指定した場合、'PredictorNames' を使用して X の名前で予測子変数を指定できます。

    • PredictorNames 内の名前の順序は、X の列の順序に一致しなければなりません。つまり、PredictorNames{1}X(:,1) の名前、PredictorNames{2}X(:,2) の名前であり、他も同様です。また、size(X,2)numel(PredictorNames) は等しくなければなりません。

    • 既定では PredictorNames{'x1','x2',...} です。

  • Tbl が与えられた場合、'PredictorNames' を使用して学習に使用する予測子変数を選択できます。つまり、fitcsvmPredictorNames の予測子変数と応答変数のみを学習で使用します。

    • PredictorNamesTbl.Properties.VariableNames のサブセットでなければならず、応答変数の名前を含めることはできません。

    • 既定では、すべての予測子変数の名前が PredictorNames に格納されます。

    • 'PredictorNames'formula のいずれか一方のみを使用して学習用の予測子を指定することをお勧めします。

例: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

データ型: cell

各クラスの事前確率。'Prior' と次の表の値から構成されるコンマ区切りのペアとして指定します。

説明
'empirical'クラスの事前確率は、Y のクラスの相対的頻度です。
'uniform'クラスの事前確率はいずれも 1/K (K はクラス数) となります。
数値ベクトルベクトルの各要素はクラスの事前確率です。Mdl.ClassNames に従って要素を並べ替えるか、ClassNames 名前と値のペアの引数を使用して順序を指定します。要素は合計が 1 になるように正規化されます。
構造体

構造体 S には 2 つのフィールドがあります。

  • S.ClassNames: Y と同じ型の変数のクラス名が格納されます。

  • S.ClassProbs: 対応する事前確率のベクトルが格納されます。ベクトルの要素は合計が 1 になるように正規化されます。

2 クラス学習の場合、コスト行列を指定すると、そのコスト行列で指定されているペナルティが組み込まれ、事前確率が更新されます。BoxConstraintCostPriorStandardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。

例: struct('ClassNames',{{'setosa','versicolor','virginica'}},'ClassProbs',1:3)

データ型: char | double | single | 構造体

応答変数の名前。'ResponseName' と文字ベクトルから構成されるコンマ区切りのペアとして指定します。

  • Y を指定した場合、'ResponseName' を使用して応答変数の名前を指定できます。

  • ResponseVarName または formula を指定した場合、'ResponseName' を使用することはできません。

例: 'ResponseName','response'

データ型: char

スコア変換。'ScoreTransform' と文字ベクトルまたは関数ハンドルから構成されるコンマ区切りのペアとして指定します。

次の表は、使用可能な文字ベクトルをまとめています。

説明
'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 | 関数ハンドル

観測値の重み。'Weights' と、正の値の数値ベクトルまたは Tbl 内の変数の名前から構成されるコンマ区切りのペアとして指定します。X または Tbl の各行に含まれている観測値は、Weights の対応する値で重み付けされます。Weights のサイズは、X または Tbl の行数と同じでなければなりません。

入力データをテーブル Tbl として指定した場合、Weights は数値ベクトルが含まれている Tbl 内の変数の名前にすることができます。この場合、Weights には文字ベクトルを指定しなければなりません。たとえば、重みベクトル WTbl.W として格納されている場合、'W' として指定します。それ以外の場合、モデルに学習をさせるときに、Tbl の列は W を含めてすべて予測子または応答変数として扱われます。

既定の設定では、Weightsones(n,1) です。nX または Tbl の観測値数です。

合計が各クラスの事前確率の値と等しくなるように Weights が正規化されます。BoxConstraintCostPriorStandardize および Weights の関係とアルゴリズム動作についての詳細は、アルゴリズムを参照してください。

データ型: double | single

メモ

交差検証の名前と値のペアの引数を名前と値のペアの引数 'OptimizeHyperparameters' と同時に使用することはできません。'OptimizeHyperparameters' の場合の交差検証は、名前と値のペアの引数 'HyperparameterOptimizationOptions' を使用することのみによって変更できます。

交差検証オプション

すべて折りたたむ

交差検証分類器を学習させるためのフラグ。'Crossval''on' または 'off' で構成されるコンマ区切りのペアとして指定します。

'on' を指定すると、10 の分割を使用して交差検証分類器の学習が実行されます。

名前と値のペアの引数 CVPartitionHoldoutKFold または Leaveout を使用すると、この交差検証の設定を変更できます。交差検証済みモデルを作成するときに使用できる交差検証の名前と値のペアの引数は、一度に 1 つだけです。

または、後で Mdlcrossval に渡して交差検証を実行します。

例: 'Crossval','on'

データ型: char

交差検証分割。'CVPartition'cvpartition により作成された cvpartition 分割オブジェクトで構成されるコンマ区切りのペアとして指定します。分割オブジェクトは、交差検証のタイプと、学習セットおよび検証セットのインデックス付けを指定します。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、'CVPartition''Holdout''KFold''Leaveout' の 4 つのうちのいずれかのみです。

例: cvp = cvpartition(500,'KFold',5) を使用して、500 個の観測値に対する 5 分割交差検証について無作為な分割を作成するとします。この場合、'CVPartition',cvp を使用して交差検証済みモデルを指定できます。

ホールドアウト検定に使用されるデータの比率。'Holdout' と範囲 (0,1) のスカラー値から構成されるコンマ区切りのペアとして指定します。'Holdout',p を指定した場合、以下の手順が実行されます。

  1. p*100% のデータを無作為に選択して検証データとして確保し、残りのデータを使用してモデルに学習をさせる。

  2. コンパクトな学習済みモデルを交差検証済みモデルの Trained プロパティに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Holdout',0.1

データ型: double | single

交差検証済みモデルで使用する分割数。'KFold' と 1 より大きい正の整数から構成されるコンマ区切りのペアとして指定します。'KFold',k を指定した場合、以下の手順が実行されます。

  1. データを無作為に k 個のセットに分割する。

  2. 各セットについて、そのセットを検定データとして確保し、他の k - 1 個のセットを使用してモデルに学習をさせる。

  3. k 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている k 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'KFold',5

データ型: single | double

Leave-one-out 法の交差検証のフラグ。'Leaveout''on' または 'off' で構成されるコンマ区切りのペアとして指定します。'Leaveout','on' を指定した場合、n 個の観測値 (n はモデルの NumObservations プロパティの値) のそれぞれについて以下の手順が実行されます。

  1. その観測値を検証データとして確保し、他の n - 1 個の観測値を使用してモデルに学習をさせる。

  2. n 個のコンパクトな学習済みモデルを、交差検証済みモデルの Trained プロパティに含まれている n 行 1 列の cell ベクトルのセルに格納する。

交差検証済みモデルの作成に使用できる名前と値のペアの引数は、CVPartitionHoldoutKFoldLeaveout の 4 つのうちのいずれかのみです。

例: 'Leaveout','on'

データ型: char

収束制御オプション

すべて折りたたむ

SMO (逐次最小最適化) または ISDA (反復単一データ アルゴリズム) により取得された上位の違反値と下位の違反値の間に存在する、勾配差分の許容誤差。'DeltaGradientTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

DeltaGradientTolerance0 の場合、最適化収束を確認するために、勾配差分の許容誤差を使用しません。

既定値は、以下のとおりです。

  • ソルバーが SMO の場合 (たとえば、'Solver','SMO' を設定した場合など) は 1e-3

  • ソルバーが ISDA の場合 (たとえば、'Solver','ISDA' を設定した場合など) は 0

例: 'DeltaGradientTolerance',1e-2

データ型: double | single

SMO または ISDA により取得された実行可能性ギャップの許容誤差。'GapTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

GapTolerance0 の場合、最適化収束の確認には、実行可能性ギャップの許容誤差を使用しません。

例: 'GapTolerance',1e-2

データ型: double | single

数値最適化反復の最大回数。'IterationLimit' と正の整数値で構成されるコンマ区切りのペアとして指定します。

最適化ルーチンが正常に収束したかどうかに関係なく、学習済みのモデルが返されます。Mdl.ConvergenceInfo に収束情報が格納されます。

例: 'IterationLimit',1e8

データ型: double | single

KKT (カルーシュ・キューン・タッカー) 相補性条件の違反許容誤差。'KKTTolerance' と非負のスカラーで構成されるコンマ区切りのペアとして指定します。

KKTTolerance0 の場合、最適化収束の確認に実行可能性の KKT 相補性条件の違反許容誤差は使用されません。

既定値は、以下のとおりです。

  • ソルバーが SMO の場合 (たとえば、'Solver','SMO' を設定した場合など) は 0

  • ソルバーが ISDA の場合 (たとえば、'Solver','ISDA' を設定した場合など) は 1e-3

例: 'KKTTolerance',1e-2

データ型: double | single

アクティブ セットの縮小間の反復回数。'ShrinkagePeriod' と非負の整数から構成されるコンマ区切りのペアとして指定します。

'ShrinkagePeriod',0 を設定すると、アクティブ セットは縮小されません。

例: 'ShrinkagePeriod',1000

データ型: double | single

ハイパーパラメーター最適化オプション

すべて折りたたむ

最適化するパラメーター。'OptimizeHyperparameters' と次のいずれかの値から構成されるコンマ区切りのペアとして指定します。

  • 'none' — 最適化を行いません。

  • 'auto'{'BoxConstraint','KernelScale'} を使用します。

  • 'all' — すべての使用可能パラメーターを最適化します。

  • 使用可能パラメーター名の cell 配列。

  • optimizableVariable オブジェクトのベクトル。通常は hyperparameters の出力です。

最適化では、パラメーターを変化させることにより、fitcsvm の交差検証損失 (誤差) を最小化しようとします。交差検証損失の詳細については、分類損失を参照してください。交差検証のタイプおよびその他の最適化の側面を制御するには、名前と値のペアの引数 HyperparameterOptimizationOptions を使用します。

メモ

OptimizeHyperparameters の値は、他の名前と値のペアの引数を使用して設定した値より優先されます。たとえば、OptimizeHyperparameters'auto' に設定すると、'auto' の値が適用されます。

fitcsvm では、以下のパラメーターを使用できます。

  • BoxConstraintfitcsvm は、既定では範囲 [1e-3,1e3] の対数スケールで、正の値を探索します。

  • KernelScalefitcsvm は、既定では範囲 [1e-3,1e3] の対数スケールで、正の値を探索します。

  • KernelFunctionfitcsvm は、'gaussian''linear' および 'polynomial' で探索します。

  • PolynomialOrderfitcsvm は、範囲 [2,4] の整数値を探索します。

  • Standardizefitcsvm は、'true''false' で探索します。

既定以外のパラメーターを設定するには、既定以外の値が含まれている optimizableVariable オブジェクトのベクトルを渡します。次に例を示します。

load fisheriris
params = hyperparameters('fitcsvm',meas,species);
params(1).Range = [1e-4,1e6];

OptimizeHyperparameters の値として params を渡します。

既定では、コマンド ラインに反復表示が表示され、最適化のハイパーパラメーターの個数に従ってプロットが表示されます。最適化とプロットにおける目的関数は、回帰の場合は log(1 + 交差検証損失)、分類の場合は誤分類率です。反復表示を制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'Verbose フィールドを設定します。プロットを制御するには、名前と値のペアの引数 'HyperparameterOptimizationOptions'ShowPlots フィールドを設定します。

例については、SVM 分類器の最適化を参照してください。

例: 'auto'

データ型: char | cell

最適化のオプション。'HyperparameterOptimizationOptions' と構造体から構成されるコンマ区切りのペアとして指定します。この引数を指定すると、名前と値のペアの引数 OptimizeHyperparameters の効果が変化します。この構造体のフィールドは、すべてオプションです。

フィールド名既定の設定
Optimizer
  • 'bayesopt' — ベイズ最適化を使用。内部的には bayesopt が呼び出されます。

  • 'gridsearch' — 次元ごとに NumGridDivisions の値があるグリッド探索を使用。

  • 'randomsearch'MaxObjectiveEvaluations 個の点で無作為に探索。

'gridsearch' では、グリッドからの一様な非復元抽出により、無作為な順序で探索します。最適化後、sortrows(Mdl.HyperparameterOptimizationResults) コマンドを使用してグリッド順のテーブルを取得できます。

'bayesopt'
AcquisitionFunctionName

  • 'expected-improvement-per-second-plus'

  • 'expected-improvement'

  • 'expected-improvement-plus'

  • 'expected-improvement-per-second'

  • 'lower-confidence-bound'

  • 'probability-of-improvement'

詳細については、bayesopt の名前と値のペアの引数 AcquisitionFunctionName または獲得関数のタイプを参照してください。

'expected-improvement-per-second-plus'
MaxObjectiveEvaluations目的関数評価の最大数。'bayesopt' または 'randomsearch' の場合は 30'gridsearch' の場合はグリッド全体
MaxTime

制限時間。正の実数を指定します。制限時間の単位は、tictoc によって測定される秒です。MaxTime は関数評価を中断させないため、実行時間が MaxTime を超える可能性があります。

Inf
NumGridDivisions'gridsearch' における各次元の値の個数。値は、各次元の値の個数を表す正の整数のベクトル、またはすべての次元に適用されるスカラーが可能です。カテゴリカル変数の場合、このフィールドは無視されます。10
ShowPlotsプロットを表示するかどうかを示す論理値。true の場合、最良の目的関数の値が反復回数に対してプロットされます。1 つまたは 2 つの最適化パラメーターがあり、Optimizer'bayesopt' である場合、ShowPlots はパラメーターに対する目的関数のモデルのプロットも行います。true
SaveIntermediateResultsOptimizer'bayesopt' である場合に結果を保存するかどうかを示す論理値。true の場合、'BayesoptResults' という名前のワークスペース変数が反復ごとに上書きされます。この変数は BayesianOptimization オブジェクトです。false
Verbose

コマンド ラインへの表示。

  • 0 — 反復表示なし

  • 1 — 反復表示あり

  • 2 — 追加情報付きで反復表示あり

詳細については、bayesopt の名前と値のペアの引数 Verbose を参照してください。

1
UseParallelベイズ最適化を並列実行するかどうかを示す論理値。並列実行には Parallel Computing Toolbox™ が必要です。詳細については、並列ベイズ最適化を参照してください。false
Repartition

反復ごとに交差検証を再分割するかどうかを示す論理値。false の場合、オプティマイザーは単一の分割を最適化に使用します。

分割ノイズが考慮されるので、通常は true にすると最も確実な結果が得られます。ただし、true で良好な結果を得るには、2 倍以上の関数評価が必要になります。

false
以下の 3 つのフィールド名は 1 つだけ使用できます。
CVPartitioncvpartition によって作成される cvpartition オブジェクト。交差検証フィールドが指定されていない場合 'Kfold',5
Holdoutホールドアウトの比率を表す範囲 (0,1) のスカラー。
Kfold1 より大きい整数。

例: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

データ型: 構造体

出力引数

すべて折りたたむ

学習済みの SVM 分類モデル。ClassificationSVM モデル オブジェクトまたは ClassificationPartitionedModel 交差検証済みモデル オブジェクトとして返されます。

以下の各名前と値のペアの引数のいずれかを設定する場合、MdlClassificationPartitionedModel 交差検証分類器となります。KFoldHoldoutLeaveoutCrossVal または CVPartition。それ以外の場合、MdlClassificationSVM 分類器です。

Mdl のプロパティを参照するには、ドット表記を使用します。たとえば、コマンド ウィンドウに Mdl.Alpha と入力すると、学習させたラグランジュ乗数が表示されます。

制限

  • fitcsvm は、1 クラスまたは 2 クラスの学習アプリケーションの場合に SVM 分類器に学習をさせます。クラスが 3 つ以上あるデータを使用して SVM 分類器を学習させるには、fitcecoc を使用します。

  • fitcsvm は、低~中次元のデータセットをサポートします。高次元データセットの場合は、代わりに fitclinear を使用してください。

詳細

すべて折りたたむ

ボックス制約

ボックス制約は、マージンに違反している観測値に課せられる最大ペナルティを制御するパラメーターであり、過適合の防止 (正則化) に役立ちます。

ボックス制約の値を大きくすると、SVM 分類器が割り当てるサポート ベクターは少なくなります。ただし、ボックス制約の値を大きくすると、学習時間が長くなる場合があります。

グラム行列

n 個のベクトルの組 {x1,..,xn; xj ∊ Rp} のグラム行列とは、n 行 n 列の行列で、要素 (j,k) は G(xj,xk) = <ϕ(xj),ϕ(xk)> (カーネル関数 ϕ を使用して変換された予測子の内積) として定義されます。

非線形 SVM の場合、予測子データ X の行を使用してグラム行列が形成されます。双対形式化により、X 内の観測値の内積が、形成されるグラム行列の対応する要素に置き換えられます ("カーネル トリック" と呼ばれます)。この結果、分離超平面を求めるために、変換された予測子空間で非線形 SVM が作用します。

カルーシュ・キューン・タッカー (KKT) 相補性条件

KKT 相補性条件は、最適な非線形計画法の解決に必要な最適化制約です。

SVM では、すべての j = 1,...,n についてKKT 相補性条件は次のようになります。

{αj[yjf(xj)1+ξj]=0ξj(Cαj)=0

ここで、f(xj)=ϕ(xj)β+b, であり、ϕ はカーネル関数 (グラム行列を参照)、ξj はスラック変数です。クラスが完全に可分な場合、すべての j = 1,...,n に対して ξj = 0 となります。

1 クラス学習

1 クラス学習 (教師なし SVM) は、(元の予測子空間ではない) 高次元予測子空間の原点からデータを分離することを目的としており、外れ値の検出に使用されるアルゴリズムです。

このアルゴリズムはバイナリ分類の SVM のアルゴリズムと類似しています。目的は、α1,...,αn に関して次の双対式を最小化することです。

0.5jkαjαkG(xj,xk)

これには、すべての j = 1,...,n について 0αj1 と次の式を満たすという条件があります。

αj=nν

G(xj,xk) の値は、グラム行列の要素 (j,k) です。

ν の値が小さいとサポート ベクターが少なくなるので、判定境界は起伏が少なく柔軟性が低いものとなります。ν の値が大きいとサポート ベクターが多くなるので、判定境界は起伏が多く柔軟性が高いものとなります。ν の最適値は、データの複雑さを取り込めるだけの大きさがあり、過学習が発生しない程度に小さい値です。また、0 < ν ≤ 1 です。

詳細は、[5]を参照してください。

サポート ベクター

サポート ベクターは、α1,...,αn の厳密に正の推定値に対応する観測値です。

特定の学習セットに対して生成されるサポート ベクターが少ない SVM 分類器の方が推奨されます。

バイナリ分類のサポート ベクター マシン

SVM バイナリ分類アルゴリズムでは、データを 2 つのクラスに分離する最適超平面が検索されます。クラスが可分な場合、最適超平面は周囲の "マージン" (観測値がない領域) を最大化します。これにより、陽性のクラスと陰性のクラスの境界が作成されます。クラスが不可分な場合でも目的は同じですが、クラスの境界の誤った側にあるすべての観測のマージンの長さに対し、アルゴリズムによりペナルティが課されます。

線形 SVM スコア関数は次のようになります。

f(x)=xβ+b,

ここで

  • x は観測値です (X の行に対応します)。

  • ベクトル β には超平面に直交するベクトルを定義する係数 (Mdl.Beta に対応) が含まれています。可分データの場合、最適なマージンの長さは 2/β. です。

  • b は (Mdl.Bias に対応する) バイアス項です。

特定の係数に対する f(x) の根により超平面が定義されます。特定の超平面について、f(z) は点 z から超平面までの距離です。

このアルゴリズムでは、陽性 (y = 1) のクラスと陰性 (y = -1) のクラスを分離したままマージンの最大長を求めます。

  • 可分クラスの場合、目的は β および b に関して β を最小化することです。これには、すべての j = 1,..,n について yjf(xj) ≥ 1 という条件があります。これが可分クラスの "主" 問題の定式化です。

  • 不可分クラスの場合、このアルゴリズムではスラック変数 (ξj) を使用して、クラスのマージン境界を超える観測値の目的関数にペナルティを課します。観測値がクラスのマージン境界を超えない場合は ξj = 0、それ以外の場合は ξj ≥ 0 です。

    目的は、β、b および ξj に関して 0.5β2+Cξj を最小化することです。これには、すべての j = 1,..,n および正のスカラー ボックス制約 C について yjf(xj)1ξj および ξj0 という条件があります。これは不可分クラスの主問題の定式化です。

このアルゴリズムでは、ラグランジュ乗数法を使用して目的関数を最適化します。これにより、(Mdl.Alpha に対応する) n 個の係数 α1,...,αn が導入されます。線形 SVM の双対形式化は次のようになります。

  • 可分クラスの場合、α1,...,αn に関して次の式を最小化します。

    0.5j=1nk=1nαjαkyjykxjxkj=1nαj

    これには、すべての j = 1,...,n について αjyj=0, αj ≥ 0 という条件とカルーシュ・キューン・タッカー (KKT) 相補性条件が適用されます。

  • 不可分クラスの場合、目的関数は可分クラスの場合と同じですが、すべての j = 1,..,n について 0αjC という条件が加わります。

生成されるスコア関数は次のようになります。

f^(x)=j=1nα^jyjxxj+b^.

b^ はバイアスの推定値、α^j はベクトル α^ の j 番目の推定値です (j = 1,...,n)。このように記述すると、主問題を定式化した結果、スコア関数は β の推定値の影響を受けなくなります。

SVM アルゴリズムでは、sign(f^(z)). を使用して新しい観測値 z を分類します。

場合によっては、非線形境界によってクラスが分離されます。"非線形 SVM" は変換済み予測子空間で、最適な分離超平面を検索します。

非線形 SVM の双対問題は、α1,...,αn に関して次のように定式化されます。

0.5j=1nk=1nαjαkyjykG(xj,xk)j=1nαj

これには、すべての j = 1,..,n について αjyj=0, 0αjC という条件と KKT 相補性条件が適用されます。G(xk,xj) は、グラム行列の要素です。生成されるスコア関数は次のようになります。

f^(x)=j=1nα^jyjG(x,xj)+b^.

詳細は、サポート ベクター マシンについて[1]および[3]を参照してください。

ヒント

  • データセットが大規模でない限り、常に予測子を標準化してください (Standardize を参照してください)。標準化を行うと、予測子を測定するスケールの影響を受けなくなります。

  • 名前と値のペアの引数 KFold を使用して交差検証を行うことをお勧めします。この交差検証の結果により、SVM 分類器の一般化の精度がわかります。

  • 1 クラス学習では、以下のようになります。

    • 名前と値のペアの引数 Alpha で既定の設定を使用すると、学習時間が長くなる場合があります。学習時間を短縮するには、主に 0 で構成されているベクトルに Alpha を設定します。

    • 名前と値のペアの引数 Nu0 に近い値に設定すると、サポート ベクターの個数が少なくなるので、判定境界は滑らかで大まかなものになります。

  • SVM 分類器では、サポート ベクターの密度が低い方が望ましい状態です。サポート ベクターの数を少なくするには、BoxConstraint を大きい値に設定します。この場合、学習時間が長くなります。

  • 学習時間を最適にするには、使用しているコンピューターで許容されるメモリの制限値まで CacheSize を大きくします。

  • サポート ベクターの個数が学習セット内の観測値数よりはるかに少ないと考えられる場合、名前と値のペアの引数 'ShrinkagePeriod' を使用してアクティブ セットを縮小すると、収束を大幅に高速化することができます。'ShrinkagePeriod',1000 を指定することをお勧めします。

  • 判定境界から離れている重複する観測値は、収束に影響を与えません。しかし、重複する観測値が判定境界の近くに少しでもあると、収束が大幅に遅くなる可能性があります。収束を高速化するには、次の場合に 'RemoveDuplicates',true を指定します。

    • 多数の重複する観測値がデータセットに含まれている。

    • 少数の重複する観測値が判定境界の近くにあると考えられる。

    学習時に元のデータセットを維持するため、fitcsvm は別々のデータセット、つまり元のデータセットおよび重複する観測値を除外したデータセットを一時的に格納しなければなりません。このため、重複がほとんど含まれていないデータセットの場合に true を指定すると、fitcsvm は元のデータの場合の 2 倍に近いメモリを消費します。

  • fitcsvm を使用して ClassificationSVM モデル オブジェクトに学習をさせた後で、関数 predict と学習済みのモデル オブジェクトを使用して、新しいデータについてラベルを予測する C コードを生成します。詳細については、コード生成を参照してください。

アルゴリズム

  • SVM バイナリ分類アルゴリズムの数学的定式化については、バイナリ分類のサポート ベクター マシンサポート ベクター マシンについてを参照してください。

  • NaN<undefined> および空の文字ベクトル ('') の値は、欠損値を示します。fitcsvm は、欠損応答に対応するデータ行全体を削除します。fitcsvm は、重みの合計を計算するときに (以下の項目を参照)、欠損している予測子が 1 つ以上ある観測値に対応する重みを無視します。これにより、平衡なクラスの問題で不平衡な事前確率が発生する可能性があります。したがって、観測値のボックス制約が BoxConstraint に等しくならない可能性があります。

  • fitcsvm は、重みまたは事前確率がゼロの観測値を削除します。

  • 2 クラス学習でコスト行列 C (Cost を参照) を指定した場合、C で表されているペナルティを組み込むことにより、クラスの事前確率 p (Prior を参照) が pc に更新されます。

    具体的には、fitcsvm は以下のステップを完了します。

    1. pc=pC. を計算します。

    2. 更新された事前確率の合計が 1 になるように pc* を正規化します。

      pc=1j=1Kpc,jpc.

      K はクラスの個数です。

    3. コスト行列を既定値にリセットします。

      C=[0110].

    4. 事前確率がゼロのクラスに対応する観測値を学習データから削除します。

  • 2 クラス学習の場合、fitcsvm は合計が 1 になるようにすべての観測値の重み (Weights を参照) を正規化します。その後、観測値が属しているクラスの更新後の事前確率に重みの合計が等しくなるように、正規化された重みを再度正規化します。つまり、クラス k の観測値 j について、重みの合計は次のようになります。

    wj=wjjClass kwjpc,k.

    ここで、wj は観測値 j の正規化された重み、pc,k はクラス k の更新された事前確率 (前の項目を参照) です。

  • 2 クラス学習の場合、fitcsvm は学習データの各観測値にボックス制約を割り当てます。観測値 j のボックス制約の式は、次のようになります。

    Cj=nC0wj.

    ここで、n は学習標本のサイズ、C0 は初期のボックス制約 (名前と値のペアの引数 'BoxConstraint' を参照)、wj は観測値 j の重みの合計 (前の項目を参照) です。

  • 'Standardize',true と訛れと値のペアの引数 'Cost''Prior' または 'Weights' を設定した場合、fitcsvm は対応する加重平均および加重標準偏差を使用して予測子を標準化します。つまり、fitcsvm は以下を使用して予測子 j (xj) を標準化します。

    xj=xjμjσj.

    μj=1kwkkwkxjk.

    xjk は、予測子 j (列) の観測値 k (行) です。

    (σj)2=v1v12v2kwk(xjkμj)2.

    v1=jwj.

    v2=j(wj)2.

  • p は学習データで予期される外れ値の比率であり、'OutlierFraction',p を設定したと仮定します。

    • 1 クラス学習では、バイアス項の学習により、学習データの観測値のうち 100p% が負のスコアをもつようになります。

    • 2 クラス学習では "ロバスト学習" が行われます。この方式では、最適化アルゴリズムが収束すると、観測値のうち 100p% の削除が試行されます。削除された観測値は、勾配の大きいものに対応します。

  • 予測子データにカテゴリカル変数が含まれている場合、一般にこれらの変数について完全なダミー エンコードが使用されます。各カテゴリカル変数の各レベルについて、1 つずつダミー変数が作成されます。

    • PredictorNames プロパティには、元の予測子変数名のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、PredictorNames は元の予測子変数名が含まれている 1 行 3 列の文字ベクトルの cell 配列になります。

    • ExpandedPredictorNames プロパティには、ダミー変数を含む予測子変数のそれぞれについて 1 つずつ要素が格納されます。たとえば、3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、ExpandedPredictorNames は予測子変数および新しいダミー変数の名前が含まれている 1 行 5 列の文字ベクトルの cell 配列になります。

    • 同様に、Beta プロパティには、ダミー変数を含む各予測子について 1 つずつベータ係数が格納されます。

    • SupportVectors プロパティには、ダミー変数を含むサポート ベクターの予測子の値が格納されます。たとえば、m 個のサポート ベクターと 3 つの予測子があり、そのうちの 1 つは 3 つのレベルがあるカテゴリカル変数であるとします。この場合、SupportVectors は n 行 5 列の行列になります。

    • X プロパティには、はじめに入力されたときの状態で学習データが格納され、ダミー変数は含まれません。入力がテーブルの場合、X には予測子として使用した列のみが格納されます。

  • テーブルで予測子を指定した場合、いずれかの変数に順序付きのカテゴリが含まれていると、これらの変数について順序付きエンコードが使用されます。

    • k 個の順序付きレベルが変数に含まれている場合、k - 1 個のダミー変数が作成されます。j 番目のダミー変数は、j までのレベルについては -1j + 1 から k までのレベルについては +1 になります。

    • ExpandedPredictorNames プロパティに格納されるダミー変数の名前は 1 番目のレベルを示し、値は +1 になります。レベル 2, 3, ..., k の名前を含む k - 1 個の追加予測子名がダミー変数について格納されます。

  • どのソルバーも L1 ソフト マージン最小化を実装します。

  • 1 クラス学習の場合、次の条件を満たすラグランジュ乗数 α1,...,αn が推定されます。

    j=1nαj=nν.

参照

[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.

[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol. 6, 2005, pp. 1889–1918.

[3] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.

[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.

[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.

[6] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.

R2014a で導入